tcp报文格式

tcp报文格式

tcp报文格式

Source Port,Destination Port:
源端口号,目标端口号。IP实现了点到点的数据通信,而TCP实现的是端到端的通信。通信端用一个IP与端口号来唯一标识。(其实端口号就是用来标识同一主机中的不同进程。)IP协议负责将数据传输到目标主机,而TCP可以根据数据报中的端口号,将数据交给相应的程序进行处理。

Sequence Number:
发送序列号。IP实现点到点的通信,这种通信是不可靠的。IP数据报可能会丢失或乱序到达目标主机,而TCP提供一种可靠的通信方式。它通过对发送的数据报进行编号(准确的说应该是对数据流进行编号)来实现可靠通信。如:应用程序发送2048个字节数据到目标主机,TCP协议首先将这些数据报打包成一个一个的数据报,然后对其进行编号。假设每个数据报携带的数据的长度是100个字节,第一个数据报的编号是1, 那么第二个数据报的编号就是101,第三个的编号是201,以此类推。

Acknowledgment Number:
确认序号。对于发送端来讲,这个序号表示下一个tcp报文的起始序号,对于接收端来讲,表示下一个希望接收到报文的序号。

Data Offset:
该字段占用4个字节,用来表示报文首部的长度,单位是4byte。例如:0x05 表示 报文的首部长度是 5 * 4 = 20个字节。

Reserved:
该字段占用6个字节,作为保留字段,暂时没有什么用处。

标志位
后面是六个标识位(uaprsf,记得每个单词的首字母):

  1. URG(ent): 如果该位置为1,表示该报文比较紧急,要赶紧传输。
  2. ACK:确认序号。跟上面的Acknowledgment Number有点关系。只有该位置为1时,Acknowledgment Number才有效。
  3. PSH:push,推。表示接到报文后,要赶紧传递给应用层。
  4. RST: reset,重置连接。
  5. SYN: 同步。在创建连接的时候,用到该标识位。
  6. FIN:终止。在释放连接的时候,用到该标识位。

Window:
滑动窗口的大小。用于通信双方的流量控制。为了保证通信的可靠性,TCP对报文进行编号,然后发送。接收方收到报文后,要向发送方进行确认。一般情况下,发送方不是在收到确认消息之后才发下一个报文,这样网络的利用率太低,而是在没有收到确认消息时,可以发送的数据是有个最大上限。

Checksum:
对报文进行校验。如果校验失败,就丢弃该报文。

Urgent Pointer:
智能针针。具体我还不清楚,网上一些资料的解释是:指向后面是优先数据的字节。

Options:
选项。当前tcp只定义了一个选项:最大报文段长度。它用于告诉通信的另一方,当前协议框缓冲区所能接收到报文段的最大长度。

Padding:
填充段。确保报文头的长度能为32整除。