《图解TCP/IP》 4.7 IPv4的首部

版本:由4比特构成,表示标识IP首部的版本号。IPv4的版本号即为4,因此在这个字段上的值也为“4”。

首部长度:由4比特构成,表明IP首部的大小,单位为4字节(32比特)。对于没有可选项的IP包,首部长度则设置为“5”。也就是说,当没有可选项时,IP首部的长度为20字节(4*5=20)。

区别服务:由8比特构成,用来表明服务质量。每一个的具体含义如表所示。

这个值通用由应用指定。而且现在也鼓励这种结合应用的特性设定TOS(Type of Service)的方法。然而在目前,几乎所有的网络都无视这些字段。这不仅是因为在符合质量的要求下按其要求发送本身的功能实现起来十分困难,还因为若不符合质量要求就可能会产生不公平现象。因此,实现TOS控制变得极其复杂。这也导致TOS整个互联网几乎就没有被投入使用。不过已有人提出将TOS字段再划分为DSCP和ECN两个字段的建议。

DSCP(Differential Services Codepoint,差分服务代码点)是TOS(Type Of Services)的一部分。现在统称为DiffSer,用来进行质量控制。

如果3-5位的值为0,0~2位则被称作类别选择代码点。这样就可以向TOS的优先度那样提供8中类型的质量控级别。对于每一种级别所采取的措施则由提供DiffServ的运营管理者制定。为了与TOS保持一致,值越大优先度也越高。如果第五位为1,表示实验或本地使用的意思。

ECN(Ecplicit Congestion Notification,显示拥塞通告)用来报告网络拥塞情况,由两个比特构成。

第6位的ECT 用以通告上传TCP层协议是否处理ECN。当路由器在转发ECN为1的包的过程中,如果出现网络拥塞的情况,就将CE位设置为1。

总长度: 表示IP首部与数据部分合起来的字节数。该字段长16比特。因此IP包的最大长度为65535=2^16字节。目前还不存在能够传输最大长度为65535字节的IP包的数据链路。不过,由于有IP分片处理,从IP的上一层的角度看,不论底层采用何种数据链路,都可以认为能够以IP的最大包长传输数据。

标识:由16比特构成,用于分片重组。同一个分片的标识值相同,不同分片的标识值不同。通常,每发送一个IP包,它的值也逐渐递增。此外,即使IP相同,如果目标地址、源地址或协议不同的话,也会被认为是不同的分片。

标志:由3比特构成,标识包被分片的相关信息。每一个的具体含义如图:

片位移:由13比特构成,用来标识被分片的每一个分段相当于原始数据的位置。第一个分片对应的值为0.由于FO域占13位,因此最多可以表示8192(=2^13)个相对位置。单位为8字节,因此最大可表示原始数据8*8192=65536字节的位置。

生存时间(TTL:Time To Live):由8比特构成,它最初的意思是以秒为单位记录当前包在网络上应该生存的期限。然而,在实际中它是指可以中转多少个路由器的意思。每经过一个路由器,TTL会减1,直到变成0则丢弃该包。

协议:由8比特构成,表示IP首部的下一个首部隶属于哪个协议。目前使用的协议部分如图:

首部校验和:由16比特(2个字节)构成,也叫IP首部校验和。该字段只校验数据报的首部,不校验数据部分。它主要用来确保IP数据报不被破坏。校验和的计算过程,首先要将校验和的所有位置设置为0,然后以16比特为单位划分IP首部,并用1补数计算所有16位字的和。最后将所得到这个和的1补数赋给首部校验和字段。

源地址:由32比特构成,表示发送端IP地址。

目标地址:由32比特构成,表示接收端IP地址。

可选项:长度可变,通常只在进行实验或诊断时使用。该字段包含如下几点信息:安全级别,源路径,路径记录,时间戳

填充:也称作填充物。在有可选项的情况下,首部长度可能不是32比特的整数倍。为此,通过向字段填充0,调整为32比特的整数倍。

数据:存入数据。将IP上层协议的首部也作为数据进行处理。

