介绍
TCP
服务的特点,TCP
报文的结构,TCP
的状态转移,TCP
对于流的控制机制(TCP
的拥塞控制)
TCP
的特点: 可靠的,面向连接的传输层协议,TCP
是一种基于数据流的协议,UDP
是一种基于数据包的协议,两种的区别如下:TCP
头部结构如下: 解释一下比较重要的几个数据:- 源头端口号: 对应发送数据的进程
- 目的段口号: 对应接受数据的进程
- 序号: 建立连接的时候分配一个初始的序号,之后传输的数据报的序号就是在当前字节流中的偏移量加上初始序号
- 确认号: 接收方发送给发送方的,发送方发送过来的序号加上
1
就是确认号 - 头部长度
URG
: 是否使用紧急指针,ACK
: 确认报文,表示确认号是否有效,PSH
: 表示高速接受方尽快处理缓冲区中的数据,RST
: 复位连接,SYN
: 建立连接,FIN
: 表示结束连接- 窗口大小: 流量控制的一个手段,这里是指的
RWVD
告诉接受缓冲区中的剩余容量 - 紧急指针: 一个偏移量,表示紧急数据的位置
TCP
: 的头部选项,有很多作用并且格式相对来说比较固定,可以见P34
TCP
连接的建立和关闭,三次握手和四次挥手:- 上图中,客户端接收到来自服务器端的
FIN
之后就会进入半关闭状态,经过2MSL
就会关闭连接,MSL
表示TCP
数据报存在的时间 - 如果由于网络原因可能发生
TCP
的连接超时,连接超时就会导致重试,一般来说重试的时间由内核参数规定 TCP
状态转移图,注意是TCP
两端分别的状态转移图形,可以使用netstat
命令查看TCP
状态:- 三次握手,四次挥手的过程中
TCP
连接状态的变化如下: TIMEWAIT
状态存在的作用: 可靠的终止TCP
连接(接受所有迟到的数据报),保证让迟到的数据报有足够的时间被识别并且丢弃- 复位报文段出现的情景: 访问不存在的端口,异常终止连接,处理半打开连接(比较复杂)
TCP
交互数据流: 发送的数据很少,接收方对于每一个数据报都会发送确认报文,TCP
成块数据流: 一次发送大量数据,接收方批量进行数据的确认- 带外数据(也就是
TCP
中的紧急数据) TCP
的超时重传: 区分连接的超时重试,表示没有接收到数据报的确认需要之后的重传TCP
拥塞控制: 最终需要控制 ->SWND
(也就是一次发送的数据),需要依赖于RWND
和CWND
(拥塞窗口),根据拥塞窗口的大小来控制拥塞,最终关系:RWND = min(CWND , SWND)
即可- 实现措施: 当没有发生拥塞的时候: 慢启动和拥塞避免, 真正发生拥塞的时候: 快速重传和快速恢复操作(详细的说明可以参考 《计算机网络:自顶向下方法》》)