IP 封包的封装

目前因特网社会的 IP 有两种版本,一种是目前使用最广泛的 IPv4 (Internet Protocol version 4, 因特网协定第四版), 一种则是预期未来会热门的 IPv6 。IPv4 记录的地址由于仅有 32 位,预计在 2020 年前后就会分发完毕,如此一来, 新兴国家或者是新的网络公司,将没有网络可以使用。为了避免这个问题发生,因此就有 IPv6 的产生。 IPv6 的地址可以达到 128 位,可以多出 2 的 96 次方倍的网址数量,这样的 IP 数量几乎用不完啦!虽然 IPv6
具有前瞻性,但目前主流媒体大多还是使用 IPv4 ,因此本文主要谈到的 IP 都指 IPv4 而言喔!(注13)

我们在前一小节谈到 MAC 的封装,那么 IP 封包的封装也得要来了解一下,才能知道 IP 到底是如何产生的啊! IP 封包可以达到 65535 bytes 这么大,在比 MAC 大的情况下,我们的操作系统会对 IP 进行拆解的动作。至于 IP 封装的表头数据绘制如下:(下图第一行为每个字段的 bit 数)

4 bits 4 bits 8 bits 3 bits 13 bits
Version IHL Type of Service Total Length
Identification Flags Fragmentation Offset
Time To Live Protocol Header Checksum
Source Address
Destination Address
Options Padding
Data

图 2.3-1、IP 封包的表头资料

在上面的图示中有个地方要注意,那就是『每一行所占用的位数为 32 bits』, 各个表头的内容分别介绍如下:

  • Version(版本)

    宣告这个 IP 封包的版本,例如目前惯用的还是 IPv4 这个版本就在这里宣告。
  • IHL(Internet Header Length, IP表头的长度)

    告知这个 IP 封包的表头长度,使用的单位应该是字组 (word) ,一个字组为 4bytes 大小喔。
  • Type of Service(服务类型)

    这个项目的内容为『PPPDTRUU』,表示这个 IP 封包的服务类型,主要分为:

    PPP:表示此 IP 封包的优先度,目前很少使用;

    D:若为 0 表示一般延迟(delay),若为 1 表示为低延迟;

    T:若为 0 表示为一般传输量 (throughput),若为 1 表示为高传输量;

    R:若为 0 表示为一般可靠度(reliability),若为 1 表示高可靠度。

    UU:保留尚未被使用。

    举例来说,gigabit 以太网络的种种相关规格可以让这个 IP 封包加速且降低延迟,某些特殊的标志就是在这里说明的。
  • Total Length(总长度)

    指这个 IP 封包的总容量,包括表头与内容 (Data) 部分。最大可达 65535 bytes。
  • Identification(辨别码)

    我们前面提到 IP 袋子必须要放在 MAC 袋子当中。不过,如果 IP 袋子太大的话,就得先要将 IP 再重组成较小的袋子然后再放到 MAC 当中。而当 IP 被重组时,每个来自同一个 IP 的小袋子就得要有个标识符以告知接收端这些小袋子其实是来自同一个 IP 封包才行。 也就是说,假如 IP 封包其实是 65536 那么大 (前一个 Total Length 有规定), 那么这个 IP 就得要再被分成更小的 IP 分段后才能塞进 MAC 讯框中。那么每个小 IP 分段是否来自同一个 IP 资料,呵呵!那就是这个标识符的功用啦!
  • Flags(特殊旗标)

    这个地方的内容为『0DM』,其意义为:

    D:若为 0 表示可以分段,若为 1 表示不可分段

    M:若为 0 表示此 IP 为最后分段,若为 1 表示非最后分段。
  • Fragment Offset(分段偏移)

    表示目前这个 IP 分段在原始的 IP 封包中所占的位置。就有点像是序号啦,有这个序号才能将所有的小 IP 分段组合成为原本的 IP 封包大小嘛!透过 Total Length, Identification, Flags 以及这个 Fragment Offset 就能够将小 IP 分段在收受端组合起来啰!
  • Time To Live(TTL, 存活时间)

    表示这个 IP 封包的存活时间,范围为 0-255。当这个 IP 封包通过一个路由器时, TTL 就会减一,当 TTL 为 0 时,这个封包将会被直接丢弃。说实在的,要让 IP 封包通过 255 个路由器,还挺难的~ ^_^
  • Protocol Number(协定代码)

    来自传输层与网络层本身的其他数据都是放置在 IP 封包当中的,我们可以在 IP 表头记载这个 IP 封包内的资料是啥, 在这个字段就是记载每种数据封包的内容啦!在这个字段记载的代码与相关的封包协议名称如下所示:

    IP 内的号码 封包协议名称(全名)
    1 ICMP (Internet Control Message Protocol)
    2 IGMP (Internet Group Management Protocol)
    3 GGP (Gateway-to-Gateway Protocol)
    4 IP (IP in IP encapsulation)
    6 TCP (Transmission Control Protocol)
    8 EGP (Exterior Gateway Protocol)
    17 UDP (User Datagram Protocol)

    当然啦,我们比较常见到的还是那个 TCP, UDP, ICMP 说!

  • Header Checksum(表头检查码)

    用来检查这个 IP 表头的错误检验之用。
  • Source Address

    还用讲吗?当然是来源的 IP 地址,从这里我们也知道 IP 是 32 位喔!
  • Destination Address

    有来源还需要有目标才能传送,这里就是目标的 IP 地址。
  • Options (其他参数)

    这个是额外的功能,提供包括安全处理机制、路由纪录、时间戳、严格与宽松之来源路由等。
  • Padding(补齐项目)

    由于 Options 的内容不一定有多大,但是我们知道 IP 每个数据都必须要是 32 bits,所以,若 Options 的数据不足 32 bits 时,则由 padding 主动补齐。

