IP datagram发送前,只需要填写目的地址/本地地址,无需在发送前事先建立好连接:connectionless
router:store and forwarding
routing table: support ip lookup(IP查询)
BGP:不同domain之间的protocol。 internet切割成不同的AS,每个AS之下的routing table就不必很大,AS之间通过BGP协议沟通。
真正收封包的设备是网卡,网卡地址为MAC地址。目的IP一定要对应host网卡的MAC地址。
一个路由器一定要维护两个table:Forwarding Table/IP MAC Table
直接连接:交给目的地
间接连接:交给相连的router
如果没有特别的设计,路由表的容量就会特别大。
router的挑战:查表够不够快。当查表速度不够快时,则会导致进来的封包逐步累积。
Fabric ASIC,IP address lookup ASIC设计,目的就是通过硬件设计,代替软件查表的方式,来提高router 的查表速度。这样,才有可能达到wire speed forwarding的设计要求。
router必须经过配置才可使用,无法即插即用。如IP adress/routing table/protocol的设定。
IP datagram最重要的是IP Address
如果收到的封包太大,就可能会被切割fragmentation,最后在组装。
Identification相同:意味着这些小片段,原来是从一个IP的data中切割出来的(英特网的特点:best effort,out-of-order,接收顺序与发送顺序不一定相同)。
Fragment offset:每个片段在原来的封包中的位置是在哪里,相对位置。方便接收端重组data。
Protocol:IP层上一层的协议是什么,TCP/UDP?
Time to live:这个封包在internet中会存活多久。每经过一个router,TTL就会减1. TTL=128时,经过128个router,就应该可以到达目的地。当TTL减为0时,该封包就会被丢弃。
Flags:如果封包标记为不可切割,则router会尽量找一条适合该类封包传输的路径,当实在找不到时,该封包就会被丢弃。当封包标记是可以被切割时,则该封包会被切割成若干小的片段,在网络上传输。
Total Length:标记该封包的总长度。
Header Checksum:Data以上的部分,包括Option/Padding 到Vesion。用于标记header是否出错,如果出错,数据则被丢弃。
Version:用于标记IP的版本,IPV4/IPV6?
Type of Service:用于标记该封包到底应该得到什么样的服务。该封包是一般的data封包,还是网络控制封包?该封包的delay究竟是noral delay还是Low delay?high/low reliability,how/low throughput?
MF:如果为1,表示后面还有分片
MF:如果为0,表示该分片为最后一个分片。
DF=1:不可分片,DF=0:可以分片
router之间,根据路由协议不定期的交流路由信息,同样的source到达同样的destination,走的路径不一定相同。
封包进入router后,可能会被被切割成小封包,被切割后的小片段都是独立的datagram,都是各走各的路,独立路由。
封包的组合工作,一般由最后的目的地完成。
router不负责重送,当丢弃封包时,router会回复发送端该封包被丢弃的原因,比如destination unreachable等信息。
router处理封包时,两个最重要的table:routing table(forwarding table)+ IP-MAC table。
140.114.78.66: router连接lan2的port的IP
140.114.77.65: router连接lan1的port的IP
如果Host B 发送封包给Host Y,封包:MAC(Y)/MAC(B)/IP(Y)/IP(B)/IP Datagram
B送给Y,因为它们在同一个网段上,不需要经过Router,故该封包上面的目的MAC是Y的MAC。
如果Host B 发送封包给Host A,封包:MAC(R)/MAC(B)/IP(A)/IP(B)/IP Datagram
B送给A,IP的目的IP为IP(A),源IP为IP(B)。因为A与B没有直接相连,中间需要经过router,如何经过router?经过Router的网卡的MAC,故第一步的目的MAC为MAC(R)。 Router收到该封包后,继续查表,送过A,Router必须要有A的MAc,则Router丢出来的封包的格式为:MAC(A)/MAC(R)/IP(A)/IP(B)/IP Datagram
Router的数据包收到后,首先查看在不在同一个LAN,如果是,则不用经过router,直接查询目的IP对应的MAC,直接转发。
如果不再同一个LAN,则需要先将fram丢给router,用router的MAC作为目的MAC,router在根据转发表转送。转送时,source MAC为router的MAC,如果需要经过多级router才能到达最后的目的地址,则router之间传送均是以前一个router的MAC为源mac,下一个router的mac为目的mac进行传送。到了最后一级router,router就会以该级router mac为source mac,目的地址对应的mac为目的mac,丢给destination。
router的每个port都有一个ip
对于router G,到达20.0.0.0/30.0.0.0,均是deliver direct
到达10.0.0.0,router to this address:20.0.0.5(router F与network 20.0.0.0网段相连的interface的ip。)
到达40.0.0.0,router to this address:30.0.0.7(router H与network 30.0.0.0网段相连的interface的ip。)
除了forwarding table,router还要记录IP-MAC的对照表。
如果与目的ip没有直接相连,则将封包丢给router。
Router R2:
如果目的地是网络1,则下一跳为R1
如果目的地是网络2,直接通过interface1转发
如果目的地是网络3,直接通过interface0转发
如果目的地是网络4,则下一跳为R3
当查不到目的ip对应的port时,则送到default 路由。
Fragmentation发生在router。
组合的动作,发生在目的地host,router不做组合。
所有的切割后的碎片均有相同的identifier,代表它们属于同一个IP的datagram
被切割后的片段,本身也是一个完整的datagram。内容被切割,但IP的header是复制n个片段,切割后的片段自己就可以独立的向前传送。
Internet本身是unreliable的,每个片段均有可能在传送过程中被丢失。组合失败的datagram,就会被丢弃,丢弃以后,router也不负责重送。ip本身就是unreliable的协议。
MAC:根据下一站的网络类型,分别使用下一站的MAC。
R2:将一个封包的内容(1400Byte)切割成3份,IP header复制三份,这三份data独立发送。PPP的MTU为512Byte
H8的IP,才开始组封包的组装动作。
Offset:显示了该切割后的封包在原来未切割封包中的位置。
MF=0,且offset=0,表示我的资料在原来的封包中位于第一个,并且也没有被进一步切割。
MF=1,offset=0,表示该资料为第一个片段(最左边的位置),后面还有更多的子片段。
MF=1,offset=64, 表示该资料在原来封包中的data里面的位置是第64x8=512bit,MF=1,后面还有子封包
MF=0,offset=128,表示该资料在原来封包中的data里面的位置是第128x8=1028bit,MF=0,当前封包已经是最后一个封包。
网络层,router与使用哪一个协议相关,如IP/IPX/。。。
Router会filter MAC广播/多播封包。
Router可以很容易的支持不同media,不同速率的media的支持。如光,铜缆。。。
router支持切片,与组装,组装一般交给目的端的host来做。
router可以根据ip地址过滤,ACL,类似于防火墙的功能
Router还可以做accounting,计费,记录流量状况。
主机与Router之间如何通信?透过switch/AP,或直接与router相连。
Rouger本身是highly configurable,配置由弹性,很容易做,但不容易设定正确。router的配置要求比较高,对网络工程师的背景要求较高。
router可以handle speed mismatch。 router可以应对不同的media(FC,copper。。。)的能力,router有较大的buffer,可以处理进来的speed快,出去的speed慢的场合。如果进来的封包一直不停,则终会overflow,消化不良,开始丢封包。如何丢,根据什么策略?
router有一个拥挤控制的机制,丢弃封包的机制,通知上游送的慢一点,等等
路由协议:目的是router之间沟通周边网络的拓扑,速率等状况,得出routing table,该走哪条路。
静态路由/动态路由
RIP:距离矢量型,第一代协议
OSPF:链路状态型,第二代协议
IP网络,非常reliable,只有有链接,就会自动链接,生成相应的routing table进行转发。
Switch有广播,router会过滤广播/组播
Router需要配置
Switch通过STP,生成自己的路由表,不一定是最优。Router通过路由协议生成,是基于当前算法的最佳路径
将Destination IP与每一项的subnetMask做逻辑与运算,得到D1.
如果D1等于所对应的子网号则该子网与router直接相连,则到达该子网(nextHop为直接相连)。否则,为间接相连,将数据包传送给下一跳(下一个router)
IP与子网掩码做与运算,结果看得到的结果是否为子网号,若是,则转发至该子网。
128(1000 0000B) AND 15(0000 1111B) = 0(00000000B)
子网掩码:不一定需要全部都是连续的1在一起。
子网络在internet中其它地方看不到,只有router可以看到。
一个物理网络可以分成多个子网。
要让对方接收封包,必须知道对方的网卡地址,MAC地址,ARP:将IP地址映射为对应的MAC地址的协议。
中间传送时,需要的跟自己链接在一起的router的mac,或直连主机的mac。没有链接在一起的router/host的mac对自己没有用,因为不会转发封包。MAC:只在相邻的router/roter-host之间转发封包。
Operation:表示要问,还是回答。
TargetProtocolAddr:对方的地址,IP,0~4 4byte
TargetHardwareAddr:对方的MAC地址
SourceProtocolAddr:问的一方的source IP
SourceHardwareAddr:问的一方的MAC
在发问时,TargetHardwareAddr为空。在回应封包中,TargetHardwareAddr这一栏才会填充对方的MAC Address
数据的接收:必须经过网卡,需要MAC地址。
MAC地址:产品出厂时已经固定。
IP:动态分配的。
DHCP Discover:广播封包,用于请求DHCP Server,用于获取IP地址。
ICMP Re-direct:找到更好的路由信息
Forwarding:查表
Routing:建立routing table的过程
Forwarding Table:需要network number,从那个接口出去,相连接的对方的MAC是什么? IP-MAC对照表
140.114/16:对方的网络
Next Hop:到达目的网络的下一个IP的地址。对端可以是host,也可以是router。 不需要记录整个路径,只需要记录下一站即可
MAC Address:与interface0相连的对端MAC的地址。
需要找出任何两个node之间的cost最小的路径。如何得到?router之间通过路由协议两两交换路径信息,最后每个router都得到了整个网络的路由信息。
每个node都会维护一个一维向量,记录它到达与其相邻的node的cost是多少,相邻的neighbor相互交换这个记录。最后,每个node都得到了自己到网络上任何node的cost
A:不与A相连的node,距离为无穷。与自己的距离为0,与直接相连的node的距离为1
其它节点类似。
与相邻的router交换distance vector后,A得到这一张路由表。
如:A到D,下一跳为C,总cost为2
每隔一段时间(30s),就把自己的routing table送给自己的neighbor
交换以后,每个router都在更新自己的routing table,随着交换的继续,各自的路由表逐渐完整。
如果网络原来的cost较高,当网络状况变好,cost降低,会传的很快。 好消息传的快
如果发生线路故障,网络状况变差,cost提高,会传的慢。坏消息传的慢。
交换信息的message会很多
如果G断开,A-F cost为无穷
A会收到C发来,经由C到达G的cost为2,这样A会更新自己到达G的cost为3(C-G2 + A-C 1)
A会通知F,到达G的cost为3
F会更新自己的路由,f经由A/C/D/G 到达G的cost为4
如果A-E断线,A会告诉所有的neighbor,A到达E的cost为无限大。
每断线前,B知道它经过A到E的cost为2,B也知道经过A到达E的cost为2
对于B:刚收到从A到E的cost为无穷,但又收到从C到达E的cost为2,这样,B就会更新自己到E的cost为3.
B就会告诉A,自己有一条路,B到E的cost为3,A就会更新自己的路由信息,记录自己经过B到达E的cost为4,A也会告诉C,自己到E的cost为4. 对于C,会收到之前A告诉它,到达E的cost为无穷,也会收到最新的到达E的cost为4,至少这条路径还存在。
这样C就会告诉B,C到E的最新cost为4,B就会将自己到达E的cost更新为5,告诉A,经由B到达E的cost为6,以此类推
这条路径存在,cost一直在增加,一直到无穷大
C先告诉B,还是B先告诉C,取决于B/C谁的交换速率更快,哪个事件先发生。
如果一个路径是从它的neighbor学到,在交换路由信息时,就不会将路由信息回传给neighbor
B将路径送给A,这样A就不会将最新学到的路径回传给A。避免回环
毒性反转:A将到达E的路径告诉B,B将新学到的到达E的路径送给A时,会说透过B到达E的cost为无穷。A只应该走自己的路到达E,而不要透过B。
Distance Vector:把自己的整个routing table告诉neighbor
Link State:将自己与neighbor的直接相连的link状况告诉所有的node
LSP:自己与neighbor的link状态打包为LSP。任何一个router都会收到其它所有router的LSP。每个router都会送LSP
ID:送出LSP的router的id
只要link状态有任何变更,都会马上送出自己的LSP,给所有的router。
每个router都可能送出一系列的LSP,router发出的每个LSP都有自己的编号。
只收从每一router收到的最新的LSP。
LSP会周期性的发送,每次都增加sequence number
假设从A开始发送,A同时会向B/C/E/F 4个邻居发送LSP。 B/C/F就会将这个封包继续往前送。当C收到从B转发过来的A发送的LSP时,会check seqnumber,发现自己已经接收过这个LSP,于是拒绝接收。 C将A的LSP继续转发给D。 同理,F将A发送的LSP转发给G。 D/G之间已经收过,这样D/G不会重复接收。
透过LSP,每个router都会透过OSPF算法构造出自己的routing table