天天看点

物联网LWIP网络开发 TCP/IP原理 9.3 TCP协议原理TCP协议原理

TCP协议原理

TCP 报文

报文封装

物联网LWIP网络开发 TCP/IP原理 9.3 TCP协议原理TCP协议原理

报文结构

物联网LWIP网络开发 TCP/IP原理 9.3 TCP协议原理TCP协议原理

源端口和目标端口

每个 TCP 报文段都包含源主机和目标主机的端口号,用于寻找发送端和接收端应用线程,这两个值加上 I P 首部中的源 I P 地址和目标 I P 地址就能确定唯一一个 TCP 连接。

序号

序号字段用来标识从 TCP发送端向 TCP 接收端发送的数据字节流, TCP 协议会对发送或者接收的数据进行编号(按字节的形式),那么使用序号对每个字节进行计数,就能很轻易管理这些数据。序号是 32 bit的无符号整数。

首部长度

首部长度字段占据 4bit空间,它指出了 TCP 报文段首部长度,以字节为单位,最大能记录 15*4=60 字节的首部长度

标志字段

  • URG:首部中的紧急指针字段标志,如果是 1 表示紧急指针字段有效。
  • ACK:首部中的确认序号字段标志,如果是 1 表示确认序号字段有效。
  • PSH:该字段置一表示接收方应该尽快将这个报文段交给应用层。
  • RST:重新建立 TCP 连接。
  • SYN:用同步序号发起连接。
  • FIN:中止连接。

窗口大小

TCP 的流量控制由连接的每一端通过声明的窗口大小来提供,窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端正期望接收的数据序号,发送方根据窗口大小调整发送数据,以实现流量控制。窗口大小是一个占据 16 bit空间的字段,因而窗口最大为 65535 字节,当接收方告诉发送方一个大小为 0 的窗口时,将完全阻止发送方的数据发送

校验和

检验和覆盖了整个的 TCP 报文段:TCP 首部和 TCP 数据区域,由发送端计算和填写,并由接收端进行验证。

紧急字段

只有当 URG标志置 1 时紧急指针才有效,紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。简单来说,本 TCP 报文段的紧急数据在报文段数据区域中,从序号字段开始,偏移紧急指针的值结束

选项字段

物联网LWIP网络开发 TCP/IP原理 9.3 TCP协议原理TCP协议原理

kind=2,最大报文段长度(MSS)选项

TCP连接初始化时,通信双方使用该选项来协商最大报文段长度。TCP模块通常将MSS设置为(MTU-40)字节(减掉的这40字节包括20字节的TCP头部和20字节的IP头部)。这样携带TCP报文段的IP数据报的长度就不会超过MTU(假设TCP头部和IP头部都不包含选项字段,并且这也是一般情况),从而避免本机发生IP分片。对以太网而言,MSS值是1460(1500-40)字节
           

kind=3,窗口扩大因子选项

TCP连接初始化时,通信双方使用该选项来协商接收窗口的扩大因子。在TCP的头部中,接收窗口大小是用16位表示的,故最大为65535字节,但实际上TCP模块允许的接收窗口大小远不止这个数(为了提高TCP通信的吞吐量)。窗口扩大因子解决了这个问题。
假设TCP头部中的接收通告窗口大小是N,窗口扩大因子(移位数)是M,那么TCP报文段的实际接收通告窗口大小是N*2M,或者说N左移M位。
           

TCP抓包分析

物联网LWIP网络开发 TCP/IP原理 9.3 TCP协议原理TCP协议原理

继续阅读