草庐IT

OSPF及其高级特性

Ant_blog 2023-03-28 原文

1、ospf(开放式最短路径优先协议,网络层协议,协议号为89,通过组播来发送消息),是一种链路状态路由协议。核心有三张表,邻居表、数据库表、路由表。宏观上先建立邻居表,通过邻居互相同步数据库,然后再利用数据库中的数据来计算出到达每个节点的路由放进路由表中。

2、建立邻居的过程:

①双方通过发送hello包来建立邻居表 ,在点对点和广播的网络中hello包10秒发送异常40秒老化。

②双方通过hello包来选举DR与BDR。

③通过一个空LSADBD报文用来确定主从与序列号,

④通过LSADBD报文将自己的数据库概要信息发送给对方。

⑤通过LSR、LSU、LSack报文同步数据库。

⑥使用SFP算法计算出最佳路由放在路由表中。

3、hello报文中一般包含自己的router-id、接口信息、IP地址、掩码、优先级、邻居的信息等。

4、DR与BDR,再ospf中每一个网段都需要选举出一个DR与BDR,因为再网络中需要进行数据库的同步,那么就需要发送大量的LSA报文,每一个节点都要相互发送,这样就会造成广播风暴,所以需要选举DR与BDR,所有的节点只跟DR与BDR形成邻居关系,当他们需要更新LSA的时候直接将LSA发送给DR与BDR,再由DR将LSA发送给网络中的其他节点。再点对点的网络中是不需要选举DR与BDR的,在串口的为网络下也不需要DR与BDR的选举。DR与BDR的选举是按照hello包中的优先级和router-id选举的,优先级默认为1。先选举BDR,再看网络中是否由DR,没有在升级为DR,再选举BDR。

5、ABR与ASBR,ABR路由器是连接骨干区域与非骨干区域的路由器称为ABR,ASBR是具有重分发路由的路由器称为ASBR。

6、ospf默认的cost值为(10的8次方/接口带宽),100M的带宽cost值为1。cost值越小越好。

7、ospf的多区域,ospf的网络中可以存在多个区域,但是必须存在一个且只有一个骨干区域(area 0),并且其他非骨干区域必须与这个骨干区域直连。

8、ospf的邻居状态机:

①init初始化状态:相互之间发送hello包。hello包那里面包括源IP(自己接口的ip)、目的IP(组播地址22.0.0.5)、TTL值为1、RID、邻居id为空、DR与BDR也为空、hello包刷新与老化时间等。

②2-way状态:双方交换hello后确定邻居之后进入2-way状态,2-way状态用于选举DR与BDR,通过hello包中的优先级、RID来选举RDR与BDR。先配置的路由器会等待40秒(40秒的等待时间),40秒过了之后还没有DR那么自己成为DR。

③Exstart状态:选完DR与BDR后进入Exstart状态。双方发送空的LSDBD报文,该状态下用于确定主从与序列号的同步,因为在后面要同步数据库,所有要使用到序列号,而且双方的序列号要同步。通过空的LSDBD报文中的RID来确定主从,并且使用主路由器的序列号。

④Exchange状态:主从选好以及序列号同步之后,发送LSADBDB报文,这是该报文中的数据是自己数据库中LSA的摘要信息,并不是数据库的详细信息。

⑤Loading状态:主路由器先发起数据库同步,获取对方的数据库摘要后,查看在对方的数据库中自己有哪些是没有的,然后向对方发起自己所没有的数据库同步报文。首先发起LSR数据库同步请求报文,对方收到之后在将完整的数据库信息返回(LSU报文携带完整的LSA信息),之后在回复一个LSack报文用于确认。在这个阶段双方会相互之间完整的交互数据库信息,直到完全同步为止。

⑥Full状态:在同步完之后,利用SFP算法以自己为根,计算出去往所有节点的最佳路径放于路由表中。此时才是完整的邻居关系建立。

