tcp协议详解
Quote
TCP(Transmission Control Protocol:传输控制协议)
TCP协议是计算机网络中非常复杂的一个协议
TCP所处的位置
从结构上讲,TCP协议跟UDP协议都是一样的,都是由首部、数据报组成的。
TCP的特点
- TCP是面向连接的协议
- 面向连接:TCP要是通信的话,首先要建立连接
- TCP的一个连接有两端(点对点通信)
- TCP提供可靠的传输服务
- TCP协议提供全双工的通信
- 全双工:双方都可以同时发送和接收信息。例如:网线、网络都是使用全双工通信信道的
-
TCP是面向字节流的协议
TCP的首部
- 序号
-
确认号
- 大小:占32个比特位,可表示的范围是
0 ~ 2^32-1
的范围 - 释义:同序号,一个字节一个序号,这里面的确认号它主要是用于表达期望收到数据的首字节序号(如下图)。当前报文的序号是501,已知数据报总长是100,故确认号应为601(下次报文应该传输的序号)
Quote
序号与确认号小结:序号与确认号属于相辅相成。确认号为N,则表示N - 1序号的数据都已经收到。
- 大小:占32个比特位,可表示的范围是
-
数据偏移
- 大小:占4位 0 ~ 15,单位为:32位字(每一个偏移都能表示4个字节的偏移)
- 释义:真实的TCP数据偏离首部的距离,这个是由于 TCP选项(可选)、填充 块导致的。已知TCP首部的长度在排除TCP选项后为20个字节,但是如果存在TCP选项之后会导致数据偏离首部距离,具体能偏离的范围取决于数据偏移的范围(0~15, 4个字节),所以TCP首部等于15 * 4 = 60字节。故TCP首部长度为20~60字节
- TCP标记
- 窗口
- 大小:占16位,0 ~ 2^16 - 1
- 释义:窗口指明允许对方发送的数据量有多少。如果指明1000,则表示对方可以发送1000个字节给我。也可以把窗口结合确认号来计算,举例说明:比如目前的确认号是501,这个时候窗口的值是1000,那么也就是501~1500这么多个字节的数量都是可以接收的,这就是窗口的意思
- 紧急指针
- 释义:紧急数据(当URG = 1的时候才会启用),表示的是紧急数据位于报文的位置。对于TCP报文来说有部分的紧急数据是可以保存在数据报里面的,到达对方的时候对方则可以知晓紧急数据所处的位置
- TCP选项(可选)
- 大小:最多40个字节
- 释义:目的是为了支持未来的拓展
TCP的定时器
- 超时定时器:超时重传机制定时器
- 坚持定时器:解决死锁局面的,比如接收方发送给发送方一个窗口数据,但是数据未送达至发送方,导致接受方和发送当都处于等待状态(死锁)
- 当接收方收到窗口为0的消息,则启动坚持定时器
- 坚持定时器每隔一段时间发送一个窗口探测报文
- 等待定时器