你只要知道 IP 表头里面含有: TTL, Protocol, 来源地址与目标地址也就够了!而这个 IP 表头的来源与目标 IP ,以及那个判断通过多少路由器的 TTL ,就能了解到这个 IP 将被如何传送到目的端。

IP封包的封装 - 首部内容的更多相关文章

  1. ip封包

    I P封包 從一直以來討論至今﹐我們都不斷地接觸到“封包”這個詞﹐相信您也很有興趣想知道這個“封包”究竟是個什麼樣的東東吧﹗下面就讓我們一起看看一個IP封包究竟包含了那些內容. 擷取IP封包 如果您的 ...

  2. XML真正强大的功能是来自其元素与封装的内容

    创建文档类型声明 一般而言,XML声明放在文档顶部.在PHP中声明十分简单:只需实例化一个DOM文档类的对象并赋予它一个版本号.查看程序清单A: 程序清单 A <?php// create do ...

  3. logstash filter geoip 转换IP为详细地址等内容。

    使用logstash geoip筛选器可以将ip地址解析为更丰富的内容. 结果类似于这样: "geoip": { "city_name": "Ürüm ...

  4. IP封包协议头/TCP协议头/TCP3次握手/TCP4次挥手/UDP协议头/ICMP协议头/HTTP协议(请求报文和响应报文)/IP地址/子网掩码(划分子网)/路由概念/MAC封包格式

    IP协议头IP包头格式: 1.版本号:4个bit,用来标识IP版本号.这个4位字段的值设置为二进制的0100表示IPv4,设置为0110表示IPv6.目前使用的IP协议版本号是4. 2.首部长度:4个 ...

  5. 以太网帧,IP,TCP,UDP首部结构

    1.以太网帧的格式 以太网封装格式 2.IP报头格式 IP是TCP/IP协议簇中最为重要的协议.所有的TCP,UDP, ICMP和IGMP数据都以IP数据报格式传输.IP提供的是不可靠.无连接的协议. ...

  6. TCP/IP详解--TCP首部选项中时间戳选项

    一.简介 TCP时间戳选项会在TCP包头增加12个字节,以一种比重发超时更精确的方法来启用对RTT 的计算.   二.作用 ) TCP时间戳位于TCP选项中,kind=:lenth=:data由tim ...

  7. TCP/IP具体解释--TCP首部的TimeStamp时间戳选项

    TCP应该是以太网协议族中被应用最为广泛的协议之中的一个,这里就聊一聊TCP协议中的TimeStamp选项.这个选项是由RFC 1323引入的,该C建议提交于1992年.到今天已经足足有20个年头.只 ...

  8. TCP/IP协议栈与数据报封装 (802.3 Ethernet 以太网 802.11 WLAN 无线网 )

    http://blog.csdn.net/jnu_simba/article/details/8957242 一.ISO/OSI参考模型 OSI(open system interconnection ...

  9. TCP/IP协议栈与数据报封装

    一.ISO/OSI参考模型 OSI(open system interconnection)开放系统互联模型是由ISO(International Organization for Standardi ...

随机推荐

  1. Android下DrawerLayout的使用

    Android下DrawerLayout的使用 DrawerLayout见名知意,就是一个具有抽屉效果的布局,看看这个效果图,是不是感觉很炫酷 这么炫的效果其实不一定非要用类似一些SlidingMen ...

  2. CoreAnimation动画结构变量

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交 ...

  3. 获取imageView的图和背景图

    img1和img2都是ImageView,要把img1中的图片显示到img2中 前景(对应src属性) img2.setImageDrawable(img1.getDrawable()); 背景(对应 ...

  4. FFmpeg的H.264解码器源代码简单分析:概述

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  5. iOS10软件崩溃 Xcode8崩溃 打印/字体等问题汇总 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博!iOS开发者交流QQ群: 446310206 [1].Xcode8代码出现ubsystem: com.apple.U ...

  6. Android简易实战教程--第十四话《模仿金山助手创建桌面Widget小部件》

    打开谷歌api,对widget小部件做如下说明: App Widgets are miniature application views that can be embedded in otherap ...

  7. expect 简单使用

    简单的登陆脚本 这样就不用每次都输入ssh命令了,使用密码还是有些不安全,谨慎使用. #!/usr/bin/expect -f #filename: auto_login.sh #author: or ...

  8. PHP(PHP-FPM)手动编译安装

    1安装PHP 1.1下载解压 wget http://museum.php.net/php5/php-5.3.5.tar.gz tarxzvf php-5.3.5.tar.gz cdphp-5.3.5 ...

  9. MBR和GPT概要学习

    MBR和GPT概要学习 1.     MBR和GPT 大家所最为熟知的分区方式同时也是最主流的主要有两种:MBR(Master Boot Record)和GPT(GUID Partition Tabl ...

  10. postman使用—chrome版

    如果大家不知道怎么安装,请下载个FQ软件(蓝灯,shadowsocks)都是可以的,安装完成之后,你可以在chrome看到posman的插件程序. 使用说明: 安装完成之后,使用chrome://ap ...