IP和路由协议内容还是比较多且复杂的,理解起来有一定难度,上一章节ARP协议工作流程我们留下的一个思考题,不同的子网之间的主机是否能直接通信,答案是不能,那么要怎么通信,就需要通过路由协议。让我们认真学习一下本章的内容。
一. IP协议
IP协议:
IP(Internet Protocol)协议分配给用户时使用网际协议的设备的数字标签,也就是我们都知道的IP地址。主要用于互联网通信。IP协议用于将多个包交换网络连接起来,他在原地址和目的地址之间传输数据报,还提供对数据大小的重新组装功能,以适应不同网络的要求。
2.IP地址:
分两大类:IPv4和IPv6。
IPv4有十进制和二进制两种表示方法。分别是:
点分四组十进制。每一组范围是[0~255],如:255.255.255.255;二进制。
如:11111111.11111111.11111111.11111111
IPv6地址长度是128位,由8块(或8个字段)组成,每一块都包含四个16进制数,每块由冒号分隔。有以下特点:
a.一个块中前导的0不必书写。
b.全0的块可以省略,并用符号::代替。
c.IPv6可以兼容IPv4地址,即可以用IPv6格式表示IPv4地址。表示方式为:IPv6块值为ffff,其后面紧跟“点分四组”的格式。
如:::ffff:10.0.0.1可以代表IPv4:10.0.0.1
d.IPv6的低32位通常采用点分四组(就是上面那样)的表示法。
3.子网掩码:
用来标识子网,必须跟IP地址一起存在。
跟IP地址一样,二进制:也是由连续的1和0组成,连续的1表示网络地址,连续的0表示主机地址。只有网络地址相同的主机在同一个子网,才能直接通信。
表示方式:255.255.255.255或者/24
二进制:11111111.11111111.11111111.00000000
了解如何规划和划分子网可参考链接:
https://blog.csdn.net/zhengzizhi/article/details/13297095
二. IP协议的特点
1. 无状态的
通信的双方不同步传输数据的转台信息,即每次IP数据报的发送,接收和传输都是相互独立的。
PS: 无法处理乱序和重复的数据报,因为IP数据报之间没有上下文关系,可能后发送的先达到而无法处理。
2. 无连接
通信的双方都不长久的维护对方的信息,因此每次上层协议都需要指明对方的IP地址。
3. 不可靠
不能保证准确达到接收端。当某个路由器发现IP数据报在网络上存活太长,或者接受端验证IP数据报不通过,都会丢弃并返回发送端ICMP超时错误消息。因此上层协议都需要自己实现重传机制。
4. 核心任务为决定数据报到目的地的路由路径(配合路由表)。
三. IP协议报文格式
(1)版本:占4位,指IP协议的版本。通信双方使用的IP协议版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。关于IPv6,目前还处于草案阶段。
(2)首部长度:占4位,可表示的最大十进制数值是15。请注意,这个字段所表示数的单位是32位字长(1个32位字长是4字节),因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此数据部分永远在4字节的整数倍开始,这样在实现IP协议时较为方便。首部长度限制为60字节的缺点是有时可能不够用。但这样做是希望用户尽量减少开销。最常用的首部长度就是20字节(即首部长度为0101),这时不使用任何选项。
(3)区分服务:占8位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年IETF把这个字段改名为区分服务DS(Differentiated Services)。只有在使用区分服务时,这个字段才起作用。
(4)总长度:总长度指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为216-1=65535字节。
在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元MTU(Maximum Transfer Unit)。当一个数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值。
(5)标识(identification):占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
(6)标志(flag):占3位,但目前只有2位有意义。
● 标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个
● 标志字段中间的一位记为DF(Don’t Fragment),意思是“不能分片”。只有当DF=0时才允许分片。
(7)片偏移:占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。
(8)生存时间:占8位,生存时间字段常用的的英文缩写是TTL(Time To Live),表明是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源。最初的设计是以秒作为TTL的单位。每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把TTL值减1。当TTL值为0时,就丢弃这个数据报。
(9)协议:占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。
(10)首部检验和:占16位。当收到一份IP数据包后,同样对首部的每个16位进行反码求和。由于接收方在计算过程中包含了发送发在首部中的校验和,如果传输过程中没有差错,计算结果应全为1,不是全1,即检验和错误,那么就丢弃收到的数据报,但不生成差错报文,由上层发现丢失的数据报并进行重传。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。
四.路由协议
路由协议(Routing Protocol)指定数据包转送方式的网上协议。其作用是去查找路由表。
一组协议,包含如下协议:
静态路由:指实现设置好路由器和主机并将路由信息固定的一种方法。
目的地址 --- 指定下一跳 --- 默认路由,全0表示(0.0.0.0.0.0.0.0),表示是通配的(默认路由也是特殊的静态路由,比如指定主机里的网关,即默认网关,也是默认路由)。示意图如下:
动态路由(RIP,OSPF,BGP):指让路由协议在进行过程中自动的设置路由控制信息的一种方法
使用动态路由的情况下,管理员必须设置好路由协议,其设定过程的复杂程度与具体要设置路由协议的类型有直接关系。例如在RIP情况下,基本上无需过多的设置。而根据OSPF进行较详细路由控制时,设置工作将会非常繁琐。
如果有一个新的网络被追加到原有的网络中时,只要在新增加网络的路由器上进行一个动态路由的设置即可。而不需要像静态路由那样,不得不在其他所有路由器上进行修改。对于路由器个数较多的网络,采用动态路由显然是一个能够减轻管理员负担的方法。
静态路由可以和动态路由组合起来使用。
在cmd命令行输入route print打印路由信息:
上面IPV4路由表中的”网络目标”指的是之前介绍的内容中源目地址中的目的地址;“网络掩码”和子网掩码一样,它的作用是确认目的地址是哪一个子网的;网关”就是前面我们说到的下一跳,网关为”在链路上”表示是直连的,不需要路由转发;跃点数可理解为路由的优先级,跃点数越小优先级越高。
关于路由协议我们大致了解这些差不多了,如果还想进一步了解很深刻,
可参考下面链接:https://mp.weixin.qq.com/s?src=11×tamp=1609859077&ver=2810&signature=ypYxuerLRR8abDpvwaE7mT4HQO8lRLpai9zGVDTV54ijXhj2L3kBNPK2M5uaEXbli5*8xeDmSibl8iUT4x8ejsJ1614MQlxd134Nd0teTtGATd2hO0nwVoE5fjBromz7&new=1
五 不同子网的主机之间如何通信
最后我们来回答一下不同子网之间主机的通信工作流程:
我们以主机ping的过程举例,设定本地IP地址为192.168.8.104,目标IP地址为191.168.1.2。
1、判断不同网段
192.168.8.104使用255.255.255.0的子网掩码去判断191.168.1.2,得出对方的网络号是191.168.1,而自己的网络号是192.168.8,所以两者的网络号不同,属于不同网段的通信
2、查找路由表
网络号相同的主机,可以使用ARP广播来发现对方的MAC地址。但是网络号不同的主机则不能这样通信。网络号不同的情况下,需要查找路由表,在路由表里来匹配192.168.1,一旦匹配到路由条目,则把IP包发给这条路由条目的下一跳
如果路由表前几条都没有匹配到,那么就去最后一跳万能路由。 通俗地说,如果同学在外面漂泊四处碰壁,那么家就是最后的归宿。这个网段号0就是所有IP包最后没有成功匹配的归宿,而这个归宿就是缺省网关,也叫默认网关
3、发现网关硬件接口MAC
网关肯定是和本机属于同一网段,可以从ARP缓存中或者ARP广播获知网关的MAC
4、Ping包发给网关
Ping包头部被封装以太网头部,其中有一个目的MAC地址,只要目的MAC填写成网关的MAC就好,那么这个Ping就会发送个网关192.168.8.1
5、网关硬件接口接受以太网帧
网关硬件接口接受到此以太网帧,发现帧的目的MAC是自己的MAC地址。就会接受存放在缓冲区,并通知IP层(进程)来取走。
6、网关路由转发
网关IP层从网卡复制来了IP包,接着要进行路由匹配查找。根据本地ARP缓存表或者ARP广播获知目的IP地址的MAC地址。然后将IP包添加以太网帧头,发送出去。
7、Ping包被弹回
191.168.1.2接受到Ping包,包的内容原封不动,依照第6步步骤将ping包回包发送回192.168.8.104
8、Ping程序打印输出
192.168.8.104依据Ping包、回应包的序列号一一对应起来,如何分别计算出RTT时间统计。
一般都是4个Ping包,这样就会有RTT最大、最小、平均值,如果哪个序列号的Ping包在2s超时没有接收到回应包,则会认为Ping包丢失