师傅引进门——IP协议

        IP是TCP/IP协议族中最为核心的协议,所有的TCP、UDP、ICMP及IGMP数据都以IP数据报的格式传输。IP层工作在网络层,它指引你穿过路由,直至到达目的地。但是它指引了路线,却不保证你能成功的到达目的地。也就是说IP提供的是不可靠、无连接的数据报传送。正应了那句老话——师傅引进门,修行靠个人。

1.IP首部

      IP数据报也分为两个部分,首部和数据。数据部分是要传送的信息,首部是为了能正确传送而附加的信息。见下图:

TCP-IP协议详解(3) IP接力赛(IP, ARP, RIP和BGP协议) - 第1张  | 快课网

      version是版本号,目前的版本是4,所以IP有时候也叫IPV4。随着网络的普及,接入网络设备增多,由于IPV4的32位地址长度的限制,已经慢慢不够用了,所以现在有了IPV6.

      ihl是指IP头部长度,IP头部固定的是有20字节,因其有可选的options选项,所以IP长度可变,需要跟total length合起来确定IP数据报data部分到底有多长。ihl有4位,Ip头部是4的整数倍,所以IP头部最多60字节长。

      有时候因为MTU的限制,IP数据报太长了,不得不分片。identification,flags,fragment offset三兄弟合起来一起为分片服务。identification是指标识符,相当于身份证,拿同一身份证就是同一个IP。flags3位,第一位备用,第二位如果为1就表示不允许被分片,你不能传送我,那就丢掉我吧,第三位如果为1就表明后面还有分片。fragment offset是指偏移量。碎片化会给网络带来很大的负担,其中一个原因就是IP是不可靠的协议,其中的一片丢了就得整个IP数据报重传,所以应该尽量避免,IPV6就把这个东西抛弃了。

       type of service是指服务类型,它最初是想根据不同的服务赋予IP包不同的优先级,但是微软没有采纳。现在一般是分为两个部分,前6位(DS)提供服务类型,后两位(ESN)提供网络状况。根据不同的服务和网络状况提供不同的优化本来是很好的想法,但是现在看来基本上都被接受者忽略了。都是大哥带头不好啊。

       TTL生存时间设置了数据报可以经过的最多路由器数。TTL的初始值由源主机设置(通常为32或64),经过一个路由减1,到0的时候就抛弃它。没有这个,有些数据报可能就会在里面一直转啊转,到不了正确的目的地的同时又浪费网络资源,后果很严重。protocol指出了上层使用的是什么协议(UDP或者TCP之类)。

       header checksum头部检验和,检验在传输的过程中头部有没有出错(主要指的是有没有哪个0变成了1这样的),出错了就得丢了。算法是发送方16位求和,有进位加尾部,再求反得到16位checksum放进去。接收方把头部16位相加,要是结果是FFFF就没错。

2.IP路由选择

       IP层在内存中有一个路由表。当接收到一份数据报并进行发送时,它都要对该表搜索一次。当数据报来自于网络接口时,IP层将判断是不是本机地址或者是一个广播地址。如果确实是这样,将交给根据IP头部得到的上层协议处理。如果不是的话,该设备是路由器时将搜索路由表找到正确的路径发送数据,是主机的话直接丢弃。

      路由器表中每项都含有以下几个表项:

      ①.目的地址。当标志项含有H时,说明目的地址是一个主机,否则的话就是一个网络。也有可能是default项。

      ②.下一站路由。当标志中含有G时,说明这是间接路由,没有G时说明其是一个直接路由。其区别在于,发往直接路由的分组中不但包括目的IP地址还有目的MAC地址,发往间接路由的分组包含目的IP地址但是MAC地址为间接路由的地址。

      ③.标志。U该路由可用,D该路由是重定向报文创建的,M该路由已被重定向报文修改。

      ④.为数据报的传输指定一个网络接口。

      数据报到达一个路由器时,搜索的匹配策略是。搜索带有H的表项,如果没有匹配项搜索网络地址项,需考虑子网掩码,没有就default项。如果以上步骤都没有成功,那么就不能发送。如果不能发送的数据报来自于本机,那么一般会向生成数据报的应用程序返回一个“主机不可达”或“网络不可达”的错误。

