IP 数据报位于 OSI 七层模型中的网络层,对应与 TCP/IP 四层模型中的网络层(也称网际层)。网络层用来处理网络上流动的数据包(网络传输中最小的数据单元),规定了怎样的路径把数据包传输到目标计算机,并把数据包传送给对方。(与 tcp/ip 协议密切相关的有 IP 协议、ARP 协议、RARP 协议)。IP 协议就在这里,它负责对数据加上 IP 地址和其他的数据,以确定传输的目标,和相邻计算机之间的通信。

其功能包括三方面:

  1. 处理来自传输层的分组发送请求,收到请求后,将分组装入 IP 数据报,填充报头,选择去往信宿机的路径,然后将数据报发往适当的网络接口。
  2. 处理输入数据报:首先检查其合法性,然后进行寻径。假如该数据报已到达信宿机,则去掉报头,将剩下部分交给适当的传输协议;假如该数据报尚未到达信宿,则转发该数据报。
  3. 处理路径、流控、拥塞等问题。

IP协议:Internetworking Protocol(网间网协议),IP是跨越网络传送数据包,使整个互联网都能收到数据的协议。IP也是分组交换的一种协议,但是它不具备重发机制,因此它是不可靠传输协议。

IPv4:头部由 20bytes 定长和一个可选的变长部分(小于等于 40bytes )组成,其中包括 32 位记录源端IP地址,32 位记录目的端 IP 地址。所有内容长度最大为 216-1=65535bytes。

IP数据报的具体结构和解析如下:

通过 Wireshark 抓取的一个 IPv4 的数据报片段示例如下:

Internet Protocol Version 4, Src: 192.168.43.69, Dst: 220.181.38.1480100 .... = Version: 4.... 0101 = Header Length: 20 bytes (5)Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)0000 00.. = Differentiated Services Codepoint: Default (0).... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0)Total Length: 669Identification: 0x989b (39067)Flags: 0x40, Don't fragment0... .... = Reserved bit: Not set.1.. .... = Don't fragment: Set..0. .... = More fragments: Not set...0 0000 0000 0000 = Fragment Offset: 0Time to Live: 128Protocol: TCP (6)Header Checksum: 0x7088 [validation disabled][Header checksum status: Unverified]Source Address: 192.168.43.69Destination Address: 220.181.38.148

注意:上面描述的首部,不包括选项字段的 IP 头部长度为 20bytes(1byte=8bits)长度,最高位在左边,记为 0bit。最低位在右边,记为 31bits。采用 “大端” byte 序进行传输,也就是对于 4bytes 的 32bits 数据,从高位byte(0bit)开始传输 0~7,8~15,15~23,24~31bits。各字段的含义如下:

  • 版本:4bits,0100 值为4代表 IPv4。
  • 首部长度:4bits,占4位,指的是包括选项字段在内的 IP 首部长度。首部单位长度为4个 byte,以有多少组 4bytes 字组来表达 header 的长度。从0000~1111,当“首部长度”表示为0001时,首部的长度是1(4bytes)。首部最大长度为15(60bytes)。
  • 服务类型(区分服务):8bits,前 3bits 优先级字段(现在已经不用了),后 4bits TOS字段, 最后 1bit 备用位。4bits TOS位分别代表:第一位D(delay)最小时延、T(throughput)最大吞吐量、R(reliability)最高可靠性和C(cost)最小费用,只能设置其中 1bit,如果所有 4bits 均为0,那么就表示是一般服务。在抓包中显示Differentiated Services Field,叫差分服务,或叫区分服务。
  • 总长度:16bits,包括首部和数据部分。能表示的最大长度为 65535(216-1)。且这个字段是必须的,当 IP 数据包小于 46bytes 时在以太网帧中数据将会被填充到 46bytes ,这时候如果没有这个字段我们接收到帧后便不能得到正确的 IP 数据包。
  • 标识:16bits,它是一个计数器,用来产生数据报文的标识。数据报文在分片时标志会被复制到每一个分片中。
  • 标志:3bits,第一位 0bit 保留;中间位DF(Don’t Fragment),DF=0 表示能分片,DF=1 表示不能分片。最低位为MF(More Fragment) ,MF=1 表示后面还在传输数据报的分片, MF=0 表示最后一个报文段。
  • (片)偏移:13bits,用于数据包分片和重组。13 位(片)偏移字段,较长的分组在分片后,某片在原来分组中的相对位置。分片偏移以 8bytes 做为计量单位,第一个分片偏移为 0。所以当 Fragment Offset 为0时,表示这个数据报文没有分片,或者第一个分片。
  • 生存时间(TTL):8bits,意为Time To Live,表明是数据报在网络中的寿命,单位为秒设置了数据包可以经过的最多路由器数量。
  • 协议:8bits,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的 IP 层知道应将数据部分上交给哪个处理过程。网络层以上的高层协议有 TCP,UDP,OSPF,EGP,IGMP,ICMP 等。
  • 首部校验和:16bits,校验数据报的首部根据 IP 首部计算的检验和码,它不对首部后面的数据进行计算。采用的是 16bits 二进制反码求和。在上面的 Wireshark 中的 Header Checksum 显示validation disabled,表示这个软件关闭校验和的抓包功能。如果开启该功能,会显示 good 或 bad。
  • 源地址:4bits,源主机的 IP 地址。
  • 目的地址:4bits,目标主机的 IP 地址。
  • 可项字段:最多 40bytes,IP首部的可变部分就是一个选项字段,用来支持排错、测量以及安全等措施,内容很丰富。选项字段的长度可变,取决于所选择的项目。增加首部的可变部分是为了增加IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。实际上这些选项很少被使用。

