TCP传输过程大致可分为三个阶段:建立连接、传输数据、断开连接
一:建立连接(即三次握手)
浅谈:
第一次握手:客户端向服务器发送连接请求(在吗?)
第二次握手:服务器对客户端想建立连接应答,服务器向客户端发送连接请求(在的。在吗?)
第三次握手:客户端对服务器想建立连接应答(在的。)
深谈:
先了解在标志位中的三个位:同步位(SYN)、确认位(ACK)、结束位(FIN)
SYN:=1时,表示建立一次连接
ACK:=1时,表示一次应答
FIN:=1时,表示结束连接
再了解序列号(seq)与确认号(ack)的含义:
seq:追踪该端成功发送的数据量(数据位数)
ack:通知发送端数据接收成功,为该端成功接收的数据量。
第一次握手:SYN=1,seq=x(客户端随机产生的x),ack=0.
第二次握手:ACK=1、SYN=1,seq=y(服务器端随机产生的y),ack=x+1
(SYN与FIN占一位,上面的x+1表示ACK占一位,此时无有效数据传送)
第三次握手:ACK=1,seq=x+1,ack=y+1。
(该数据包中序列号为上一个同步请求数据包中的确认号,确认号为上一个同步请求数据包中的序列号+SYN的1<数据传输时这里加的是传输的数据位数>)
二:传输数据(举例传了3次)
第一次传输:这是流中第一个携带有效数据的数据包,序列号与确认号与第三次握手保持一致
假设客户端给服务器传了500个字节,(seq=x+1,ack=y+1,)
服务器给客户端应答ACK=1,seq=y+1,ack=x+501,
第二次传输:
假设服务器给客户端传了600个字节(seq=y+1,ack=x+501)
客户端给服务器应答ACK=1,seq=x+501,ack=y+601,
第三次传输:
假设服务器给客户端传了1000个字节(seq=y+601,ack=x+501)
客户端给服务器应答ACK=1,seq=x+501,ack=y+1601;
三:断开连接(即四次挥手)
浅谈:
第一次挥手:客户端发送断开连接请求(我不发了)
第二次挥手:服务器对客户端发送的断开连接请求应答(我不收了)
第三次挥手:服务器对客户端发送断开连接请求(我也不发了)
第四次挥手:客户端对服务器发送的断开连接请求应答(我也不收了)
深谈:
第一次挥手:FIN=1,seq=x+501,ack=y+1601
第二次挥手:ACK=1,seq=y+1601,ack=x+502(FIN占一位)
第三次挥手:FIN=1,ACK=1,seq=y+1601,ack=x+502
第四次挥手:ACK=1,seq=x+502,ack=y+1602(FIN占一位)