5.9 TCP的运输连接管理

5.9.1 TCP的连接建立

1.TCP连接建立解决了什么问题?
(1)确知对方的存在
(2)协商参数
(3)对运输资源进行规划与分配

2.TCP的C-S连接模式
TCP连接采用客户服务器的方式,主动发起连接建立的应用进程叫客户,被动等待连接建立的应用进程叫服务器。

3.TCP三次握手的过程
(1)客户进程向服务器进程发送一个SYN = 1(此时ACK = 0)的报文段,同时选择一个初始序号x。TCP规定,SYN = 1的报文段不能携带数据,但要消耗掉1个序号。
(2)服务器进程收到请求报文段后,同意建立连接, 返回一个确认报文段,SYN = 1且ACK = 1,确认号ack = x+1。(TCP规定,ACK报文段可以携带数据,但如果不携带数据则不消耗序号。在这种情况下,下一个数据报文段的seq = x+1) 服务器同时选择一个初始序号y。
(3)客户进程收到服务器进程后,还要给服务器进程确认(如果不给确认,就会使得不断虚假请求耗尽服务器资源的攻击手段成为可能),确认字段ACK = 1, ack = y+1, seq = x+1

小结:
(1) 参数关系
-> : SYN = 1,seq = x (同步)
<- : ACK = 1, ack = x+1(确认)
SYN = 1, seq = y (同步)
-> :ACK = 1, ack = y+1(确认)
seq = x+1

(2) 状态关系
客户进程:CLOSED->SYN
-> : SYN = 1,seq = x (同步)
服务进程:LISTEN->SYN
<- : ACK = 1, ack = x+1(确认)
SYN = 1, seq = y (同步)
客户进程:SYN->EST
-> :ACK = 1, ack = y+1(确认)
seq = x+1
服务进程:SYN->EST

5.9.2 TCP的连接释放
(1)客户进程首先发送一个FIN = 1的数据报,不妨设其seq = u(发送最后一个字节序号+1)(TCP规定FIN报文段即使不携带数据,也要消耗1个序号)
(2)服务器进程收到连接释放请求报文后就予以确认,ACK = 1, ack = u+1, seq = u
(3)服务器进程再发送一个FIN = 1的数据报,seq = w(因为这段时间服务器可能还有数据要发送),ACK = 1, ack = u+1
(4)客户进程对服务进程发送一个断开连接确认报文,ACK = 1, ack = w+1, seq = u+1

小结:
参数关系
->: FIN = 1, seq = u
<-: ACK = 1, ack = u+1, seq = v
<-: ACK = 1, ack = u+1, seq = w
FIN = 1
->: ACK = 1, ack = w+1, seq = u+1

上一篇:torch安装包指定torch和cuda版本


下一篇:什么是机器学习| 学习笔记