TCP协议
TCP协议的特点
-
TCP协议时面向连接(虚连接)的传输层协议。
-
每一条TCP连接只能有两个端点,每一条TCP连接是点对点的。
-
TCP提供可靠交付的服务,无差错、不丢失、不重复、按序到达。可靠有序,不丢不重
-
TCP提供全双工通信。
a. 发送缓存:准备发送的数据&已经发送但是尚未收到确认的数据。
b. 接收缓存:按序到达,但是还未被应用程序接收的数据&未按序到达的数据。
-
TCP面向字节流。 应用程序将数据看成一连串的,无结构的字节流。
TCP报文段首部格式
-
源端口:发送端端口号,0~65535。
-
目的端口:接收端端口号,0~65535.
-
序号:在一个TCP连接中传输的字节流中的每一个字节都按照顺序编号,本字段表示本报文段所发送数据的第一个字节的序号。
-
确认号:期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则证明到序号N-1为止的所有数据都已正确接受。
-
数据偏移:因为TCP除了固定的20B首部之外,还有选项与填充字段,因此需要数据偏移位指定TCP数据报首部至数据部分的长度。因为TCP数据报为4B的整数倍,不足部分填充0,因此偏移1位代表4B。15 * 4B = 60B,首部最长为60B。
-
保留:保留位。
-
六个控制位
1)紧急位URG:URG=1时,表明此数据报有紧急数据,是高优先级数据,应尽快发送,不用在发送端缓存队列排队,配合紧急指针使用。
2)确认位ACK:ACK=1时确认号有效,在连接建立后,所有传送的数据报都需要把ACK置为1.
3)推送位PSH:PSH=1时,表明此数据报应该尽快交付给接收端的应用程序,不用等缓存填满之后再向上交付。
4)复位RST:RST=1时,表明TCP连接出现了严重错误,需要断开连接之后,再重新连接。
5)同步位SYN:SYN=1时,表明这是一个连接请求/连接接受报文。
6)终止位FIN:FIN=1时,表明报文的发送方已经发送完数据,要求释放连接。
- 窗口:指的发送本报文段的一方的接收窗口,即允许对方发送的数据量。
- 校验和:伪首部+首部+数据部分。第四个字段为6.
- 紧急指针:URG=1才有效,紧急数据的末尾,紧急数据为数据报头至紧急指针的中间部分。
- 选项:最大报文长度MSS、窗口扩大、时间戳、选择确认。。。。
TCP连接管理
TCP连接的三个阶段,连接建立->数据传输->连接释放。
客户服务器方式。
三次握手
-
客户端主动发起请求,请求建立连接,SYN=1,因为此数据报是第一条数据,因此没有确认位。无应用层数据
SYN=1 seq=x(随机)
-
服务器接受到客户端发送的请求,为该连接分配缓存与变量,并向客户端返回确认报文段,允许连接。无应用层数据
SYN=1 seq=y(随机) ACK=1 ack=x+1(因为客户端发送时没有数据,因此期望收到下一个序号为x+1)
-
客户端收到服务器发送的连接确认,客户端为该连接分配缓存与变量,开始向服务器返回确认的确认。可携带数据
SYN=0 ACK=1 seq=x+1 ack =y+1
四次挥手
-
客户端发送完毕数据,请求释放连接。
FIN=1,seq=u
-
服务器接收到连接终止信号,需要确认其收到连接释放信号,因为释放连接不带数据,因此ack为seq+1。半关闭状态
ACK=1,ack=u+1,seq=v
-
服务器将剩余数据发送完毕之后,请求释放连接,主动关闭TCP连接。
FIN=1,ACK=1, ack=u+1,seq=w
-
客户端回复一个确认释放连接报文,等待计时器到设置的2MSL(最长报文寿命),连接彻底关闭。
可靠传输
可靠:保证接收方从缓存区读出的字节流与发送方发出的字节流完全一样。
- 校验:伪首部
- 序号:字节编号
- 确认:确认序号,保证之前序号的字节都已收到,累计确认
- 重传:确认重传不分家,超时重传;TCP采用自适应算法,动态改变重传时间RTTs(加权平均往返时间)
- 冗余ACK,当收到超过3个冗余ACK时,即进行重传。
TCP流量控制
流量控制:让发送方慢点,要让接收方来得及接收。
TCP利用滑动窗口机制,实现流量控制。
在通信过程中,接收方根据自己接收缓存的大小,动态调整发送方的发送窗口大小,即接收窗口rwnd(接收方通过设置确认报文的窗口字段,来将rwnd通知发送方),发送方的发送窗口取接收窗口与拥塞窗口的最小值。
TCP为每一个连接设置持续计时器,只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。
如果计时器到期了,就发送一个零窗口探测报文段。
若窗口还是0,则重新计时。
TCP拥塞控制
出现拥塞的条件:
对资源的需求总和>可用资源
网络中有许多资源同时呈现供应不足->网络性能变差->网络吞吐量将随着输入负荷增大而下降
拥塞控制:
防止过多的数据注入到网络中。全局性
拥塞控制四种算法
假定:
-
数据单方向传送,而另一个方向只发送确认。
-
接收方总是有足够大的缓存空间,因而发送窗口仅仅取决于拥塞窗口。
发送窗口=min
接收窗口:接收方根据接受缓存设置的值,并告知发送方,反映接收方容量。
拥塞窗口:发送方根据自己估算的网络拥塞程度而设置的窗口值,反映网络当前容量。
慢开始 拥塞避免
纵坐标:1代表一个最大报文长度MSS
横坐标:1代表一个传输轮次,一个往返时延RTT。
- 从1开始,即慢开始,指数增大,当达到门限值,线性增大。
- 超时重传,达到拥塞最大值,降为1,重新指数增大开始,门限值降为一半。
快重传 快恢复
- 快重传:当收到重复的3个冗余ACK,快速重传而不等超时计时器超时。
- 快恢复:拥塞发生时,不再降低到1个拥塞窗口,而是把窗口降低为阈值的一半,线性增大。