3.路由表的生成

     初始化路由表。每当初始化一个接口时(通常是用ifconfig命令设置接口地址),就为接口创建一个直接路由。对于点对点链路和环回接口来说,路由是到达主机。对于广播接口来说,如以太网,路由是到达网络。对于到达不直接相连的主机或网络的路由必须以某种方式加到路由表中,一般是route add命令。有些系统允许在某个文件中指定默认的路由器。(注:读路由表的时候,netstat为直接路由打印出来的网关地址就是本地接口所用的IP地址)

     这只是初始化路由表,有时候主机可能只有很少的选路信息。ICMP重定向报文可以帮助主机逐渐建立更完善的路由表。它在概念上是很简单的:当IP数据报该发送到另一个路由器时,收到该数据报的路由器就要发送ICMP(5,0)重定向本文。当路由器R1(重定向报文只能由路由器生成,主机使用)收到数据报并检查它的路由表,发现下一站是R2,在发送时,R1发现该数据发送的出接口跟到达的入接口一致,R1发送一份ICMP重定向报文给主机,告诉它以后把数据报发给R2而不是R1.

      在初始化路由表时,除了前面提到的在配置文件中指定静态路由这种方法外,另一种新方法是利用ICMP(9,0)路由器通告和ICMP(10,0)请求报文。一般认为,主机在引导以后要广播或多播传送一份路由器请求报文。一台或更多台路由器响应一份路由器通告报文。另外,路由器定期地广播或多播传送它们的路由器通告报文,允许每个正在监听的主机相应地更新它们的路由表。通告本文里面含有一对或多对IP地址和优先级。IP地址必须是发送路由器的某个地址。优先级指出该IP地址作为默认路由器地址的优先等级,这是与子网上的其他路由器相比较而言的,值越大说明优先级越高。

          在网络很小的时候,采用上述方法是可行的。如果上述三种情况不能满足要求时,一般选用动态选路。路由器上有一个进程称为路由守护程序,它运行选路协议并与其相邻的一些路由器进行通信。Internet是以一组自治系统AS的方式组织的,每个AS由单个实体管理,可以自己选择各个路由器之间的选路协议,这种协议称之为IGP,内部网关协议,对应的为EGP。最常用的IGP就是选路信息协议RIP。

RIP是一种基于距离矢量(Distance-Vector)算法的协议,它通过UDP报文进行路由信息的交换,使用的端口号为520。

RIP使用跳数来衡量到达目的地址的距离,跳数称为度量值。在RIP中,路由器到与它直接相连网络的跳数为0,通过与其相连的路由器到达另一个网络的跳数为1,其余依此类推。为限制收敛时间,RIP规定度量值取0~15之间的整数,大于或等于16的跳数被定义为无穷大,即目的网络或主机不可达。由于这个限制,使得RIP不适合应用于大型网络。在支持RIP协议的路由器中的路由表应该还有以下几个选项:度量值,表示到目的路由的开销,也就是跳数;路由时间,从路由项最后一次被更新到现在所经过的时间,路由项每次被更新时,路由时间重置为0。

  RIP启动和运行的整个过程可描述如下:

  路由器启动RIP后,便会向相邻的路由器发送请求报文(Request message),相邻的RIP路由器收到请求报文后,响应该请求,回送包含本地路由表信息的响应报文(Response message)。

路由器收到响应报文后,如果发现更优路径(响应路由表的跳数+1跟自己的跳数对比,小于则认为更优),则更新本地路由表,同时向相邻路由器发送触发更新报文(更新报文不需要发送整个的路由表而只需要发送那些发生变化的表现),广播路由更新信息。相邻路由器收到触发更新报文后,又向其各自的相邻路由器发送触发更新报文。在一连串的触发更新广播后,各路由器都能得到并保持最新的路由信息。

  RIP采用老化机制对超时的路由进行老化处理,以保证路由的实时性和有效性。如果运行RIP的系统发现一条路由3分钟内未更新,将设置其跳数为16,并标记为删除。再过60s,将从本地路由表中删除。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值