5.3.2 TCP报文段

TCP首部最短20B
确认位ACK=1表示正确收到
确认号N:到序号N-1为止的数据都已经正确收到,期望收到的第一个字节的序号N
序号:本报文段发送的第一个字节的序号
同步位SYN
SYN=1,ACK=0,连接请求报文
SYN=1,ACK=1,连接接受报文

5.3.3 TCP连接管理

TCP是端到端通信
TCP连接的端点是套接字
一条连接使用它们的套接字表示(1,x)-(2,y)是两个端口唯一的连接,后建立的连接会被阻止。

1.TCP连接建立(三次握手)

SYN=1,seq=x(随机)
SYN=1,ACK=1,seq=y(随机),ack=x+1
ACK=1,seq=x+1,ack=y+1
我能和你说句话吗?
可以
好的
SYN洪泛攻击:
一直发送SYN,不回复,导致服务器一直发送ACK,占用资源直到服务器死机。

2.TCP连接释放(四次握手)

FIN=1,seq=u
ACK=1,seq=v,ack=u+1(半关闭状态,客户到服务器方向的连接释放)
FIN=1,ACK=1,seq=w,ack=u+1(FIN表示单方面释放连接,表示本方已经无数据发送,但可以接收对方数据)
ACK=1,seq=u+1,ack=w+1
A(客户机):我说完了
B(服务器):好的,我想说。。。。
B:我说完了
A:好的
A说完话后,TCP状态变为TIME_WAIT,此时TCP连接还没有释放,还要等2MSL(2个最长报文段寿命),客户机才进入CLOSED(连接关闭)状态。

5.3.4 TCP可靠传输

1.序号

2.确认

3.重传

(1)超时重传

(2)冗余ACK

5.3.5 TCP流量控制

接受窗口:接收方根据自己接收缓存的大小,动态地调整发送方的发送窗口大小。

5.3.6 TCP拥塞控制

拥塞窗口cwnd:发送方根据自己估算的网络拥塞程度而设置的窗口值。
发送窗口上限:min[接受窗口,拥塞窗口]

1.慢开始

拥塞窗口=1,2,4,8,……

2.拥塞避免

拥塞窗口+=1

慢开始门限ssthresh是前一次拥塞的一半
cwndcwnd>ssthresh:拥塞避免
网络拥塞后:ssthresh=cwnd/2,cwnd=1
注意⚠️:慢开始不能越过ssthresh

3.快重传

发送方收到三个连续的ACK报文后,直接重传对方未收到的报文段

4.快恢复

网络拥塞后:ssthresh=cwnd/2,cwnd=ssthresh,然后拥塞避免
就是跳过了慢开始

TCP连接建立和网络出现超时时:慢开始和拥塞避免
发送方收到冗余ACK时,采用快重传和快恢复