6. IP数据包格式
-
一个IP数据包由首部和数据两部分构成。
-
首部的前一部分是固定长度,共20字节,是所有IP数据包必须具有的。
-
在首部的固定部分的后面是一些可选字段(大部分数据包没有),其长度可变
-
数据部分来源于传输层
6.1 详细格式介绍
1. 上图中第一行是bit,8bit=1个字节,一行4个字节,一共5行,共20个字节(固定部分)。
2. 版本:
用来表示TCP/IP协议是哪个版本的(ipv4/ipv6);若版本里面的值是4则代表ipv4;若版本里面的值是6则代表ipv6
3. 首部长度
用于说明这个ip数据包的首部有多长(包括可变部分)
4. 区分服务
网络中的数据包有着急的数据包A(视频聊天)也有不着急的数据包B(邮件),在发数据包A之前在数据包的首部做一下标记(ipt),同时在网络中的路由器上设置一下,让配有标记ipt的数据包先通过。这个在网络上区分不同的流量进行排队服务叫做Qos(在网络上实现服务质量)。
5. 总长度
用来表示整个数据包的长度。一共2个字节,16位,最大可用表示的数据包大小为2^16-1=65535字节。而之前所学在数据链路层的以太网的帧的数据部分最大1500个字节(MTU:最大传输单元)。那么网络层的数据包比数据链路层的MTU要大,那么应该如何传输呢?答:网络层的数据包在传输给数据链路层之前要将数据包分片,分成数据链路层能够支持的最大的数据。之后就是将数据包分片传输。一般情况下准备的数据包不超过1500个字节,一般不需要分片
- 数据包首部+数据包数据部分<1500个字节
- 数据包数据部分<1480个字节
6.标识
数据包分片之后,根据数据包前面的同样的标识还原为一个完整的数据包
如何传输分片的数据包
-
发送端,数据包切片后,每个切片都要加上首部,扔到网上之后,路由器选择路径的时候也是一段一段的选,路由器并不知道这被分了段的数据包,任然将其当作正常的数据包传输。
-
到接收端的网络层会将这些切片的数据包重新组装起来,还原成一个大的包,才会往上层传。
-
当然也会发生有的分片丢失的情况,那么对方计算机等半天等不到,就认为这个数据包没有完整的传过来
-
对方计算机如何知道这三个分片是一个包呢,这就需要给数据包标识,在数据包产生的时候就为其编号。
-
对方计算机收到这些分片的数据包,发现前面的标识都是一样的,那么就认为这时一个数据包
7.标志
接收端用来区分自己接收到的是一个分片还是一个完整的数据包。标志占3位,目前只有前两位有意义。标志字段的最低位是MF。MF=1标识后面还有分片;MF=0表示这是最后一个分片。标志字段中间的一位是DF,只有当DF=0时才允许分片。
8.片偏移
记录每个分片的第一个字节位于整个数据包的第多少个字节
9.生存时间
计算机发数据包的时候给数据包一个TTL,每过一个路由器TTL减1(补充mac地址也是每过一个数据包就要修改)。TTL=1的数据包只能在本网段传输,TTL=2的数据包只能过一个路由器
10.协议
用来标识协议号,网络层这些数据包里面的数据是什么数据,是UDP还是TCP,是ICMP协议还是IGMP协议。这里面的协议号就规定了里面的数据部分交给哪一个进程来处理,如果是ICMP协议那么就直接由网络层的ICMP协议来处理;如果是TCP或UDP协议那么就要上传给上一层。(ICMP的协议号是1;IGMP的协议号是2;TCP的协议号是6;UDP的协议号是17;IPv6的协议号是41;OSPF的协议号是89;)
11. 首部检验和
数据包在传输的过程中,TTL会变,数据包在传输过程中首部是否被修改或者首部是否出现错误,可以用首部检验和检验,接收端收到后发现检验正确那么就接收这个数据包,否则丢弃。(首部检验和16位只检验数据包的首部不检验数据部分),这里不采用CRC检验而采用简单的计算方法,检验过程如下:
12.可选字段
是为了增加IP数据包的功能,IPv6就没有这个可变部分
说明
上述分析分析的是IP数据包的结构,ARP协议的数据包不适用此结构
6.3 使用抓包工具排除网络故障
抓包工具除了可以帮助我们分析数据包的首部,还有一个非常重要的功能:使用抓包工具排除网络故障,可以使用抓包工具来看看网络中还有哪些数据包
- 举例:在局域网中的一个用户发现自己的网速不快,可能是该局域网到internet这一节比较慢;也可能是内网发生堵塞。局域网里为什么会堵塞呢?答:局域网中某台计算机在该网段内发目标地址为全1的广播包,交换机会将这个广播包转到所有的口上,导致局域网堵塞。那么正常的计算机A 若ping另一个正常的计算机B就会有很大的延迟和丢包。在A上装上抓包工具后就可以抓到网络上的广播包、多播包以及给自己的数据包; 如果没有抓包工具那么就只能用二分法拔掉网线,当看到交换机等狂闪(很忙),但是当前局域网又很慢,这说明交换机在忙着干别的事情,忙着转广播包。
7. IP协议(重点)
1. 路由器根据路由表来判断该从哪一个口转发数据包。路由表分静态路由和动态路由。
2. 静态路由
由管理员告知路由器,数据包到不同的网段应该怎么走,静态路由不会随着网络状态的变化而自动调整,适用于网络规模较小的情况
3. 动态路由
一堆路由器通过某种协议(RIP)来学习到不同的网段应该怎么走
4.IP协议
让路由器能自动学习路由表的协议都叫做IP协议:RIP、OSPF等,IP协议是一个统称
5. 网络畅通的条件---数据包有去有回
-
a.若是数据包从左边的计算机1传到路由器C的时候,C若没有下一段路由表,不知道传给谁,那么C就会返回给计算机1一个数据包,告知目标地址不可到达。
-
b.若数据包已经到右边的计算机2了,但是在计算机2返回数据包到F的时候,F不知道后面怎么走,此时计算机1若ping计算机2,得到的结果就是请求超时。
-
c.除了检查上述“来回路由器是否有到目标网段的路由表的问题”,以后在检查网络通不通的时候,还要看收发计算机是否配备网关,没有配备网关的计算机是不知道到其他网段该怎么走的,没有网关就没有办法到其他网段。
7.1 RIP
动态路由的RIP协议是一个开放式的动态路由协议:
RIP协议的工作方式
路由器ABCD都运行RIP协议,路由器A连着4个网段,它会周期性地在网络上发广播,通过广播包告知其他路由器自己连着哪些网段,那么B路由器就会知道到192.168.1.0网段下一跳就给A,且要过1个路由器;B也要周期性地每隔30秒告诉C路由器我连着192.168.1.0网段,我到该网段要过1个路由器;C网段就记下了,要到该网段下一跳要给B,且算出自己要过两个路由器。同时这些信息也会由A传给E,E传给D,D告诉C,C就记下了这条路也可以到达该网段,但是算出自己要过3个路由器。目前为止C就认为到该网段有两条路可以走。RIP协议选取路由器最少的路径为最佳路径。
RIP总结
-
周期性广播路由表给其他路由器;
-
选择最佳路径的标志就是“跳数”,跳数少的就是最佳路径;
-
30秒更新一下路由信息;(原因:让旁边的路由器知道本路由器还活着,要是一个路由器超过一段时间没有联系邻居路由器,那么这个邻居路由器就会传播这个路由器不幸去世的消息)
-
如果一个网络搭建好了,一年都没有变化,但是路由器也没闲着,而是每隔30秒更新一次,这也是比较消耗带宽的
-
RIP最大跳数15跳,如果到目的地要经过16跳,那么RIP协议就认为不可达,适用于网络规模较小的情况
7.2 OSPF
该协议也可以选择最佳路径,选择最佳路径的标准是带宽