9、ospf中的虚链路:正常情况下,我们的非骨干区域必须与骨干区域直连,中间不能跨越其他区域。但是当我们中间一定要跨区一个区域时就需要用到虚链路了。虚链路就是以中间的区域为承载区域,然后与骨干区形成虚链路直连。虚链路一般只作为临时解决方案,因为在虚链路中,hello包与LSA数据包只在第一次建立邻居关系的时候才有,之后虚链路就不会在发送hello与LSA数据库同步数据包了,这就会导致网络拓扑变化等不到及时的更新,可能造成路由的黑洞。而且虚链路不能跨越一个中间区域,不能跨越两个及以上的区域,再而且就是不能以stub区域与NSSA区域作为承载区域。

10、每个路由器都会再30分钟重新发送自己产生的LAS,自己数据库中的LSA的老化时间为1小时。

11、ospf的四个特殊区域:

①stub区域:可以拒绝4类和5类的LSA。也就是可以拒绝重分发路由进入stub区域,ABR路由还会自动的给stub内通告一条缺省路由。同时stub区域内是不允许重分发路由的。

②完全stub区域:就是再stub基础上再拒绝3类LSA进入。3类LSA用于于间路由通告。也就是完全stub区域只剩一条默认路由了。

③NSSA区域:可以拒绝4类和5类的LSA。也就是可以拒绝重分发路由进入NSSA区域,NSSA区域的ABR路由器特别的懒,他不会自动的给stub内通告一条缺省路由,所有要手动的强制通告一条缺省路由进入NSSA区域。同时stub区域内是允许重分发路由的。

④完全NSSA区域:就是再NSSA基础上再拒绝3类LSA进入。也就是完全stub区域只剩强制通告的一条默认路由了。NSSA区域内可以自己重分发路由进入。

12、LSA:

ospf的LSA一共有6种,LSA-1、LSA-2、LSA-3、LSA-4、LSA-5、LSA-7。LSA分为头部和数据部分。

//头部信息:
LS age: 老化时间,1800--3600秒,其中1800是周期的LSA刷新时间,3600是LSA的最大老化时间
Options:可选项
LS Type: 说的是数据部分是几类的LSA
Link State ID: 是一个变量,根据不同的LSA这个地方的数值也不一样
Advertising Router: 这个LSA是谁产生的,就把这个路由器的RID写在这里
LS Seq Number: LSA的序列号,利用这个序列号确定谁的LSA是最新的,LSA每更新一次,序列号+1
Checksum: 奇偶校验和,用于验证数据传输的完整性
Length: 包含了头部信息和数据部分的总长度
Number of Links: 我通告了几个OSPF链路

//数据部分:
每一种LSA的数据部分是不一样的。

 

①LSA-1:每一个路由器都会产生一个LSA-1,只在域间传递。用于描述域内拓扑。

头部信息:
LS age: 老化时间,1800--3600秒,其中1800是周期的LSA刷新时间,3600是LSA的最大老化时间
Options:可选项
LS Type: router
Link State ID: 产生这个LSA路由器的RID
Advertising Router: 这个LSA是谁产生的,就把这个路由器的RID写在这里
LS Seq Number: LSA的序列号,利用这个序列号确定谁的LSA是最新的,LSA每更新一次,序列号+1
Checksum: 奇偶校验和,用于验证数据传输的完整性
Length: 包含了头部信息和数据部分的总长度
Number of Links: 我通告了几个OSPF链路

数据部分:
V:置为1代表虚链路配置节点
E:置为1代表代表ASBR路由器
B:置为1代表代表是一个ABR路由器

链路类型:                  链路ID:                    链路数据:
点对点                    邻居的RID              连接邻居的接口IP
广播                      DR的接口IP地址     连接DR接口的IP地址
stub(末梢)              子网络号           掩码
虚链路 ------------------------------------------------和点对点一样


链路类型点对点:默认情况下只有接口是串口或者是E1接口、T1接口、POS广域网接口情况下这个接口OSPF链路类型是点对点。
链路类型为广播:默认情况下只有接口是以太接口(F0/0,G0/0,T0/0),这个接口OSPF链路类型为广播。
链路类型stub:环回接口,OSPF网络里默认环回接口为stub类型,就算配置环回接口按照24位掩码配置的,在OSPF里面按照24位掩码通告的,但是OSPF仍然会把环回接口按照32位主机路由进行通告更新,除非把环回接口的链路类型改成点对点或者广播。

 

