来来来, 爷们. 不是一直说纸上得来终觉浅么. 今咱就抓个数据报具体看一看真实网络中的 IP 报首部.

操作方法很简单, 使用wireshark进行抓包. 抓包后随便找个包看一下就行, 毕竟所有通信的包都需要经过网络层.(同时, wireshark会对协议的相关信息给出标识, 更方便我们查看)

其中数据链路层的首部信息在整个数据的最前面, 其后跟着的是网络层, 传输层, 最后剩下的是传输的数据内容. 这个很好理解, 数据从上到下, 每过一层, 都会添加对应的头部信息, 先过传输层就先加上咯.

咱们今儿个主要就看看 IP 协议的首部内容. 走着...

要查看指定字段在其中的位置, 左键点击一下, 数据内容就会高亮了. 好贴心哦.

简单介绍一下各个字段的意思:

  • 协议版本号(4b): 标识当前 IP 协议的版本号.
  • 首部长度(4b): 标识首部长度. 单位是/4B. 也就是首部最长15*4=60B
  • 区分服务(8b):
  • 总长度(16b): 首部+数据的长度. 因为 TCP 的首部是在传输层加上的, 所以传输层的首部也会被认为是数据的一部分. IP 层可传输的数据长度为 65535-60=65475B
  • 标识(16b): 当数据包被分组时, 用于标识不同的分组. 方便接收方对数据包进行重组
  • 标志(3b): 用于一些特殊标志
  • 片偏移量(13b): 当数据包超出长度后, 会分组传输. 此字段标识数据的偏移量. 单位是/8B
  • 生存时间(8b): 数据包在网络中的寿命, 经过 n 跳之后就不再转发了
  • 协议(8b): 标识当前包的数据部分协议
  • 校验和(8b): 用于校验在网络传输中是否失真. 仅校验首部
  • 源地址(32b): 数据包的源IP地址
  • 目标地址(32b): 数据包的目标 IP 地址
  • 可选内容: 一些其他的可选字段

对于网络层协议来说, 每增加一个字段, 都会影响整体的传输速度. 所以当初设计协议的时候, 定是经过了一再斟酌, 最终才保留了这些不可获取的字段.

协议版本号

标识当前协议的版本, 目前主要用来区分 IPV4和 IPV6.

若此字段缺失, 则无法区分不同版本 IP 协议

首部长度

因为协议的首部存在可选字段, 所以需要添加字段用来指明首部的长度. 以4B 为一个单位应该也是经过多次探讨的了. 当首部为20b 时, 则没有使用可选字段.

若此字段缺失, 无法正确识别协议首部结尾.

区分服务

标识此数据包在传输过程中的一些要求服务.

  • 1-3位: 标识数据包重要性. 在网络分组传输种, 较为重要的包会优先传输. 如一个语音通话的数据包, 和一个文件下载的数据包, 明显前者更为优先.
  • 4位: 0(正常延迟), 1(想要较低的延迟)
  • 5位: 1(想要高流量)
  • 6位: 1(要高可靠性)
  • 7位: 也是拥塞控制相关的.
  • 8位: 1(网络拥塞预警)

总长度

用于对识别当前数据报的结尾.

标识

因为数据在网络层会被分片, 所以增加标识分片所在分组.

若此字段缺失, 则无法对数据包进行正确重组.

标志

  • 第一位: 保留
  • 第二位: 0(可以分段), 1(不能分段)
  • 第三位: 0(当前是最后一个分段), 1(后面还有更多的分段)

偏移量

当接收方接收到多个数据分段时, 进行重组的依据. 该字段占13b, 单位是8B. 也就是说 IP 协议传输数据超过: (2^14-1)*8=131064B≈123kb. 不过一个网络层的包也不会这么大.

而网络层对数据包进行分段是依据 MTU 计算的. MTU 则是其自动协商, 取链路最小值.

若此字段缺失, 则接收方无法对数据包进行正确重组.

生存时间

就是你在使用ping命令时, 现实的ttl. 此值每经过一次转发, 就会减一. 当减到0的时候, 该数据包就被丢弃了.

若此字段缺失, 当出现在网络中不存在的目标, 导致数据包在网络中循环传输时永远都不会消失. 而这样的数据一多, 则整个网络都会变得拥堵.

协议

标明数据部分的协议, 用于正确识别数据包上层协议, 并将数据正确转交给指定进程.

搜一下: IP 协议号, 随便打开一个可以看到所有的协议.

若此字段缺失, 则网络层无法将数据正确上交.

校验和

