技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 网络系统 --> 计算机网络协议包头赏析-IP

计算机网络协议包头赏析-IP

浏览:4916次  出处信息

    上次和大家聊了聊以太网的帧格式,本文会讲解IP数据报格式的定义。

    ==

    开门见山,先上图:

    

    任何一个IP数据报都是由首部和数据两部分组成,而且首部基本是固定长度的,长度为20字节。这一点很重要,其他都不记得了,这一点也要记得哦!

    首部其实也分为两部分,即固定部分和可变部分,固定部分出的长度是20字节,可变部分的长度是可变的,但用的机会很少。

    下面,我们就逐个域的来分析IP数据报:

    【版本】- 4bit

    用来标识IP协议的版本,最常见的就是4和6,分别代表IPv4和IPv6。

    【首部长度】- 4bit

    4bit所能表示的最大数值就是15了,而IP数据报标准规定,“首部长度”的单位是4字节(32bit),因此,我们在计算首部长度时,需要用其值乘以4字节,才是首部的实际长度。

    可见,最大的首部长度是15×4=60字节,而最小的首部长度则是固定部分的长度,即20字节。

    如果出现首部长度不是4字节的整数倍时,需要在最后一个字段加以填充,务必保证首部长度是4字节的整数倍。这样,我们的数据部分就总是从4字节的整数倍处开始。

    【服务类型】- 8bit

    此域常被称为TOS(Type Of Service),其中前3bit代表本数据报的优先级;D表示要求更低的时延;T表示要求更高的吞吐;R表示要求更高的可靠性;C表示要求选择代价更小的路由;第8个bit目前没有被使用。

    上面这种分类方式,其实已很少应用,因为有时候这些要求的组合会使得调度策略产生矛盾,比如一条路由是高吞吐但不可靠,另一条是低吞吐但可靠,那么当用户同时要求T和R时,就会产生矛盾。因此,IETF组织将TOS重新进行了定义,称为DS(Differentiated Service),由于此标准只在特定环境特定设备中才有应用,所以就不在此赘述。

    【总长度】- 16bit

    此处的总长度是指首部长度和数据长度之和,单位仍然是字节。

    16bit可以表示的最大值为65535,所以IP数据报的最大长度可以到达65535字节。但由于以太网的MTU(Maximum Transmission Unit)最大为1500字节,所以如果IP协议是运行在以太网的话,就会遇到需要分片的情况。

    【标识】- 16bit

    此域是一个计数器,所产生的值即为IP数据报的标识。当IP数据报的长度超过下层协议所规定的MTU的话,就要对IP数据报进行分片。在这种情况下,就是用这个域在表示同组的IP数据报的。

    【标志】- 3bit

    这3bit中只有前2bit有用,中间一位表示DF(don’t fragment),而最低位(最右侧的bit)表示MF(more fragment)。

    DF等于1的话,表示此IP数据报“不能分片”。只有在DF等于0时,才允许对其进行分片。

    MF等于1的话,表示此IP数据报后面还有分片的数据报,而MF等于0时,则表示当前的IP数据报是这一组中最后一个数据报。

    【片偏移】- 13bit

    此域表示当IP数据报超过MTU而被分拆成多片后,每一片在原IP数据报中的位置。此偏移量的参照起点是原数据报的数据部分的起点。

    要注意的是,片偏移的单位是“8字节”,也就是说,每个分片的长度必须是8字节的整数倍。

    【生存时间】- 8bit

    此域也叫TTL(Time To Live),也可以叫做“寿命”。在IP数据报中是以“所经过的路由器跳数”来计算的。每经过一个路由器,此值都会减一,当TTL为0时,路由器便会丢弃该包。

    默认情况下Linux的TTL为255,windowsXP为128,windows98为32,UNIX为255。更全的TTL统计,可以参考[这里]

    【协议】- 8bit

    此域指出数据报携带的数据是使用了哪一种协议,大部分情况下TCP(值为6)或UDP(值为17)。

    【首部校验和】- 16bit

    此域是针对IP数据报的首部,进行校验。注意校验的只有首部,不包括数据部分。

    【源站IP地址】- 32bit

    即来源处的IP地址。

    【目的站IP地址】- 32bit

    即目的处的IP地址。

    谢谢!

建议继续学习:

  1. 使用python来抓取新浪的IP数据    (阅读:7434)
  2. 计算机网络协议包头赏析-TCP    (阅读:6562)
  3. 获取指定(访客)IP的所有信息,地址、邮政编码、国家、经纬度等的API    (阅读:5407)
  4. 命令行获取主机外网IP,相当于ip138的功能    (阅读:5047)
  5. 当网站使用CDN后获取客户端真实IP的方法    (阅读:4654)
  6. 计算机网络协议包头赏析-以太网    (阅读:4574)
  7. nginx在fastcgi模块中转发真实的后端IP    (阅读:4088)
  8. 获取客户端真实IP方法    (阅读:3897)
  9. nginx.conf控制指定的代理ip和ip访问的设置手记    (阅读:3583)
  10. 重谈IP欺骗技术    (阅读:3484)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1