例子:

LS age: 1737
  Options: (No TOS-capability, DC)
  LS Type: Router Links    //1类LSA
  Link State ID: 2.2.2.2    //产生该LSA的RID
  Advertising Router: 2.2.2.2
  LS Seq Number: 80000005
  Checksum: 0x7826
  Length: 60
  Number of Links: 3 //该路由器上由三个接口
          
    Link connected to: a Stub Network    //环回接口也是一个stub。
     (Link ID) Network/subnet number: 2.2.2.2
     (Link Data) Network Mask: 255.255.255.255
      Number of TOS metrics: 0
       TOS 0 Metrics: 1
          
    Link connected to: a Transit Network    //transit就是代表广播类型
     (Link ID) Designated Router address: 23.1.1.3   //DR的ip
     (Link Data) Router Interface address: 23.1.1.2   //自己使用这个接口连接的DR
      Number of TOS metrics: 0
       TOS 0 Metrics: 1
          
    Link connected to: a Transit Network
     (Link ID) Designated Router address: 12.1.1.2
     (Link Data) Router Interface address: 12.1.1.2
      Number of TOS metrics: 0
       TOS 0 Metrics: 1

②LSA-2:由DR路由器产生,用于描述DR的掩码和该网段内路由器的RID,只在区域内传播。

头部信息:
LS age: 老化时间,1800--3600秒,其中1800是周期的LSA刷新时间,3600是LSA的最大老化时间
Options:可选项
LS Type: network //2类LSA
Link State ID: DR的接口IP地址
Advertising Router: 这个LSA是谁产生的,就把这个路由器的RID写在这里
LS Seq Number: LSA的序列号,利用这个序列号确定谁的LSA是最新的,LSA每更新一次,序列号+1
Checksum: 奇偶校验和,用于验证数据传输的完整性
Length: 包含了头部信息和数据部分的总长度
Number of Links: 我通告了几个OSPF链路

数据部分:

----描述这个广播网络(同一个网段种)里每一台路由器的RID
----描述掩码,这个掩码主要是针对DR的接口IP地址描述的

例子:

 LS age: 1366
  Options: (No TOS-capability, DC)
  LS Type: Network Links
  Link State ID: 12.1.1.2 (address of Designated Router)  //DR的ip
  Advertising Router: 2.2.2.2
  LS Seq Number: 80000004
  Checksum: 0xC07
  Length: 32
  Network Mask: /24    //DR的掩码
        Attached Router: 2.2.2.2   //该网段中的RID
        Attached Router: 1.1.1.1

③LSA-3:由ABR路由器产生,用于传递域间路由。stub和NSSA区域无法进入。

头部信息:
LS age: 老化时间,1800--3600秒,其中1800是周期的LSA刷新时间,3600是LSA的最大老化时间
Options:可选项
LS Type: summary
Link State ID: 通告的区域间路由
Advertising Router: 这个LSA是谁产生的,就把这个路由器的RID写在这里
LS Seq Number: LSA的序列号,利用这个序列号确定谁的LSA是最新的,LSA每更新一次,序列号+1
Checksum: 奇偶校验和,用于验证数据传输的完整性
Length: 包含了头部信息和数据部分的总长度
Number of Links: 我通告了几个OSPF链路

数据部分:
----描述这个链路状态ID里面的区域间路由的掩码以及这个ABR去往这个区域间路由的cost值

例子:

  LS age: 1858
  Options: (No TOS-capability, DC, Upward)
  LS Type: Summary Links(Network)   //3类LSA
  Link State ID:10.1.1.1 (summary Network Number)    //通告的区域间路由
  Advertising Router: 3.3.3.3
  LS Seq Number: 80000004
  Checksum: 0xA878
  Length: 28
  Network Mask: /24      //这个区域间路由的掩码
        TOS: 0  Metric: 1    //这个ABR去往10.1.1.1的cost值