接收方校验在物理传输过程中, 协议首部是否存在损坏. 数据部分不做检查.

若此字段缺失, 则接收方无法缺失接收的数据与发送的数据是否一致.

源地址

用于标识数据包的源地址.

目标地址

用于标识数据包的目标地址.

可选内容

方便后面对协议的扩充. 现在已有的如:

  • 记录路径: 每个路由器都记下其IP 地址
  • 记录时间戳: 每个路由都记下其IP 与时间
  • 等等

感觉可选内容在使用中很少用到, 我抓了各种包, 暂时还没有碰到过有使用的.


协议在设计的时候真的是省吃俭用啊, 平常开发时用到的数据都是以字节为单位的, 人家网络层协议是以位为单位使用的.

后面再看TCP首部的时候, 也可以如此查看其在传输过程种的真正模样.

爷们, 希望你看到这里了...

IP 数据报首部分析相关推荐

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

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

  2. IP数据报首部检验和的详细计算过程

    目录 IP数据报检验的计算过程 引入 检验原理 题目案例及分析 题目要求 分析 计算过程图解 总结 IP数据报检验的计算过程 本篇文章只介绍IP数据报的检验过程,不对原理做过多讲解.内容通俗易懂,请放 ...

  3. 【计算机网络】网络层 : IP 数据报格式 ( IP 数据报首部格式 )

    文章目录 一.TCP / IP 协议栈 二.IP 数据报 格式 三.IP 数据报 首部格式 一.TCP / IP 协议栈 TCP / IP 协议栈 : ① 应用层 : HTTP , FTP , DNS ...

  4. ip数据报首部校验和的计算

    ip数据报首部校验和的计算 网络层间的数据传送特点是: 不可靠:    分组可能丢失,乱序等,不做确认: 无连接:    每个分组都独立对待: 尽力投递: 不随意放弃分组: 点到点. 因为在传输过程中 ...

  5. 【计算机网络】关于IP数据报 首部检验和的反码问题(二进制反码)

    0.前言 今日,在学习谢希仁版计网的IP数据报格式时看到这段话: 用反码算术运算把所有16位字相加后,将得到的和的反码写入检验和字段. 非常疑惑,因为印象中对反码的理解是: 正数的反码是其本身 负数的 ...

  6. IP数据报---首部校验和的计算方法

    为了方便大家,这里再借用网上的一个例子吧: IP头: 45 00    00 31 89 F5    00 00 6E 06    00 00(校验字段) DE B7   45 5D       -& ...

  7. Wireshark分析IP数据报

    Wireshark分析IP数据报 1. IP数据报格式 总概 2. IP数据报首部的固定部分各字段 版本[4位]:IPv4或IPv6 首部长度[4位]:单位是32bit(4字节),比如:首部最小长度为 ...

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

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

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

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

最新文章

  1. java 品尝饮料_那些年我喝过的饮料
  2. React Native 项目常用第三方组件汇总
  3. 成功解决xgboost\core.py, ValueError: feature_names may not contain [, ] or
  4. ABAP 时间月份的F4帮助
  5. 【建议收藏】centos更新yum源为阿里云
  6. Condition.signal
  7. 剑指offer之左旋转字符串
  8. excel在线_功能强大的纯前端 Excel 在线表格: Luckysheet
  9. 微信APP支付(基于Java实现微信APP支付)
  10. 《How to debug PS4 game》
  11. Atitit.月度计划日程表 每月流程表v5
  12. Lingo18.0安装教程(超级详细,不会可以问博主)
  13. vue.js快速入门 1
  14. Java word转pdf方法
  15. 利用js+html做一个简单的体脂率计算
  16. threejs道路贴图动画
  17. 最新目标跟踪评估指标汇总
  18. 网络安全风险评估关键技术研究
  19. 快速入门丨篇一 如何进行运动控制器固件升级
  20. element 时间选择器禁止选择以前或以后的时间

热门文章

  1. linux---基础02
  2. sqlmap使用_sqlmap于sql labs下使用
  3. JAVA入门级教学之(方法-题-3)
  4. 软件测试用例_大话软件测试用例要素
  5. js监听iframe关闭_Node.js文档NET[翻译]
  6. android多个水波球,android球形水波百分比控件代码
  7. python获取终端输出流_Linux下用Python获取命令行输出的几个方案
  8. python导出excel文件数字签名_Python使用RSA+MD5实现数字签名
  9. 电脑入门完全自学手册_电气自动化自学宝典——看过人人都是工程师
  10. 【LeetCode笔记】200. 岛屿数量(Java、DFS)