报文格式
IP 报文格式图片如下
- 4 位版本:即 IP 协议的版本,目前只有 IPv4 和 IPv6 两个版本,因此 4 个 bit 足够表示版本号;
- 4 位首部长度:与 TCP 中 4位首部长度单位一样,单位都是 4 个字节,比如此时该 4 - 8 位都为 1,能表示的最大长度为 15,因此首部长度最大为 15 * 4 = 60 字节;
- 选项:用来补足 60 字节;
- 8位服务类型(Type Of Service): 3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0)。 4位TOS分别表示: 最小延时、最大吞吐量、最高可靠性、最小成本。 这四者相互冲突, 只能选择一个。对于ssh/telnet这样的应用程序,最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重;
16 位总长度:用来标识哪些包是用一个包拆分出来的;
与 UDP 不同,UDP 中有一个 16 位 UDP 长度,也表示 UDP 数据报有多少个字节。16 位 UDP 长度最多有 65507 个字节的数据,因此 UDP 传输数据最多能传送 65507 个字节的数据。
但是,IP 协议中自身支持 拆包和组包,不管传输层传送过来多少个字节的数据,IP 会根据情况进行拆包,在接收方进行组包。
关于 UDP 传输数据量的解析,感兴趣可以看一下我写的另外一篇博客 UDP报文格式浅析
- 13 位片偏移:通过这个片偏移来区分拆出来的包的顺序。即谁在前谁在后;
- 3 位标志:识别当前拆出来的包是否是最后一个包,如果标志位为 0,则标志着到达最后一个分片。类似于链表用 null 来表示结束标志。
- 8 位生存时间:一个 IP 数据报有一个初始的生存时间,每次这个 IP 数据报经过一个设备转发,TTL 就 - 1,直到减为 0 ,意味着这个包永远到达不了对方,于是就被丢弃。
类似于网购了一件衣服,但是地址不准确,快递小哥一直不能将这个快递送达,因此这个包就退回给卖家,但是网络传输中是直接将这个包丢弃的。
这样的机制存在是很重要的,如果没有这个机制,那么网络中就会有很多没有送达的包或者非法的包,占用了很大的空间。
- 8 位协议:明确指出这个 IP 数据报的数据部分携带的是传输层的哪个协议。
- 16 位首部检验和:验证首部数据是否正确(只验证 IP 协议首部);
- 32 位源 IP:发送方的 IP 地址;
- 32 位目的 IP:接收方的 IP 地址;
- 数据:传输层的数据。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)