IP、TCP、UDP首部详解

一、IP首部
  • IP数据报文格式及首部中各字段
    这里写图片描述

                                              图1-1
    
  • 首部各字段意义

    • 4位版本:
      协议版本号,IPv4是0100,IPv6是0110,目前基本都是IPv4版本。
    • 4位首部长度:
      指首部占32bit字的数目,包括选项区,也就是说单位是4个字节,如图1-1首部是20个字节,那首部字段值为5,即0101,首部最大值是1111,也就是说首部长度字段最大可表示15(1111)*4 = 60字节长度(包含选项段)。普通IP数据报(没有任何选项),该字段的值是5,即160比特=20字节。

    • 8位服务类型(TOS):
      TOS字段包含一个3bit的优先权字段(现已被忽略),4bit的TOS字段和1bit未用但必须置0。4bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。4bit中只能置其中1bit,如果所有4bit均为0,表示一般服务。

    • 16位总长度:
      总长度字段是指整个IP数据报的长度,以字节为单位。通过首部长度字段和总长度字段,就可以知道IP数据报中数据内容的起始位置和长度。由于该字段长16bit,所以IP数据报最长可达65535字节,当数据报被分片时,该字段的值也随着变化。

    • 16位标识:
      标识字段唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1。如果IP数据报要分片,则每个分片之后的IP数据报的标识是一样的。
    • 3位标志:
      3位标志,目前只有2位有意义;最低位为MF,MF=1代表后面还有分片的数据报,MF=0代表当前数据报已是最后的数据报。次低位为DF,DF=1代表不能分片,DF=0代表可以分片。
    • 13位偏移:
      此字段是和3位标志中的最低位MF配合使用的。表示某个分片在原始数据中的相对位置。举个例子,假如发送1473字节的UDP数据报,UDP数据报被分成两份,第一份UDP数据报大小则为1480字节(1472+8字节UDP报头),第一份数据报偏移位为0,第二份UDP数据报偏移位字段值则是1480。
    • 8位生存时间(TTL):
      生存时间字段设置了数据报可以经过的最多路由器数,它指定了数据报的生存时间。TTL的初始值由源主机设置(通常是32或64),一旦经过一个处理它的路由器,它的值就减去1,当该字段的值为0时,数据报就被丢弃,并发送ICMP报文通知源主机。
    • 8位协议:
      指明IP层所封装的上层协议类型,如ICMP(1)、IGMP(2) 、TCP(6)、UDP(17)等。
    • 16位首部检验和:
      首部检验和字段是根据IP首部计算的检验和码,用于验证数据的完整性,它不对首部后面的数据进行计算。ICMP、IGMP、UDP和TCP在它们各自的首部中均含有同时覆盖首部和数据的检验和码,而IP不对头部后面的数据进行检验。计算方法可参考此篇文章(https://www.cnblogs.com/furenjian/p/5022103.html)。
    • 32位源IP地址和目的IP地址:
      用来标明发送IP数据报文的源主机地址和接收IP报文的目标主机地址。 
    • 32位选项:
      用来定义一些任选项:如记录路径、时间戳等。这些选项很少被使用,同时并不是所有主机和路由器都支持这些选项。可选项字段的长度必须是32比特的整数倍,如果不足,必须填充0以达到此长度要求,这样可以保证IP首部始终是32bit的整数倍(这是首部长度字段所要求的)。


二、TCP首部
  • 封装TCP数据的IP数据报
    这里写图片描述
                                        图2-1
  • TCP数据报文格式及首部中各字段

这里写图片描述

                                        图2-2
  • 首部各字段意义

    • 16位源端口、目的端口:
      每个TCP段都包含源端口和目的端端口号,用于寻找发端和收端应用进程。这两个值加上IP首部中的源端IP地址和目的IP地址就唯一确定一个TCP连接。
    • 32位序列号:
      用来标识从TCP发端向TCP收端发送的数据字节流,它表示当前报文段的第一个数据字节占整个字节流的相对位置。序号是32bit的无符号数,序号到达2^32 - 1后又从0开始。

    • 32位确认号:
      表示接收端希望接收的数据序号,为上次接收到数据报的序号+1,当ACK标志位为1时才生效。

    • 4位首部长度:
      指出首部中32bit字的数目。需要这个值是因为选项字段的长度是可变的。这个字段占4bit,因此TCP最多有60字节的首部,通常情况下没有选项字段,TCP的首部长度是20个字节。

    • 6位标志位:

      • URG:
        紧急指针有效,当URG=1时生效。

      • ACK:
        确认序号有效,当ACK=1时生效。

      • PSH:
        接受方应该尽快将这个报文段交给应用层,而不是等待缓冲区满。

      • RST:
        重建链接。

      • SYN:
        同步序号,用来发起一个连接。

      • FIN:
        发端完成发送任务。

    • 16位窗口大小:
      TCP的流量控制由连接的每一端通过声明的窗口大小来控制。它表示接收方可接受数据字节数。窗口大小是一个16bit字段,因而窗口大小最大为65535字节。

    • 16位TCP校验和:
      校验和覆盖了整个TCP报文段包括TCP首部和TCP数据。这是一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。

    • 16位紧急指针:
      只有当URG标志置1时紧急指针才有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号,用于TCP紧急数据发送。

    • 选项:
      最常见的可选字段是最长报文大小,又称为MSS。每个连接方通常在通信的第一个报文段(为建立连接而设置SYN标志的那个段)中指明这个选项。它指明本端所有接收的最大长度的报文段。

    • 数据:
      TCP中的数据部分也是可选的。在一个TCP连接的建立和终止时,双发交换的报文段仅有TCP首部。


三、UDP首部
  • 封装UDP数据报的IP数据报
    这里写图片描述
                                        图3-1
  • UDP数据报文格式及首部中各字段
    这里写图片描述
                                            图3-2
  • 16位源端口、目的端口:
    用来标识源端和目标端的应用进程。

  • 16位UDP长度:
    该字段表示UDP首部和UDP数据的字节长度。该字段的最小值为8字节(发送0字节的UDP数据报是OK的)。

  • 16位UDP校验和:
    UDP校验和覆盖了UDP首部和UDP数据。UDP的校验和是可选的,而TCP的校验和是必需的。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值