IP 数据报
IP 数据报
1.IP 数据报的格式
- 一个 IP 数据报由首部和数据两部分组成。(数据报也可以说是数据包)
- 首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。
- 在首部的固定部分的后面是一些可选字段,其长度是可变的。
2.IP 数据报首部的固定部分中的各字段
从图中可看到,数据报首部可分为固定部分和可变部分,固定部分为了五行,每行32位即4个字节。
版本——占 4 位(第一行四个字节中0~3位),指 IP 协议的版本该 IP 协议的版本号为 4 (即 IPv4);
首部长度——占 4 位(第一行四个字节中4~7位),表示首部总的长度(固定+可变部分);可表示的最大数值是 15 个单位(一个单位为 4 字节)因此 IP 的首部长度的最大值是 60 字节。
区分服务——占 8 位(第一行四个字节中8~15位),区分服务。即该段设置了数据报的优先程度,若要想实现数据报优先传输还需要在路由器端配置相应的区分服务设置。只有在使用区分服务(DiffServ)时,这个字段才起作用。在一般的情况下都不使用这个字段 。
总长度——占 16 位(第一行四个字节中16~31位),指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节。总长度必须不超过最大传送单元 MTU。
标识(identification)——占 16 位(第二行四个字节中1~15位),它是一个计数器,用来产生数据报的标识,即每产生一个数据报贴上一个标识。
标志(flag)——占 3 位(第二行四个字节中16~18位),目前只有前两位有意义。
标志字段的最低位是 MF (More Fragment)。MF = 1 表示后面“还有分片”。MF = 0 表示最后一个分片。
标志字段中间的一位是 DF (Don't Fragment) 。只有当 DF = 0 时才允许分片。即标志表示该数据报是否分片了?是第几个分片?
片偏移——占12 位(第二行四个字节19~31位)指出:较长的分组在分片后某片在原分组中的相对位置。片偏移以 8 个字节为偏移单位。
IP 数据报分片举例
以太网传输的数据报数据部分一般都是1500个字节。如果有个数据报数据部分为3800字节(数据报总长度超过路由器的对大传送单元MTU) 就需要分为若干个数据报片发送。
如图中分为三个数据报片发送,在每个数据报片的首部都要写上原数据报首部的信息,包括目标IP 地址等,并编上号。数据报片的数据部分第一个字节表示偏移,每个数据报片的偏移 = 该报片数据部分的第一个字节号 / 8,如图所示。
生存时间——占 8 位(第三行四个字节中0~7位)记为 TTL (Time To Live)数据报在网络中可通过的路由器数的最大值。即计算机发出数据时会附带一个TTL值,该值在数据报每经过一个路由器就自减1,等到某路由器接收到该数据报发现其TTL值变为0时不在中转该数据报,而是将其丢弃并向最初发送者返回一个ICMP报文。TTL的设置可以防止数据报无限循环传输。
TTL简单举例
在命令行窗口尝试与本计算机的默认网关地址通信:ping 172.26.104.1,发现TTL值为255,因为访问的是本计算机的网关在同一网段上,不用经过其他路由器中转便可直接访问(Linux默认TTL值为255);
于是我尝试与美国的某个IP地址通信:ping 207.226.141.205,会得到IP 地址为63.218.56.150的路由器发来的回复:“TTL传输中过期”。说明在通信数据报在传输到该路由器上时TTL值已为0,随后该路由器将通信数据报自行销毁并给最初发出数据者(即本计算机)一个回复。
此外,还可以通过指定TTL的值,观察哪个路由器给计算机回复TTL过期信息,以此来跟踪通信数据报传输过程中途经的路由器:
ping 207.226.141.205 -i 1
指定通过 “-i 1“ 指定TTL值为1,即数据报中转到第一个路由器中就销毁了。
可以看到本计算机向IP地址:207.226.141.205,发出的包含通信请求的数据报经过的第一个路由器IP地址为本计算机的网关:172.26.104.1;第二个路由器的IP地址为10.0.2.37 。
- 协议——占 8 位(第三行四个字节8~15位)字段指出此数据报携带的数据使用何种协议。
协议字段里一般使用协议号来标识相关协议,比如其中一部分为:
- 首部校验和——占 16 位(第三行四个字节16~31位)字段只检验数据报的首部不检验数据部分,目的是验证数据报的首部有无错误。
检验过程
好比寄快递,发件方在快递单上写上收件人、地址、电话,然后根据这些信息得到一个校验和并写在快递单上;快递员收到这个快递之后检查对应的信息是否出错,出错了就不发了,并不在乎快递内的东西是否出错。也就是说该字段仅检查数据报的首部有无错误不关心数据部分。
- 第四行的四个字节表示:源地址;
- 第五行的四个字节表示:目的地址;
3.IP 数据报首部的可变部分
- IP 首部的可变部分就是一个选项字段,用来支持排错、测量以及安全等措施,内容很丰富。
- 选项字段的长度可变,从 1 个字节到 40 个字节不等,取决于所选择的项目。
- 增加首部的可变部分是为了增加 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。
- 实际上这些选项很少被使用。
4.抓包验证
这里所说的“抓包”指的是计算机通信的数据报,也可以叫做数据包。
- 首先回顾一下数据报的格式:
- 使用抓包软件Wireshark抓包如下:
选中某一数据包之后,下面的四栏选项显示的是数据包的具体内容,从上往下分别是:数据帧信息、数据链路层信息、网络层信息、运输层信息。
- 打开数据链路层信息栏:
可以发现数据链路层添加的内容:目标MAC地址、源MAC地址、协议类型:在数据链路层指明了网络层使用的协议是IPv4。
- 打开网络层信息栏:
其中:
Version:4表示版本字段,值4表示网络层使用IPv4协议与数据链路层指定的协议类型一致;
Header Length表示首部长度字段,值为20表示数据包首部为20个字节;
Differentiated Services Field表示区分服务字段,它的值0x00表示该数据包默认没有区分服务;
Total Length表示总长度字段,它的值1500表示整个数据包的总长度为1500字节;
Identification表示标识字段,表示该数据包的编号为61121,查看相邻的数据包可发现其标识为61122:
验证了计算机发送数据包时会按顺序给数据包加上连续的标识。
Flags表示标志字段,看看出该数据包并没有分片;
Flagment offset表示片偏移字段,由于数据包没有分片,所以片偏移为0;
Time to live即TTL表示生存时间字段;
Protocol表示协议字段,TCP(6)表示使用该数据包使用TCP协议传输,6为TCP协议的协议号;
Header checksum表示首部检验和字段,validation disabled表示首部检验和验证失败;
Source表示源地址字段;
Destination表示目标地址字段。
IP 数据报的更多相关文章
- IP数据报首部解析
IP数据报首部的格式,普通20字节. 4位版本号:当前4--IPv4. 4首部长度:首部长度 8位服务类型TOS: 3bits(优先权)+ 4bits(类型--最小延迟+最大吞吐量+最高可靠性+最小费 ...
- 计算机网络(3)-----IP数据报格式
IP数据报(IP Datagram) 格式 解析 (1)版本 占4位,指IP协议的版本.通信双方使用的IP协议版本必须一致.目前广泛使用的IP协议版本号为4(即IPv4). (2)首部长度 占4位,可 ...
- IP数据报的格式
1. IP数据报首部的固定部分中的各字段 ①版本:占4位,指IP协议的版本.通信双方使用的 IP协议版本必须一致.日前广泛使用的 IP协议版本号为 4 (即 IPv4). IPv6 目前还处于起步阶段 ...
- IP数据报首部校验和算法
当用google搜索IP数据报首部校验和算法的时候,总是看到的是代码,没有看到其过程,于是就有了此文,如有错误请指正.文章省略一点,呵呵 IP/ICMP/IGMP/TCP/UDP等协议的校验和算法 ...
- IP数据报格式 及路由转发算法
ip数据报分首部和数据两部分组成: 首部分为固定部分和可变部分 版本--占 4 位,指 IP 协议的版本 目前的 IP 协议版本号为 4 (即 IPv4) 首部长度--占 4 位,可表示的最大数值 是 ...
- Linux - IP数据报报头及个字段的意义
IP数据报的格式: IP 数据报的首部长度和数据长度都是可变长的,但总是4字节的整数倍. 对于IPv4 ,4位版本字段是4. (1)版本 占4位,指IP协议的版本.通信双方使用的IP协议版本必须一致. ...
- 以太网帧、TCP与UDP段以及IP数据报格式总结
传输层及其以下的机制由内核提供,是操作系统的一部分,应⽤层由⽤户进程提供应⽤层数据通过协议栈发到⽹络上时,每层协议都要加上⼀个数据⾸部(header),称为封装.不同的协议层对数据包有不同的称谓,在传 ...
- 局域网主机A向主机B发送ip数据报的过程
主机A首先查找其ARP高速缓存内的映射表中是否有主机B的IP地址,如果有,则查找出其对应的硬件地址,并将该硬件地址写入MAC帧,通过局域网将该MAC帧发送给主机B.如果ARP高速缓存内没有主机B的IP ...
- 用寄快递模拟数据在网络中的传送过程,发送一个ip数据报到接受这个ip数据报经历的过程
发送一个ip数据报到接受这个ip数据报经历的过程 好比寄一个快递的过程 这个包裹一共有三层, 这个包裹的最里面是数据,数据 第二层写着目的ip地址和源ip地址,即收件人和发件人的姓名 第三层也就是最外 ...
- 在计算机通信中,可靠交付应当由谁来负责?是网络还是端系统? 网络层协议 MAC帧、IP数据报、TCP报文 关系 IP地址与硬件地址 链路层与网络层
小结: 1. 网络层两种服务 虚电路服务 virtual circuit 电信网 网络层负责可靠交付 数据报服务 网络层不负责可靠交付 提供灵活的.无连接的.尽最大努力交付的数据报服务 不提供服务 ...
随机推荐
- 吴裕雄--天生自然 JAVA开发学习:继承
class 父类 { } class 子类 extends 父类 { } public class Penguin { private String name; private int id; pub ...
- (vshadow)Volume Shadow在渗透测试中的利用
本文根据嘶吼学习总结出文中几种方式Vshadow包含在window SDK中,由微软签名. Vshadow包括执行脚本和调用支持卷影快照管理的命令的功能,这些功能可能会被滥用于特权级的防御规避,权限持 ...
- 【2】从零认识中心极限思想-e往无尽
目录 e往无尽 单调性.有界性 \(e^{-x^2}\)的积分性质 函数列的近似 傅里叶的方案 三角函数系的正交性 傅立叶展开 傅立叶展开式的指数形式 e往无尽 无论是学高数,还是学习数分,我们在讲到 ...
- linux select函数
/**两个线程一个负责监听客户端,一个负责读客户端请求. 服务器模型,*主控线程负责accept监听链接的客户端,*把客户端fd放入任务队列中(),分离子线程则从任务队列取出所有的*客户端描述加入se ...
- grep -v|grep -F
cat a cat b #取b中不含1的行 b #b先和a比较,两者交集与b再取交集 b: b: b: b: b: b:22 $ grep -F a -f a b#a先和a比较,两者交集与b再取交集 ...
- Python文件基本操作及上下文管理
文件基本操作 打开文件:f = open(fole_name,mode = 'r'),传入表示文件路径的字符串,会返回一个文件对象,mode是文件打开模式. 关闭文件:f.close(),调用给定文件 ...
- Matlab高级教程_第三篇:Matlab转码C/C++方式(混编)_第一部分
0. 其实Matlab的转码混编大多数就是为了现成的算法函数不用再写了,2就是为了方便提高代码运行速度用C语言去运行. 1. MEX文件: Mex文件是一种可在matlab环境中嗲用C语言(或fort ...
- Linux centos 下安装nginx
一.安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c++ libtool openssl opens ...
- 《走出软件作坊》//TODO
目录 简介 结束语 简介 作者吕建伟(@阿朱),研发管理专家,原京东技术学院院长,中国互联网技术联盟发起人,历任首席架构师.技术总监以及CTO等职位.目前已接受用友集团董事长王文京邀请,加入用友组建研 ...
- 透过微软研究院在“数据中心网络”的重大进展看SIGCOMM 2013
2013" title="透过微软研究院在"数据中心网络"的重大进展看SIGCOMM 2013"> 编者按:于8月12日至16日在香港举行的SI ...