routing protocols
IP protocol
ICMP protocol
move packets from router’s input
to router’s output
(在router的每内部,决定datagram从哪个output port出)
红色框框住的部分,路由器有了header field
通过转发表(forwarding table
)查找输出端口,这部分有两种可能的方法:1:destination-based forwarding, 2: generalized forwarding
destination-based forwarding
的基本思想
我们目的地中的前缀的前n位和表中的前缀进行匹配,从而选择链路端口。但是我们会发现可能目的地与多个前缀相匹配,这时候就需要用到最长前缀匹配规则(longest prefix matching rule),即在该表中寻找最长的匹配项,并向与最长前缀匹配相关联的链路接口转发分组
Swtiching fabric
大致分为三种:
1.memory
一个分组到达一个输入端口时,该端口会先通过中断方式向路由选择处理器发出信号。于是,该分组从输入端口处被复制到处理器内存中。路由选择处理器则从其首部中提取目的地址,在转发表中找出适当的输出端口,并将该分组复制到输出端口的缓存中。(不能同时转发两个分组)
2.bus
让输入端口为分组预先计划一个交换机内部标签(首部),指示本地输出端口,使分组在总线上传送和传输到输出端口。该分组能由所有输出端口收到,但只有与该标签匹配的端口才能保存该分组
3.crossbar
与前面两种交换方法不同,纵横式网络能够并行转发多个分组。纵横式交换机是非阻塞的(nonblocking),即只要没有其他分组当前被转发到该输出端口,转发到输出端口的分
组将不会被到达输出端口的分组阻塞。
router output port 的结构和input port 的结构类似
对于包的scheduling我们有以下的几种方式
1.FIFO
(先进先出)
如果队列排满了怎么办呢?
一这幅图中的红绿packets为例:
红色的包的优先级比绿色的高,① ② ③首先进入服务区(在③进入的时候①还没有被传出完毕),在①离开时服务区中还剩②和③,③的优先级高,所以三先离开,在③完成了离开之后服务区中只剩下②,所以②开始离开,再②离开到一半的时候④进来了,但是由于②已经处于正在离开的状态,所以即使④的优先级比②高,还是需要等待②离开之后才能继续离开。
3.Round Robin(RR) scheduling
4.Weighted Fair forwarding
determine route
taken by packets from source
todestination
(在不同的router之间)
我们使用routing protocol的目标是选出来一条好的路径,那么什么样的路径算是好的呢,对于好可以有不同的定义,常见的为least “cost”, “fastest”, "least congested"
①:link state algorithm(知道global information)
Dijkstra’s algorithm:
首先是一些基本的定义
待补
②:distance ve*ctor algorithm(知道decentralized information)
待补
在实际中我们会把众多的router,按组分到不同的 autonomous system(AS)
(a.k.a. “domains”)中去,在一个AS中有两类的router,这两种router的区别在于和其它的AS有没有连接。
在同一个的AS之间我们会使用intra-AS routing
在不同AS里面我们会使用inter-AS routing
.
同一个AS里面的router会使用相同的intra-domain protocol而不同一个AS里面可以使用不同的intra-domain protocol。在一个AS内部 gateway router的功能包括了两种routing。
OSPF的优点:
在一个hierarchical的OSPF示例:
BGP分为eBGP
和iBGP
,eBGP是在不同的AS之间运行的,iBGP是在相同的BGP之间运行的。从一个给定的路由器到一个目的子网可能有多条路径,这时候就需要选择最好的路由。首先我们需要知道一些有关于BGP的术语。
Prefix (destination) + attributes = “route”
,在属性中比较重要的就是AS-PATH
和NEXT HOP
。AS -PATH是已经走过的AS的集合(不包括开始的AS)而NEXT HOP是AS・PATH起始的路由器接口的IP地址。
hot potato routing:
对于起始路由器而言,它并不关心inter-domain cost,他只关心怎么规划路径才能使得intra-domain cost最小。
协议对比:
图片来源:https://blog.csdn.net/Jungle_hello/article/details/51438886?utm_source=copy
主机和路由器用ICMP协议来交换网络层的信息:
ICMP通常被认为是IP的一部分,但从体系结构上讲它位于IP之上,因为ICMP报文是承载在IP分组中的。
traceroute(书中解释):
Traceroute是用ICMP报文来实现的。为了判断源和目的地之间所有路由器的名字和地址,源主机中的Traceroute向目的地主机发送一系列普通的IP数据报。这些数据报的每个携带了一个具有不可达UDP端口号的UDP报文段。第一个数据报的TTL为1,第二个的TTL为2,第三个的TTL为3,依次类推。该源主机也为每个数据报启动定时器。当第□个数据报到达第〃台路由器时,第孔台路由器观察到这个数据报的TTL正好过期。根据IP协议规则,路由器丢弃该数据报并发送一个ICMP告警报文给源主机(类型11编码0)。该告警报文包含了路由器的名字和它的IP地址。当该ICMP报文返回源主机时,源主机从定时器得到往返时延,从ICMP报文中得到第n台路由器的名字与IP地址。
在了解SNMP**(一个应用层协议)**之前我们首先需要知道网络管理的基本框架,网络管理的基本组件如下所示
上面是一个ip协议的基本格式,有利于我们对ip协议有一些初步的认识。
MTU
: max.transfer size
在实际的网络连接中,不同链路层协议会有不同的MTU,有时一个包的长度太长,所以需要对包进行fragmentation(分片)的操作。为坚持网络内核保持简单的原则,IPv4的设计者决定将数据报的重新组装工作放到端系统中,而不是放到网络路由器中。
下面是一个分片的例子:
假设MTU为1500 bytes,现在要将一个4000bytes长度的包进行分片
分片的结果如下:
首先我们要关注的是分片后包的长度,1500+1500+1040=4040,通过对比我们可以发现,分片后包的总长度比分片之前的包的长度要多出了40。这是由于之前ip只有一个head field,现在分为了三个包之后有了三个ip field,这样使得多出了两个head field,而一个ip的head field的长度为20 bytes,所以长度增加了20。然后我们要关注的是offset,对于分片后的第二个包,offset的值为1480/8,这是根据第一个包的data的长度除以8得来的。
IP address总共有32-bit. 例:192.168.10.1 这个ip地址中以点为划分,将32位分成了4个八位
interface
: connection between host/router
and physical link
IP address assocciated with each interface
对于一个ip地址,分为subnet part
和host part
,高位为subnet part低位为host part,subnet part 相同的interface属于同一个子网,属于同一个子网的interface能够不经过路由器相互通信。那么如何界定哪些位属于子网呢?例:192.168.10.1 /24, 在这个例子中,/24表示的是最左边的24比特定义了子网地址。/24有时也被称作子网掩码,和另一种表达形式:255.255.255.0是等效的。
两种子网掩码形式的转换(例):
255.255.255.0 → 11111111.11111111.11111111.00000000 对应/24
255.255.0.0 → 11111111.11111111.0.0 对应/16
255.255.128.0 → 11111111.11111111.10000000.00000000 对应/17
255.255.254.0 → 11111111.11111111.11111110.00000000 对应/23
子网聚合(aggregation)
例:
1. 172.16.129.0/24
2. 172.16.130.0/24
3. 172.16.132.0/24
4. 172.16.133.0/24
为了做子网聚合,我们首先将上述的ip地址后面不同的比特写成二进制比特的形式
通过对比我们能够发现高亮标出来的地方的值是相同的,所以我们设定的新的子网id就是前面的21位。新的子网的ip表示为172.16.128.0/21
因特网的地址分配策略被称为无类别域间路由选择(Classless Inlerdomain Routing,CIDR),一个组织通常被分配一块连续的地址,即具有相同前缀的一段地址。
形式为a.b.c.d/x
的地址的x最高比特构成了 IP地址的网络部分,并且经常被称为该地址的前缀(prefix)。
又被称为plug-and-play protocol,是基于UDP的协议
goal:能够使得主机能够动态获取ip地址
host获取DHCP 的简单步骤:
DHCP ack中包含的信息可以不止ip address,还可以包括
整个local network的信息都通过138.76.29.7这一个ip地址出去。
接下来的这幅图,完美的解释了一个使用了NAT的实例
datagram format:
fixed-length 40 byte header
no fragmentation allowed
no checksum
transition from IPV4 to IPV6:
即在IPV6的外面套上IPV4的header和source, dest addr
Tunneling:
假如在一些路线中,不仅仅有IPV6的路由器,还有IPV4的路由器,我们需要用上面所讲述的转换的方法,做一个tunnelling的操作
这里面比较需要注意的是src和dest在tunneling时候的变换,可以看到,在做tunneling的时候,src变成了连接第一个IPV4路由器的IPV6路由器的ip地址,而dest变成了连接最后一个IPV4路由器的IPV6路由器的地址。
通用的“匹配加动作”范式,其中能够对协议栈的多个首部字段进行“匹配”,这些首部字段是与不同层次的不同协议相关联的
flow: defined by header fields
generalized forwarding: simple packet-handling rules
drop
, forward
, modify
, matched packet or send matched packet to controller
下面是几个flow table的示例:
https://blog.csdn.net/weixin_44077955/article/details/112004182
①:计算机网络-自顶向下方法
②:http://gaia.cs.umass.edu/kurose_ross/ppt.htm
③:https://blog.csdn.net/Jungle_hello/article/details/51438886?utm_source=copy