④LSA-5:由ASBR路由器产生,全网传播,stub和NSSA区域无法进入。用于通告重分发路由。

头部信息:
LS age: 老化时间,1800--3600秒,其中1800是周期的LSA刷新时间,3600是LSA的最大老化时间
Options:可选项
LS Type: AS External Link
Link State ID: 充分发进来的外部路由
Advertising Router: 这个LSA是谁产生的,就把这个路由器的RID写在这里
LS Seq Number: LSA的序列号,利用这个序列号确定谁的LSA是最新的,LSA每更新一次,序列号+1
Checksum: 奇偶校验和,用于验证数据传输的完整性
Length: 包含了头部信息和数据部分的总长度
Number of Links: 我通告了几个OSPF链路

数据部分:

----描述充分发进来外部路由的掩码
----cost值,充分发进来的外部路由默认的cost值是20
----描述充分发进来外部路由的cost值类型:OE2和OE1,默认是OE2
     OE2不累加OSPF域内的cost值;OE1累计OSPF域内的cost值
----转发地址,默认的转发地址为0.0.0.0:代表去往这个外部路由先把数据包发给ASBR路由器

例子:

 LS age: 182
  Options: (No TOS-capability, DC)
  LS Type: AS External Link   //5类LSA
  Link State ID: 192.168.110.0 (External Network Number )  //重分发进来的网段
  Advertising Router: 7.7.7.7
  LS Seq Number: 80000002
  Checksum: 0x1F0D
  Length: 36
  Network Mask: /24     //重分发进来的网段的掩码
        Metric Type: 1 (Comparable directly to link state metric) //OE1
        TOS: 0 
        Metric: 20 
        Forward Address: 0.0.0.0  //转发地址为ASBR
        External Route Tag: 0

⑤LSA-4:ABR路由器产生。通告ASBR路由器的RID。因为再LSA-5中没有去往ASBR的路由。stub和NSSA区域无法进入。

LSA-4特点:每经过一个ABR路由器都会对这个LSA-4重新产生一次,主要作用是计算这个ABR路由器到ASBR的cost值。

头部信息:
LS age: 老化时间,1800--3600秒,其中1800是周期的LSA刷新时间,3600是LSA的最大老化时间
Options:可选项
LS Type: Summary Links
Link State ID: ASBR路由器的RID
Advertising Router: 这个LSA是谁产生的,就把这个路由器的RID写在这里
LS Seq Number: LSA的序列号,利用这个序列号确定谁的LSA是最新的,LSA每更新一次,序列号+1
Checksum: 奇偶校验和,用于验证数据传输的完整性
Length: 包含了头部信息和数据部分的总长度
Number of Links: 我通告了几个OSPF链路

数据部分:

----COST值,最近的ABR去往这个ASBR的cost值

例子:

LS age: 599
  Options: (No TOS-capability, DC, Upward)
  LS Type: Summary Links(AS Boundary Router)
  Link State ID: 7.7.7.7 (AS Boundary Router address)
  Advertising Router: 3.3.3.3
  LS Seq Number: 80000001
  Checksum: 0x745D
  Length: 28
  Network Mask: /0
        TOS: 0  Metric: 66 

⑥LSA-7:NSSA区域的ASBR产生的。在NSSA区域内部传播。在NSSA区域重分发进来的外部路由以LSA-7方式进来,报文格式和LSA-5一样LSA-7进入NSSA区域,由NSSA区域的ABR路由器把LSA-7转换成LSA-5后在通告进OSPF的骨干区域和其他区域。由LSA-7转换的LSA-5他的转发地址是ASBR的地址,而 正常的LSA-5的转发地址是0.0.0.0。

例子L

