IP协议
1.IP地址分类
ip地址总共分为5类,A、B、C、D、E
IP地址=网络地址+主机地址 或 IP地址=主机地址+子网地址+主机地址
如上图首字节整数:A类--0开始,B类--27=128 开始,C类--27+ 26=192 开始,D类--27+ 26+ 25 =224开始,E类--27+ 26+ 25 + 24 =240开始,示例如下
2.IP分片技术
在TCP/IP分层中,数据链路层用MTU来限制所能传输数据包的大小,MTU指一次传输的数据最大长度,不包括数据链路层数据帧头,当IP数据报超过MTU时,IP层就需要对数据进行分片。
3.报文格式
1.版本:ip报文中,版本占了4位,用来表示该协议采用的是那一个版本的ip,相同版本的ip才能进行通信。一般此处的值为4,表示ipv4。
2.头长度:该字段用四位表示,表示整个ip包头的长度,其中数的单位是4字节。即二进制数0000-1111(十进制数0-15),其中一个最小长度为0字节,最大长度为60字节。一般来说此处的值为0101,表示头长度为20字节。
3.Tos服务字段:该字段用8位表示。该字段一般情况下不使用。
4..总长度:该字段表示整个ip报文的长度,单位是1字节。能表示的最大字节为2^16-1=65535字节。不过由于链路层的MTU限制。超过1480字节后就会被分片(以太帧MTU为1500的情况下,除去20字节的包头)
5.标识:该字段是ip软件实现的时候自动产生的,该字段的目的不是为了接受方的按序接受而设置的,而是在ip分片以后,用来标识同一片分片的。方便ip分片的重组。
6.标志:该字段是与ip分片有关的。其中有三位,但只有两位是有效的,分别为MF,DF,MF。MF标识后面是否还有分片,为1时,表示后面还有分片。DF标识是否能分片,为0表示可以分片。
7.片偏移:该字段是与ip分片后,相应的ip片在总的ip片的位置。该字段的单位是8字节。比如,一个长度为4000字节的ip报文,到达路由器。这是超过了链路层的MTU,需要进行分片,4000字节中,20字节为包头,3980字节为数据,需要分成3个ip片(链路层MTU为1500),那么第一个分片的片偏移就是0,表示该分片在3980的第0位开始,第1479位结束。第二个ip片的片偏移为185(1480/8),表示该分片开始的位置在原来ip的第1480位,结束在2959。第三片的片偏移为370(2960/8),表示开始的时候是2960位,结束的时候在3979位。
8.TTL:该片表示生存周期,该值占8位。ip分片每经过一个路由器该值减一,它的出现是为了防止路由环路,浪费带宽的问题。比如,该ip在R1路由器发送到R2路由器。R2路由器又发给R1路由器。防止这种循环。window系统默认为128.
9.协议:该值标识上层的协议。占8位。其中1,标识ICMP、2标识IGMP、6标识TCP、17标识UDP、89标识OSPF。
10校验和:该值是对整个数据包的包头进行的校验。占16位。
11.源地址和目的地址。标识发送ip片的源和目的ip,32位
12.接下来是可选的部分,一般一些特殊的要求会加在这个部分。
13:数据
4.IP分片实现
IP分片发生在IP层,不仅源端主机会进行分片,中间的路由器也有可能分片,因为不同的网络的MTU是不一样的,如果传输路径上的某个网络的MTU比源端网络的MTU要小,路由器就可能对IP数据报再次进行分片。而分片数据的重组只会发生在目的端的IP层。
在IP首部有4个字节是用于分片的,如下图所示。前16位是IP数据报的标识,同一个数据报的各个分片的标识是一样的,目的端会根据这个标识来判断IP分片是否属于同一个IP数据报。中间3位是标志位,其中有1位用来表示是否有更多的分片,如果是最后一个分片,该标志位为0,否则为1。后面13位表示分片在原始数据的偏移,这里的原始数据是IP层收到的传输的TCP或UDP数据,不包含IP首部。
需要注意的,在分片的数据中,传输层的首部只会出现在第一个分片中,如下图所示。因为传输层的数据格式对IP层是透明的,传输层的首部只有在传输层才会有它的作用,IP层不知道也不需要保证在每个分片中都有传输层首部。所以,在网络上传输的数据包是有可能没有传输层首部的。
5.路由协议
5.1内部网关协议
1: RIP协议:Routing Information Protocol,路由信息协议,是一种动态路由选择协议,是使用最广泛的距离向量协议,UDP协议,端口号为520
1) 工作过程
RIP路由器中初始的路由表中只有自己的直连路由;路由表中每一项为一个三元组(NET, Next hop, Metric),即目标网络,该条路由信息的下一条地址以及距离;距离定义为经过的路由器数
每个路由器发起自己的更新周期,将自己的路由表信息发送给相邻的路由表,接收到该路由表信息的邻接路由表更新自己的路由表信息;更新过程如图:
RIP协议有三个计时器:
a) 更新计时器:30s,即每30s发布自己的路由更新消息
b) 无效计时器:180s,即6倍更新时间内未收到更新,该路由表项被标记为16跳(不可达),即无效路由
c) 刷新计时器: 120s,吴晓路由在刷新计时器时间内仍未被更新,则被删除
2) RIP协议存在路由环路问题,例子:路由器A会将针对目标网络C的路由表项的metric值置为16,即标记为目标网络不可达,并准备在每30秒进行一次的路由表更新中发送出去,如果在这条信息还未发出的时候,A路由器收到了来自B的路由更新报文,而路由器B中包含着关于网络C的metric为2的路由信息,根据前面提到的路由更新方法,路由器A会错误的认为有一条通过路由器B的路径可以到达目标网络C,从而更新其路由表,将对于目标网络C的路由表项的metric值由16改为3,而对于的端口变为与路由器B相连接的端口。很明显,路由器A会将该条信息发给路由器B,路由器B将无条件(由上图可知,该条目与原条目来自同一源地址)更新其路由表,将metric改为4;该条信息又从路由器 B发向路由器A,路由器A将metric改为 5......最后双发的路由表关于目标网络C的metric值都变为16,此时,才真正得到了正确的路由信息。这种现象称为"计数到无穷大"现象,虽然最终完成了收敛,但是收敛速度很慢,而且浪费了网络资源来发送这些循环的分组。
3) 解决方法:
a) 水平分割:路由器记住每一条路由信息的来源,并且不在收到这条信息的端口上再次发送它;从而不会导致无限循环更新路由
b) 触发更新:在改变一条路由度量时立即广播一条更新消息,而不管3 0秒更新计时器还剩多少时间,即不考虑30秒发送更新消息这个规则
c) 毒性逆转:当路由器学习到一条毒化路由(度量值为16)时,对这条路由忽略水平分割的规则,并通告毒化(即该路由不可达)的路由;这条规则与水平分割相悖,因此它在接收到这条更新信息的端口上再次发送了,只是发送的消息是通告毒化
d) 抑制计时器:在抑制时间内,失效的路由不接受任何更新信息,除非这条信息是从原始通告这条路由的路由器来的
2: OSPF(Open Shortest Path First):使用的是链路状态路由算法,直接使用IP协议,协议类型值为89
1) 有五种分组类型
a) Hello:发现和维护邻居关系
b) Database Description:发送链路状态数据库摘要
c) Link State Request:请求特定的链路状态信息
d) Link State Update:发送详细的链路状态信息
e) Link State Ack:发送确认报文
OSPF中用区域来定义一个自治系统中的路由器和网络的集合,且必须有一个区域0用来标识网络骨干区域0;每个非0区域都必须通过一个区域边界路由器(ABR)连接到区域0
区域内:路由器相互发布和交换链路状态通告LSA ,并为该区域建立一个统一的映射图,称为链路状态数据库。
区域间:通过ABR 相互传递有关某一特定网络和拓扑的概括信息。
在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑的情况。
工作过程:
a) 路由器初始化或当网络结构发生变化(例如增减路由器,链路状态发生变化等)时,路由器会产生链路状态广播数据包LSA(Link-State Advertisement)。
b) 所有路由器会通过一种被称为刷新(Flooding)的方法来交换链路状态数据。
c) OSPF路由协议收敛下来时,所有的路由器会根据其各自的链路状态信息数据库计算出各自的路由表(最短路径优先算法)。
5.2外部网关协议
边界网关协议(BGP)是运行于 TCP 上的一种自治系统(AS)的路由协议。
为什么外部网关不使用内部网关协议?主要是BGP使用的环境不同。主要因为一下两个原因:
第一、因特网的规模太大,使得AS之间路由选择非常困难。想一想如果运用OSPF需要建立一个非常大的数据库,这显然不现实。第二、 AS之间的路由选择必须考虑有关策略。比如安全问题,或者路径上的路由不允许其非该AS的数据报通过等等。所以BGP只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。BGP采用路径向量路由选择协议,与距离向量协议和链路状态协议不同。
1.BGP
在配置BGP时,每一个自治系统的管理员要选择至少一个路由器作为该自治系统的“BGP发言人”。一个BGP发言人与其他AS的BGP发言人要交换路由信息,就要先建立TCP连接,然后在此连接上交换BGP报文以建立BGP会话,利用BGP交换路由信息。如下图:
这里的每个BGP发言人除了必须运行BGP协议外,还必须运行该自治系统所使用的内部网关协议,如OSPF或RIP。
BGP所交换的网络可达性的信息就是要到达某个网络所经过的一系列自治系统。当BGP发言人相互交换了网络可达性信息之后,各BGP发言人就从收到的路由信息中找到到达各自治系统的较好路由。
BGP发言人构造出来的自治系统连通图是树状结构,不存在回路,如下图:
下图给出了一个BGP发言人交换路径向量的例子。自治系统AS2的BGP发言人通知主干网的BGP发言人:“要到达网络N1、N2、N3和N4可经过AS2。”主干网在收到这个通知之后就发出通知:“要到达网络N1、N2、N3和N4可沿路径(AS1,AS2)。”同理主干网还发出通知:“要到达网络N5、N6和N7可沿路径(AS1,AS3)。”这里采用了路径向量信息所以可以有效避免兜圈子的现象。比如如果一个BGP发言人收到其他BGP发言人发来的路径通知,它就要检查一下本自治系统是否在此路径中。如果在此路径之中就不能采用这条路径。
这就可以看出,BGP交换的路由信息的结点数量的数量级是自治系统个数的量级,这样比自治系统中的网络数少很多。同时搜索正确的路径就是寻找正确的BGP发言人。
2.RIP、OSPF、BGP比较
RIP使用UDP,OSPF使用IP,BRP使用TCP。这样做有何优点?为什么?RIP周期性与邻站交换信息而BGP为什么不这样做?
RIP只和邻站交换信息,UDP虽不保证可靠交付,但UDP开销小,可以满足RIP的要求,并且由于使用UDP,RIP周期性地与邻站交换信息。来克服UDP不可靠的缺点。
OSPF使用可靠的洪泛法,所以直接使用IP,好处就是灵活性好开销小。
BGP需要交换整个路由表和更新信息,所以要保证正确,运用TCP,由于BGP使用TCP所以已经能够保证可靠交付,用不着继续周期性交互信息。