IPv4首部的更多相关文章

  1. IP 协议首部格式与其配套使用的四个协议(ARP,RARP,ICMP,IGMP)

    目录 IP协议首部格式地址解析协议 ARP逆向地址解析协议 RARP网际控制报文协议 ICMP网际组管理协议IGMP IP 数据报首部 IP数据报首部格式: 最高位在左边,记为0 bit:最低位在右边 ...

  2. (网络层)IP 协议首部格式与其配套使用的四个协议(ARP,RARP,ICMP,IGMP)

    目录 IP协议首部格式地址解析协议 ARP逆向地址解析协议 RARP网际控制报文协议 ICMP网际组管理协议IGMP IP 数据报首部 IP数据报首部格式: 最高位在左边,记为0 bit:最低位在右边 ...

  3. UNIX网络编程--IPV4 IPV6 ICMPV4 ICMPV6

    一.IPV4首部 IP层提东无连接不可靠的数据报递送服务.它会尽力把IP数据报递送到指定的目的地,然而并不保证他们一定到达,也不保证他们的到达顺序与发送顺序一致,还不保证每个IP数据报只到达一次.任何 ...

  4. 网络层 IP 协议首部格式与其配套使用的四个协议(ARP,RARP,ICMP,IGMP)

    目录 IP协议首部格式地址解析协议 ARP逆向地址解析协议 RARP网际控制报文协议 ICMP网际组管理协议IGMP IP 数据报首部 IP数据报首部格式: 最高位在左边,记为0 bit:最低位在右边 ...

  5. 《网络编程》IPv4 与 IPv6 相互操作

    前言 因为互联网终端不断添加.IPv4 地址长度(32位)已不可以满足要求.所以出现了 IPv6地址(128位).可是现有应用程序大部分还是採用 IPv4 地址形式,所以必须解决 IPv4 与 IPv ...

  6. IP首部格式[转载]

    TCP 传输首部是 IP首部,所以把IP首部格式 拿过来研究下,看IP首部解码过程:   来源:51CTO博客,地址:http://lihuan.blog.51cto.com/4391550/7999 ...

  7. tcp/ip--IP 协议首部格式与其配套使用的四个协议(ARP,RARP,ICMP,IGMP)

    IP 数据报首部 最高位在左边,记为0 bit:最低位在右边,记为31 bit 版本: 占 4 位,指 IP 协议的版本目前的 IP 协议版本号为 4 (即 IPv4) 首部长度: 占4位,可表示的最 ...

  8. IPv4与IPv6数据报格式详解

    摘要: 本文给出IPv4与IPv6数据报格式示意图,并整理了各个字段含义,最后对比IPv4与IPv6数据报格式的区别. 一.IPv4数据报 图1 IPv4数据报格式版本号(version) 不同的IP ...

  9. ipv4枯竭和ipv6的启用

    IPv4是Internet Protocol version 4的缩写,中文翻译为互联网通信协议(TCP/IP协议)第四版,通常简称为网际协议版本4. IPv4使用32位(4字节)地址,因此地址空间中 ...

随机推荐

  1. 移动前端不得不了解的Meta标签

    http://ghmagical.com/article/page/id/PSeJR0rPd34k

  2. PAT Basic 1027 打印沙漏 (20 分)

    本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号:各行符号中心对齐:相邻两 ...

  3. python的java胶水(jpype1)

    1.直接使用pip安装jpype1 命令 pip install jpype1 但是,很不幸,提示报错,缺少VC++组件. 2.使用其他方法安装 在  https://www.lfd.uci.edu/ ...

  4. 02CSS

    1.简介 从事网页制作或者相关工作,就要学习HTML,CSS.其中HTML是网页制作的主要语言网页的基础,CSS层叠样式表,主要用来修饰页面的元素 CSS 是 Cascading Style Shee ...

  5. 点击链接跳转到QQ的情况; qq交谈

    https://blog.csdn.net/qq_31856835/article/details/70225968 https://blog.csdn.net/qq_37815596/article ...

  6. 非父子组件通过事件传值-vue

    1.创建中央事件总线:额外的 new Vue()2.$emit 触发事件3.$on 监听事件 在使用组件的文件中: <template> <div> <x-test :b ...

  7. Java语言基础1-关键字、标识符、常量和变量

    关键字-标识符-常量和变量-运算符-流程控制-方法-数组 1.关键字 keyword Java系统中已经赋予了特殊含义的单词 特点:全部是小写字母注意: Java中的保留字:现在没有使用,以后有可能会 ...

  8. LeetCode--009--回文数(python)

    判断一个数是否为回文数,回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 通常让数字逆序,然后判断和原数字是否相等,这里只需逆序一般就可以. case1.奇数位例如判断12321 whi ...

  9. Python3 实现FTP功能

    目录结构: FTP_project/ ├── FTP_client │   ├── ftp_client.py │   └── __init__.py └── FTP_server ├── bin │ ...

  10. Linux GDB 程序调试工具使用详解

    转自    http://www.codeceo.com/article/linux-gdb-tools.html 整理的挺全的 GDB概述 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试 ...