共计 1469 个字符,预计需要花费 4 分钟才能阅读完成。
网络层位于运输层和数据链路层之间,存在着 IP、ARP、ICMP 协定,以包的模式传递数据。
网络层数据包(IP 数据包,Packet)由首部、数据两局部组成。
- 版本 (Version) — 占 4 个二进制位,IPV4/IPV6
- 首部长度 (Header Length) — 4 位,二进制乘以 4 为字节总长度,最小为 20,最小为 60
- 辨别服务(Differentiated Services) — 8 位,能够用于进步网络服务质量,路由器依据网络层首部蕴含某个特定辨别服务(比方设定为 8),优先通过,进步网络品质
- 总长度 (Total Length) — 16 位、0 – 65525,示意网络层首部 + 数据局部的最大值,而下一层数据链路层帧的数据局部最大传输单元 MUT 不能超过 1500 字节,如果网络层数据过大,须要分片,变成多个独立的以太网帧
- 协定 (Protocol) — 8 位、网络层数据从运输层传下来,运输层封装数据所用的协定,如 ICMP(示意为 1)/IP/TCP(示意为 6)/UDP(示意为 17)
- 首部测验和 (Header checksum) — 相似 FCS 的性能,将首部进行计算,初始化全为 0,首部数据依据肯定算法算出值再填充,未来拿到数据后依据首部测验和其它数据比照算出首部是否有问题
- 源 IP 地址 (Source) — 32 位,4 个字节
- 指标 IP 地址 (Destination) — 32 位,4 个字节
通过 ping www.baidu.com 抓包咱们能够看到以上网络层数据,在这条申请中,版本为 IPV4,首部长度 20 字节,不辨别服务,总长度为 60 字节,协定为 ICMP,首部校验和看起来被禁用了,最初是源 IP 地址和指标 IP 地址。
首部里还有另外四个属性须要独自来说,首先是生存工夫(Time to live),每个路由器在转发之前都会将数量减 1,如果小于 0 时,路由器会返回错误报告,避免路由一直转发呈现死循环的状况。通过 ping
命令能够间接揣测申请所需 TTL。
Linux 操作系统默认 TTL 为 64,这里残余 TTL 为 49。通过 -i 配置来指定 ICMP 的生存工夫,能够看到当 TTL 小于所需时,申请发送失败。
剩下三个属性和分片传输有关联,一个是是标识 (Identification),占据 16 位,范畴是 0 – 65535,数据包的 ID,每发送一个数据包,ID 就加 1,超出则从 0 开始从新累加,这里标识是 30102。
如果总长度超出了 1500 字节,是须要分片传输到数据链路层的,但同一个数据包所有片的标识都是一样的。通过标识能够找到同一个包的所有片,但还须要两个属性能力晓得每个片放在哪一个地位。
标记 (Flags),总共有三位,第一位保留暂无作用,第二位示意不容许分片,1 示意不容许,0 示意容许,第三位示意更多片,1 示意不是最初一片,0 代表最初一片。
片偏移 (Time to live),13 位,要乘以 8 才是最终的字节偏移,当多个片时,能够算出占据数据包的哪局部。
通过 -l 的配置在 ping 命令中指定数据包大小,ping ke.qq.com -l 4000
通过抓包能够看到分成了三片,其中第一片的总长度 1500,标记为容许分片且不是最初一片,偏移量为 0。第二片总长度 1500,标记为容许分片且不是最初一片,偏移量为 1480(上一片总长 1500 – 首部长度 20)。第三片长度 1068,标记为容许分片且是最初一片,偏移量为 2960。
网络层首部涵盖了十分多的信息,包含协定版本、总长度、用于分片记录的数据、IP 地址等等,保障了信息的牢靠传输。
以上就是 网络层首部记录的信息数据
,更多无关 前端
、 网络协议
的内容能够参考我其它的博文,继续更新中~