IP 数据报结构和各字段含义相关推荐

  1. ABAP动态修改屏幕及屏幕字段结构SCREEN的字段含义

    一.屏幕字段结构SCREEN的字段含义 在SAP屏幕中,一个字段就像.NET中的一个控件,这个字段对应一个SCREEN结构,就像控件的多个属性. SE11可以查看SCREEN结构中的字段,只是没有备注 ...

  2. [Win32]IP数据报的首部如何定义

    在进行网络编程时,可能需要直接操作原始的IP数据报,例如编写网络嗅探器.此时要定义一个表示IP数据报首部的结构体来获取首部中的各个信息,问题也随之而来:平时我们使用的数据都是BYTE.WORD或者DW ...

  3. Win32如何定义IP数据报的首部

    Win32如何定义IP数据报的首部   文章出自:http://lang.9sssd.com/vcpp/art/169 [摘要]本文介绍Win32如何定义IP数据报的首部,包括IP数据报首部的定义.T ...

  4. ip数据报格式;ip数据报分片

    点击打开链接 IPv4数据报格式: 上图表示的数据,最高位在左边,记为0位:最低位在右边,记为31位.在网络中传输数据时,先传输0~7位,其次是8~15位,然后传输16~23位,最后传输24~31位. ...

  5. IP数据报 格式参数详解

    IP协议提供不可靠无连接的数据报传输服务,IP层提供的服务是通过IP层对数据报的封装与拆封来实现的.IP数据报的格式分为报头区和数据区两大部分,其中报头区是为了正确传输高层数据而加的各种控制信息,数据 ...

  6. 再谈关于IP数据报分片

    之前特别强调过具体的编号分片,但是少了关于总长度以及编号的细节,这里添加. http://blog.csdn.net/u011240016/article/details/52799673 首先,特别 ...

  7. 计算机三级考的知识点,计算机三级考试复习知识点:IP数据报

    计算机三级考试复习知识点:IP数据报 IP数据报是IP协议使用的数据单元,互联层数据信息和控制信息的传递都需要通过IP数据报进行,同时也是计算机三级考试的重要内容,小编整理了相关知识点,一起来复习下吧 ...

  8. 【计算机网络】——习题解析:一个UDP用户数据的数据字段为8192字节,在数据链路层要使用以太网来传输,试问应当划分为几个IP数据报片?说明每一个IP数据报字段长度和片偏移字段的值

    [计算机网络]--习题解析:一个UDP用户数据的数据字段为8192字节,在数据链路层要使用以太网来传输,试问应当划分为几个IP数据报片?说明每一个IP数据报字段长度和片偏移字段的值 答:6个数据字段的 ...

  9. IP数据报首部字段分析

    IP数据报首部字段分析 IP数据报传输使用的是网络字节序,网络字节序是大端字节序 IP数据报首部一般为20个字节(没有选项的情况),最大是60字节,60字节如何算出参考下面 首部长度字段 版本号 区分 ...

最新文章

  1. [转载]潜移默化学会WPF(技巧篇)--具有Items元素的控件子项获取(一)
  2. 一个简单的epoll测试例子
  3. 【Python基础】快速提升效率的6个pandas使用小技巧
  4. 多用户访问SSAS cube权限设置
  5. Android学习4—短信发送器的实现
  6. 成功解决 遇到3dmax模型文件出错,找回并修复出错文件
  7. python- 机器人抓取谷歌地图数据
  8. 计算机网络位置拒绝访问,Win10无法访问D盘提示位置不可用 拒绝访问的解法
  9. 查询-SPJ练习3参考答案
  10. CentOS命令行模式下设置屏幕常亮----没有达到预期效果
  11. 多元统计分析及R语言建模(第四版)-----数据,包,资源
  12. edu邮箱填写服务器,学生邮箱Outlook使用设置
  13. java电商平台_Java开源生鲜电商平台
  14. 服务器ghost系统蓝屏,完美解决ghost WIN7安装后启动蓝屏问题
  15. 【项目实战课】基于Pytorch的Semantic_Human_Matting(人像软分割)实战
  16. 打造“大国重器”高性能计算,联想与英特尔如何携手点亮数字经济加速度?...
  17. 非常好看的BT宝塔面板美化透明版主题包
  18. STP生成树协议详解
  19. 创维E900V22E armbian刷机(S905L2-B)
  20. 小哥哥~手把手教你如何绘制一辆会跑车

热门文章

  1. 咨询问题?散光加近视怎么办?
  2. mysql 导入ddl_导出数据库的DDL语句
  3. 可重入锁与非可重入锁
  4. Windows本地服务器搭建(微信公众号开发)
  5. 微软3D Movie Maker开源
  6. C/C++ 模拟小型数据库系统(DBMS)
  7. [转]运放电流检测采样电路电压采样电路
  8. 树莓派开机自动连接wifi和启动ssh
  9. Python读取postgresql数据库
  10. 有些事情,一辈子坚持那么一次,就已经足够了 .