tcp报头
tcp字段解析
-
源端口号:16位,表示发送方的端口号,用于标识发送方的应用程序。
-
目标端口号:16位,表示接收方的端口号,用于标识接收方的应用程序。
-
序列号:32位,用于标识从TCP源端向目的端发送的数据字节流,确保数据的顺序和完整性(假设一个TCP段的序列号为100,这个段携带了10个字节的数据。那么,这个段的序列号范围是100到109。接收方收到这个段后,会发送一个确认应答,确认号为110,表示期望接收下一个字节的序列号为110。如果发送方接下来发送了20个字节的数据,那么新的TCP段的序列号将从110开始,直到129。)。
-
确认应答号:32位,期望收到的下一个字节的序号,用于确认收到的数据。
-
数据偏移:4位,表示TCP头部的长度,即TCP头部有多少个32位字(4字节)。
-
保留:6位,为将来的使用保留,目前必须设置为0。
-
控制位:6位,用于控制TCP连接的状态,包括:
- URG:紧急指针字段有效。
- ACK:确认应答字段有效。
- PSH:接收方应该尽快将这个报文交给应用层。
- RST:重置连接。
- SYN:同步序列编号,用于建立连接。
- FIN:发送方没有数据要发送了,希望断开连接。
- 窗口大小:16位,表示接收方的缓冲区大小,用于流量控制。
-
校验和:16位,用于错误检测,确保数据在传输过程中没有被篡改。
-
紧急指针:16位,当URG标志位为1时,该字段有效,指出紧急数据的结束位置。
-
选项:长度可变,用于提供额外的功能,如最大报文段长度(MSS)、窗口扩大因子、时间戳等。
-
填充:确保TCP头部是32位的整数倍,如果必要的话。
-
数据:TCP头部之后是实际传输的数据。
总结
-
面向连接:TCP是面向连接的协议,这意味着在数据传输开始之前,必须在通信双方之间建立一个连接。
-
可靠性:TCP通过使用确认和重传机制确保数据包的可靠传输。如果数据包丢失或损坏,接收方会要求发送方重新发送。
-
有序性:TCP保证数据包按照发送的顺序到达接收方。它使用序列号来确保数据包的顺序,并在接收时重新组装。
-
流量控制:TCP使用窗口大小来控制数据流,防止发送方发送数据过快,导致接收方处理不过来。
-
拥塞控制:TCP能够检测网络拥塞并相应地调整数据传输速率,以避免网络过载。
-
全双工通信:TCP允许数据在两个方向上同时传输,即通信双方可以同时发送和接收数据。
-
错误检测:TCP头部包含校验和字段,用于检测数据在传输过程中的错误。
-
多路复用:TCP允许多个应用程序或进程共享同一个网络连接。
-
选项和填充:TCP头部可以包含选项字段,用于扩展TCP的功能,如最大报文段长度(MSS)、窗口扩大因子、时间戳等。填充用于确保TCP头部是32位的整数倍。
-
连接管理:TCP使用三次握手来建立连接,使用四次挥手来终止连接,确保连接的建立和终止都是可靠的。
-
字节流服务:TCP提供面向字节流的服务,这意味着它不保留消息边界,应用程序需要自行处理消息的边界。