想要深入的了解tcp的话不妨来看看tcp的报文格式,想清楚它是如何利用这个报文格式进行连接和差错控制的吧
报文格式
解释
-
端口号 端口是一个计算机与外部交互的窗口。原端口表示发送者的端口号,目的端口代表接受者的端口号
-
序号 用来标识当前数据流的序号,传输层的数据是以字节流传输的,用序号来表示当前报文的数据的顺序
-
确认号 是期待发送者下一个发送字节流的序号,确认号 = 已接收的序号 + 1,ACK = 1 时确认号有效
-
数据偏移 也称首部长度,即报文首部的长度也代表者报文数据的起始点。由于首部的长度是不固定的,有着可选项,此时一个数据偏移能直接计算出数据的位置是非常有必要的
-
保留 保留6的大小空间以供以后格式扩充,目前一般置为0
-
URG 积极位,说明报文中有重要数据应尽快传输,一般配合紧急指针使用
-
ACK 确认位,ACK = 1 时,确认号有效。TCP规定在建立连接后的所有报文 确认号 = 1
-
PSH (push)推送位,PSH = 1 时,报文中的数据不需要等待缓存满才推送,而应直接交付应用层
-
RST (reset)复位位,RST = 1,RST = 1 时,TCP重新连接
-
SYN 同步位,SYN = 1,ACK = 1 时 表示当前报文是一个请求连接报文。
- 若对方同意连接,回复 SYN = 1,ACK = 1
-
FIN (finsh)终止位,FIN = 1时,要求释放连接
-
窗口 允许发送方发送的数据大小
-
校验和 报文+伪首部=校验和,报文=首部+数据
-
紧急指针 URG = 1 时,指针有效
-
选项 报文需要的可选项,如最大报文长度
-
填充 填充数据使得首部的长度为4B的整数倍