zoukankan      html  css  js  c++  java
  • IP首部格式[转载]

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

     IP包首部格式

    IPv4首部一般是20字节长。在以太网帧中,IPv4包首部紧跟着以太网帧首部,同时以太网帧首部中的协议类型值设置为080016。 IPv4提供不同,大部分是很少用的选项,使得IPv4包首部最长可扩展到60字节(总是4个字节4个字节的扩展)

    0

    4

    8

    12

    16

    19

    24

    31

    版本

    首部长度

    服务类型

    长度

    认证

    标志

    段偏移量

    TTL

    协议

    校验和

    源IP地址

    目的IP地址

    选项 ...

    IP包头字段说明

    版本:4位,指定IP协议的版本号。

    包 头长度(IHL):4位,IP协议包头的长度,指明IPv4协议包头长度的字节数包含多少个32位。由于IPv4的包头可能包含可变数量的可选项,所以这 个字段可以用来确定IPv4数据报中数据部分的偏移位置。IPv4包头的最小长度是20个字节,因此IHL这个字段的最小值用十进制表示就是5 (5x4 = 20字节)。就是说,它表示的是包头的总字节数是4字节的倍数。

    服务类型:定义IP协议包的处理方法,它包含如下子字段

    过程字段:3位,设置了数据包的重要性,取值越大数据越重要,取值范围为:0(正常)~ 7(网络控制)

    延迟字段:1位,取值:0(正常)、1(期特低的延迟)

    流量字段:1位,取值:0(正常)、1(期特高的流量)

    可靠性字段:1位,取值:0(正常)、1(期特高的可靠性)

    成本字段:1位,取值:0(正常)、1(期特最小成本)

    未使用:1位

    长度:IP包的总长

    认证:

    标志:是一个3位的控制字段,包含:

    保留位:1位

    不分段位:1位,取值:0(允许数据报分段)、1(数据报不能分段)

    更多段位:1位,取值:0(数据包后面没有包,该包为最后的包)、1(数据包后面有更多的包)


    段偏移量:当数据分组时,它和更多段位(MF, More fragments)进行连接,帮助目的主机将分段的包组合。

    TTL:表示数据包在网络上生存多久,每通过一个路由器该值减一,为0时将被路由器丢弃。

    协议:8位,这个字段定义了IP数据报的数据部分使用的协议类型。常用的协议及其十进制数值包括ICMP(1)、TCP(6)、UDP(17)。

    校验和:16位,是IPv4数据报包头的校验和。

    源地址(Source Address,SA)

    发送IP数据包的IP地址,占32位。

    目的地址(Destination Address)

    接收IP数据包的IP地址,也占32位。

    选项(Options)+填充(Padding)

    这两个选项较少使用,只有某些特殊的封包需要特定的控制才会利用到。共32位。这些选项通常包括:

    ? 安全和处理限制:用于军事领域

    ? 记录路径:让每个路由器都记下它的IP地址

    ? 时间戳:让每个路由器都记下它的IP地址和时间

    ? 宽松的源站选路:为数据报指定一系列必须经过的IP地址

    ? 严格的源站选路:与宽松的源站选路类似,但是要求只能经过指定的这些地址,不能经过其他的地址。

    以上这些选项很少被使用,而且并非所有的主机和路由器都支持这些选项。选项字段一直都是以32位作为界限,在必要的时候插入值为0的填充字节。这样就保证IP首部始终是32位的整数倍(这是首部长度字段所要求的)。

    从以上IP包头格式可以看出,IP协议包头大小也有两种:当没有“选项”这个字段时,为160位,20个字节;当有“选项”字段时为192位,24个字节。它与TCP协议包头大小是一样的。

  • 相关阅读:
    DNS 访问 Service【转】
    Service IP 原理【转】
    通过 Service 访问 Pod【转】
    定时执行 Job【转】
    并行执行 Job【转】
    Job 失败了怎么办?【转】
    用 k8s 运行一次性任务【转】
    运行自己的 DaemonSet【转】
    python之路——递归函数
    尝试加载 Oracle 客户端库时引发 BadImageFormatException
  • 原文地址:https://www.cnblogs.com/the-tops/p/6625367.html
Copyright © 2011-2022 走看看