IP数据报、TCP报文、UDP报文格式

总是记不得TCP/IP协议的各个协议格式,特在此做个记录,好方便回顾。

信息来自众多网络大神们的总结,我再结合自己的理解整理所得。

====================================================================================

一、IP数据报


ps:图转自http://blog.csdn.net/ce123/article/details/17453033

  1. 版本 4bit 指IP协议的版本。目前广泛使用的IP协议版本号为4(即IPv4),IPv6,目前还处于草案阶段。
  2. 首部长度 4bit 单位是字(32bit-4Bytes),即首部长度=0x5(0101),代表首部有5x32bit=160bit(5x4bytes=20bytes)。首部长度大小取值范围5(20Bytes,常规值,不附加任何可选项)-15(60B)。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此数据部分永远在4字节的整数倍开始,这样在实现IP协议时较为方便。首部长度限制为60字节的缺点是有时可能不够用。但这样做是希望用户尽量减少开销。
  3. 区分服务 8bit 目前经已很少使用。
  4. 总长度 16bit 首部长度+数据长度,单位是字节。数据报的最大长度为2^16-1=65535字节。但由于数据链路层的最大传送单元MTU(Maximum Transfer Unit)<65535,所与当一个数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值,若超过则需要分片(因此有上图的第二行)。
  5. 标识 16bit 软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
  6. 标志 3bit 目前只有2位有意义。
    ● 标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个。
    ● 标志字段中间的一位记为DF(Don’t Fragment),意思是“不能分片”。只有当DF=0时才允许分片。
  7. 片偏移 13bit 较长的IP数据报在分片后,某片在原分组中的相对位置(形象理解为分片后的序列)。也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。
  8. 生存时间 8bit TTL(Time To Live),表明是数据报在网络中的寿命。形象理解为,IP数据报最大能经过多少个路由器跳转(每经过一个路由器,TTL--)。防止数据报在网络中无限循环浪费网络资源。
  9. 协议 8bit 标志此数据报携带的数据是使用协议类型(例如TCP、UDP等),以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。
  10. 首部检验和 16bit 注意这个字段只检验数据报的首部,但不包括数据部分(与TCP不同)。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。
  11. 源IP地址 占32位。
  12. 目的IP地址 占32位。

====================================================================================

二、TCP报文

  1. 源端口号 16bit 标识源主机的一个应用进程端口。
  2. 目的端口号 16bit 标识目的主机的一个应用进程端口。
  3. 顺序号 32bit 三次握手建立连接后传输的TCP报文序列号。2^32-1 后从 0 循环开始。当建立一个新的连接时, SYN 标志变 1 ,顺序号字段包含由这个主机选择的该连接的初始顺序号(即在三次握手时就告诉对方,我发送的分组按照这个序号开始编号
  4. 确认号 32bit 包含发送确认的一端所期望收到的下一个顺序号(即在三次握手后传输数据时,告诉对方,这个顺序号以前的我都已经正确收到,你从这个顺序号开始发送)。因此,确认序号应当是上次已成功收到数据字节顺序号加 1 。只有 ACK 标志为 1时确认序号字段才有效
  5. 首部长度 4bit 单位是字(32bit-4Bytes),与IP数据报的首部含义同,即首部长度=0x5(0101),代表首部有5x32bit=160bit(5x4bytes=20bytes)。首部长度大小取值范围5(20Bytes,常规值,不附加任何可选项)-15(60B)。当首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此数据部分永远在4字节的整数倍开始。
  6. 保留位 6bit 保留给将来使用,目前必须置为 0 。
  7. 控制位 6bit 在 TCP 报头中有 6 个标志比特,它们中的多个可同时被设置为 1 。依次为:
    URG :为 1 表示紧急指针有效,为 0 则忽略紧急指针值。
    ACK :为 1 表示确认号有效,为 0 表示报文中不包含确认信息,忽略确认号字段。
    PSH :为 1 表示带有 PUSH 标志的数据,指示接收方应该尽快将这个报文段交给应用层而不等待缓冲区装满。
    RST :用于复位由于主机崩溃或其他原因而出现错误的连接。它还可以用于拒绝非法的报文段和拒绝连接请求。一般情况下,如果收到一个 RST 为 1的报文,那么一定发生了某些问题。
    SYN :同步序号,为 1 表示连接请求,用于建立连接和使顺序号同步( synchronize )。
    FIN :用于释放连接,为 1 表示发送方已经没有数据发送了,即关闭本方数据流。
  8. 窗口大小 16bit TCP采用滑动窗口协议(自行查资料),此子段标志窗口的大小。表示从确认号(确认已经正确接受的数据顺序号)开始,本报文的源方可以接收的字节数,即源方接收窗口大小。窗口大小是一个 16bit 字段,因而窗口大小最大为 65535
  9. 校验和 16bit 此校验和是对首部+数据的校验和。此处与IP数据报不同。这是一个强制性的字段,一定是由发送端计算和存储,并由接收端进行验证。
  10. 紧急指针 16bit 只有当 URG 标志置 1 时紧急指针才有效。紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。
  11. 选项+填充 不定长 最常见的可选字段是最长报文大小,又称为 MSS(Maximum Segment Size) 。每个连接方通常都在通信的第一个报文段(为建立连接而设置 SYN标志的那个段)中指明这个选项,它指明本端所能接收的最大长度的报文段。选项长度不一定是 32 位字的整数倍,所以要加填充位,使得报头长度成为整字数。
  12. 数据 不定长 报文段中的数据部分是可选的(即有时可以没有数据,只有TCP首部)。在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。
====================================================================================
三、UDP报文
  1. 源端口号 16bit 标识源主机的一个应用进程端口。
  2. 目的端口号 16bit 标识目的主机的一个应用进程端口。
  3. 总长度 16bit 首部长度+数据长度,单位是字节(TCP报文并没有总长度
  4. 校验和 16bit 检验UDP首部和数据部分的正确性

转载于:https://www.cnblogs.com/gmpy/p/5656550.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值