LS age: 140
  Options: (No TOS-capability, Type 7/5 translation, DC)  //7转5
  LS Type: AS External Link
  Link State ID: 8.8.8.8 (External Network Number )
  Advertising Router: 7.7.7.7
  LS Seq Number: 80000001
  Checksum: 0x7D5C
  Length: 36
  Network Mask: /32
        Metric Type: 2 (Larger than any link state path)
        TOS: 0 
        Metric: 20 
        Forward Address: 7.7.7.7   //转发地址与普通的LSA-5不一样。
        External Route Tag: 100  //可以自己手动打上标记

13、ospf的高级特性:

① ospf的路由聚合:只能在ABR或者ASBR路由器上做路由聚合,路由聚合可以防止路由的抖动现象。还能减轻路由表条目以及数据库条目。

172.16.1.0/24
172.16.2.0/24
172.16.3.0/24
172.16.4.0/24
172.16.5.0/24
-------------------------
172.16.0.0/16

ASBR(config)#router os 100
ASBR(config-router)#summary-address 172.16.0.0 255.255.0.0
ASBR(config-router)#exit

②ospf的认证,接口认证与区域认证:可以是不认证、明文认证、密文认证。区域认证为思科私有技术。一般开启接口认证即可。

//接口认证:
sw1(config)#int vlan 13
sw1(config-if)#ip ospf authentication message-digest 
sw1(config-if)#ip ospf message-digest-key 1 md5 kkk
sw1(config-if)#exit

//注意:接口认证确保认证方式要匹配,认证的key-id要匹配,认证的密钥也要匹配
如果需要不中断邻居关系更换认证密钥,那么就需要再写一个不一样的key-id,然后将原来的删除就行。

③负载均衡:

负载均衡:默认4条,最大16条;思科默认启用了CEF快速转发技术,CEF表中遵循的负载均衡算法是基于会话的;CEF为每一个相同的会话执行负载行为;
可以调整为给予数据包的会话(....if)#ip cef load-sharing pre-packet 。 Router(config)router ospf 100 Router(config-router)#maximum-paths 16 Router(config-router)#exit

④接口下修改优先级和cost

r1(config-if)#ip ospf priority 2   //大好,思科0代表是丧失选举DR和BDR,华为0代表最小 ,影响DR与BDR的选举。
r1(config-if)#ip ospf cost 65535     //修改cost值。影响选路。

⑤通告缺省路由:强制通告和普通通告,普通通告时需要在自己的路由表中已存在一条缺省路由。

强制通告OSPF默认路由给邻居:强制通告的OSPF默认路由以外部路由体现,默认metric为1。

(config-router)#default-information originate always

修改参考带宽值

r1(config-router)#auto-cost reference-bandwidth 1000
一个路由器,有个G借口,有个F接口,但算出来的cost值都是1,不公平!全局生效。单位是M,cost值小于1按1算。
这个1000M实际是替代10的8次方,修改改为所有接口中最大的带宽为参考值。

⑤修改管理距离:因为不同的厂商的设备管理距离不一致,可能会导致次优选路或者环路的产生,所以要将他们改为一致。

r1(config-router)#distance 120
r1(config-router)#distance ospf intra-area 10 inter-area 20 external 30  //修改域间、域内、重分发的管理距离。

⑥修改接口带宽:修改接口带宽可以影响cost值的计算,从而影响选路。

⑦被动接口:passive接口,只收不发hello包,一般用于不建立邻居关系时使用。

⑧MTU值:一般MTU值不匹配无法建立完全邻居关系,会卡在Exstart状态。因为LSDBDB报文需要使用到MTU值,不匹配则无法传递LSDBDB报文。可以修改MTU值,也可以设置为忽略MTU值的检查。

⑨修改hello包发送间隔时间或者老化时间:可以加快网络的收敛速度,如果两端的hello包发送间隔时间或者老化时间不一致,则邻居关系起不来。

⑩LSA的组团更新:就是运行SPF算法的时间间隔,防止SPF长时间运行。

①①路由过滤:使用前缀列表匹配路由,然后应用在接口上,可以过滤LSA-3。加油一种就是distribute-list过滤,可以到达过滤LSA-3一样的效果,不通的是过滤的方式不一样,这个是过滤的是路由,而前者是过滤LSA-3。distribute-list过滤在out方向无效。

