IP数据报的格式
2015-09-02 15:38
363 查看
IP协议是网络层的协议。它提供不可靠的,无连接的数据包传送服务。
不可靠是指它不保证数据能够成功到达目的方。如果发生某种错误时,如某个路由器暂时用完了缓冲区,IP有一个简单的错误处理方法:丢弃该数据报,并发送ICMP消息报给信源端。任何要求的可靠性必须由上层提供(如TCP)。
无连接指的是IP并不维护任何关于后续数据包的状态信息,任何数据包的处理是相对独立的。即目的方收到的数据报的顺序可能跟发送方发送的顺序不一致。
IP数据报的格式如下图所示:
各字段的含义如下:
4位版本:指的是协议版本号是4,即协议是IPv4,由此可见IPv4的地址是32位。后来IPv6把地址扩大到128位。
4位首部长度:普通的IP首部是20个字节,如果含有选项字段的话,长度要大于20字节,最长为60字节。
8位服务类型:指的是服务类型。
16位总长度:指的是首部和数据之和的长度。单位是字节。占16位,表示最大长度为2^16-1=65535字节。
但是在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元MTU。当一个IP数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过MTU值。当数据报长度超过网络所容许的MTU时,就必须把过长的数据报进行分片后才能在网络上传送。这时,数据报首部的总长度指的就是分片之后的首部长度和数据长度的总和。
16位标志:当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的分片后的数据报片的标志字段中。相同的标志字段的值使分片后的个数据报片最后能正确地重装成为原来的数据报。
3位标志:用于标志该数据报有没有分片。
MF=1表示”后面还有分片”的数据报,MF=0表示这是数据报片中的最后一个。
DF=0表示可以分片。
13位片偏移:较长的数据报进行分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位,即每个分片的长度一定是8字节的整数倍。
8位生存时间:即TTL,是指数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在因特网中兜圈子,白白浪费网络资源。
8位协议:指的是此数据报携带的数据是使用何种协议,以便使目的主句的IP层知道将数据部分上交给哪个处理过程。
16位首部校验和:这个字段只检验数据的首部部分,不检验数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和,如发生错误则直接丢弃该数据报。不检验数据部分可减少计算的工作量,把可靠性交给上层协议,如ICMP,TCP,UDP的首部都有覆盖数据部分的检验。
32位源地址
32位目的地址
不可靠是指它不保证数据能够成功到达目的方。如果发生某种错误时,如某个路由器暂时用完了缓冲区,IP有一个简单的错误处理方法:丢弃该数据报,并发送ICMP消息报给信源端。任何要求的可靠性必须由上层提供(如TCP)。
无连接指的是IP并不维护任何关于后续数据包的状态信息,任何数据包的处理是相对独立的。即目的方收到的数据报的顺序可能跟发送方发送的顺序不一致。
IP数据报的格式如下图所示:
各字段的含义如下:
4位版本:指的是协议版本号是4,即协议是IPv4,由此可见IPv4的地址是32位。后来IPv6把地址扩大到128位。
4位首部长度:普通的IP首部是20个字节,如果含有选项字段的话,长度要大于20字节,最长为60字节。
8位服务类型:指的是服务类型。
16位总长度:指的是首部和数据之和的长度。单位是字节。占16位,表示最大长度为2^16-1=65535字节。
但是在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元MTU。当一个IP数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过MTU值。当数据报长度超过网络所容许的MTU时,就必须把过长的数据报进行分片后才能在网络上传送。这时,数据报首部的总长度指的就是分片之后的首部长度和数据长度的总和。
16位标志:当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的分片后的数据报片的标志字段中。相同的标志字段的值使分片后的个数据报片最后能正确地重装成为原来的数据报。
3位标志:用于标志该数据报有没有分片。
MF=1表示”后面还有分片”的数据报,MF=0表示这是数据报片中的最后一个。
DF=0表示可以分片。
13位片偏移:较长的数据报进行分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位,即每个分片的长度一定是8字节的整数倍。
8位生存时间:即TTL,是指数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在因特网中兜圈子,白白浪费网络资源。
8位协议:指的是此数据报携带的数据是使用何种协议,以便使目的主句的IP层知道将数据部分上交给哪个处理过程。
16位首部校验和:这个字段只检验数据的首部部分,不检验数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和,如发生错误则直接丢弃该数据报。不检验数据部分可减少计算的工作量,把可靠性交给上层协议,如ICMP,TCP,UDP的首部都有覆盖数据部分的检验。
32位源地址
32位目的地址
相关文章推荐
- HDU 2639 Bone Collector II (背包 第K优解)
- 检查联网状态并设置网络
- Longest Palindromic Substring
- delphi数据类型解析
- no terminal colors in Linux
- SDUTOJ3314
- JAVA操作Excel文件
- 阿里巴巴接口时间(Date)类型字段提交格式
- PAT 1077. Kuchiguse (20)
- 理解MySQL——索引与优化
- 1048. Find Coins (25) -- 二分法
- StringUtils的isBlank与isEmply
- Linux jstack分析cpu占用100%
- 在openerp的tree视图中设置字体及颜色
- 班级游戏
- linux 安装tree命令,非yum安装方式
- iOS动画技术——UIView动画(视图动画)
- 石头剪刀布游戏
- 修改SecureCRT的客户端显示的编码格式(解决显示乱码问题)
- mosquitto安装完成