①②注意:当一端的链路类型为点对点,一端为广播时,邻居关系可以起来,但是无法计算出路由,也就是路由表中没有路由。还有一个就是在串口下两端的IP地址与掩码不一致的时候邻居关系也可以起来,也是没有路由。

①③邻居起不来总结:

物理层不同,ping不通| acl过滤了hello包| 被动接口| 
IP地址与掩码不匹配| 链路两端不在同一区域| 认证类型或认证密钥不一致|
接口类型或区域类型不一致| 接口的链路类型不一致| MTU不一致| ospf宣告错误| RID相同|

邻居长期处于2-way状态:DRothor与DRothor之间为正常长期处于2-way状态。

①④影响ospf的选路:带宽、cost值、metric值、管理距离、路由聚合........

-------------------完事~~----------------------------

 

有关OSPF及其高级特性的更多相关文章

  1. ruby - 高级语言是否使用数据结构? - 2

    我目前还在上学,正在上一门关于用C++实现数据结构的类(class)。在业余时间,我喜欢使用“高级”语言(主要是Ruby和一些c#)进行编程。既然这些高级语言为你管理内存,你会用数据结构做什么?我可以理解对队列和堆栈的需求,但是您需要在Ruby中使用二叉树吗?还是2-3-4树?为什么?谢谢。 最佳答案 Sosincethesehigherlevellanguagesmanagethememoryforyou,whatwouldyouusedatastructuresfor?使用数据结构的主要原因与垃圾收集无关。但它是以某种方式有效的

  2. 对于体育新闻中文文本关键字提取有哪些关键字提取算法及其步骤 - 2

    对于体育新闻中文文本的关键字提取,常用的算法包括TF-IDF、TextRank和LDA等。它们的基本步骤如下:1.TF-IDF算法: -将文本进行分词和词性标注处理。-统计每个词在文本中的词频(TF)。-计算每个词在整个语料库中出现的文档频率(DF)和逆文档频率(IDF)。-计算每个词的TF-IDF值,并按照值的大小进行排序,选择排名前几的词作为关键字。2.TextRank算法:-将文本进行分词和词性标注处理。-将分词结果转化成图模型,每个词语为节点,根据词语之间的共现关系建立边。-对图模型进行迭代计算,计算每个节点的PageRank值,表示该节点的重要性。-选择排名前几的节点作为关键字。3.

  3. 光度学中的能量、通量、出度、照度、强度、亮度参数及其联系 - 2

    光度学中的能量、通量、出度、照度、强度、亮度参数及其联系光度学中评价光的强弱有两种方式,一种是将光作为电磁波,考察其辐射的能量;另一种是以人眼视觉体验来评价光的强弱。前者被称为辐射量,后者被称为光学量。辐射量包括辐射能、辐通量、辐出量、辐照度、辐强度、辐亮度参数,与之相对应,光学量包括光能量、光通量、光出量、光照度、光强度、光亮度参数。通过该文章的阅读,读者还能掌握光学中的几个单位:流明,勒克斯,坎德拉,尼特的意义以及他们之间的关系。辐射量1.辐射能光以电磁波形式发射、传输或接收的能量。单位:焦耳。2.辐通量单位时间发射、传输和接收的辐射能。单位:瓦特。3.辐出度单位面积的辐射源辐射出的辐通量

  4. ruby-on-rails - Rails 计数器缓存及其实现 - 2

    我正在尝试掌握Rails计数器缓存功能,但无法完全掌握它。假设我们有3个模型ABCA属于B或C,取决于字段key_type和key_id。key_type表示A属于B还是C,因此如果key_type="B"则记录属于B,否则属于C。在我的模型a.rb中,我定义了以下关联:belongs_to:b,:counter_cache=>true,:foreign_key=>"key_id"belongs_to:c,:counter_cache=>true,:foreign_key=>"key_id"和在b和c模型文件中has_many:as,:conditions=>{:key_type=>"

  5. c# - 与 C# 相比,您会强调 Ruby 的哪些语言特性? - 2

    我正在就Ruby语言和环境向.NET(C#)开发团队进行一系列演讲。我把它当作一个机会来强调Ruby相对于C#的优势。首先,我想在进入环境之前专注于语言本身(RoR与ASPMVC等)。你会介绍Ruby语言的哪些特性? 最佳答案 我刚才在一个.NET用户组做了一个关于IronRuby的演讲,遇到了类似的问题。我关注的事情是:鸭子打字。没有什么比ListstringList=newList()更愚蠢的了;表达力强,语法简洁。简单的事情,比如省略括号、数组和散列文字等(结合鸭子类型,你会得到string_list=[]这显然更好)。所有的

  6. ruby - 你最喜欢 Ruby 的什么特性? - 2

    就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter为指导。9年前关闭。已向.NET提出类似问题和Java,但不适用于Ruby。所以,你最喜欢Ruby的什么特性?您可能还对hiddenfeaturesofRuby感兴趣.请具体说明,并为每个答案发布一项功能。解释或代码示例会很好。 最佳答案 块非常好:my_array.each{|element|printelement}#.

  7. ruby-on-rails - Ruby on Rails 最酷的特性是什么,为什么选择它? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭8年前。Improvethisquestion在我问这个问题之前,我浏览了SO上“RubyonRails”的搜索结果。找不到太多,但以下(foundonthispage)让我觉得很有趣Personally,Istartedusing.html,movedontophp,triedruby(hatedit),discoveredPython/DJango..andhavebeenhappyeversince.这就是交易。我个人目前还没有

  8. Nature Neuroscience:高家红团队首次发布中国人脑连接组计划研究成果及其大数据资源 - 2

    人类生活在充满多样性的世界里。长久以来的研究发现,人类的脑与行为受到基因、环境和文化及其相互作用的塑造,然而这种影响发生的机制始终缺乏系统性探索与研究。近年来,前沿神经影像技术方法飞速进步,推动着多模态脑成像大数据集的产生和融合性探索,并让学界得以深入探究人脑宏观结构与功能连接组架构,为包括上述主题在内的许多有趣而重要的科学问题带来了新的启发和思路。2022年12月20日,北京大学物理学院、IDG麦戈文脑科学研究所高家红团队在《NatureNeuroscience》在线发表了题为“IncreasingdiversityinconnectomicswiththeChineseHumanConne

  9. 科研中论文常见数学符号及其含义(科研必备,建议收藏) - 2

    论文常见数学符号及其含义(科研必备)返回论文和资料目录数学符号在数学领域是非常重要的。在论文中,使用数学符号可以使得论文更加简洁明了,同时也能够准确地描述各种概念和理论。在本篇博客中,我将介绍一些常见的数学符号及其含义(省去特别简单的符号),希望能够帮助读者更好地理解数学论文。高等数学∑i=1nxi\sum_{i=1}^nx_i∑i=1n​xi​(求和符号):表示将x1,x2,…,xnx_1,x_2,\dots,x_nx1​,x2​,…,xn​中的所有数相加,例如∑i=1nxi\sum_{i=1}^nx_i∑i=1n​xi​表示将x1,x2,…,xnx_1,x_2,\dots,x_nx1​,x

  10. ruby - 是否有任何你避免使用的 Ruby 语言特性? - 2

    在我看来,Ruby的句法非常灵活,很多东西可以用多种方式编写。作为Ruby程序员,有没有什么语言特性/语法糖/编码约定是您避免清楚的?我问的是您选择有意不使用的东西,而不是您仍然需要学习的东西。如果您的回答是“我什么都用!”,如果读者知道相关的Ruby语法,您是否曾经对代码进行注释?[我对RoR上下文中的Ruby特别感兴趣,但欢迎一切。] 最佳答案 “$”全局变量的整个范围(参见Pickaxe2pp333-336)大多继承自Perl,非常可怕,尽管我有时发现自己使用$:而不是$LOAD_PATH.

随机推荐