TCP建立连接

3 月,跳不动了?>>> hot3.png

写在前面

对TCP "面向连接" 特性的学习研究。什么是面向连接? TCP为什么要进行面向连接的通信? TCP 连接建立的过程是怎样的?

 

面向连接的通信

建立连接的通信过程 : 打电话是面向连接的通信 , A 呼叫 B , B 接受并且此时 A 还没有挂断,连接建立成功, A 、B 双方正常通信。如果 B 不接受呼叫,连接无法建立 , 整个通信过程就不会成立。

无连接的通信 : 发短信是无连接的通信 , A 向 B 发短信 , A 并不知道 B 的通信状态是否一切正常(比如,手机有电、有信号、手机没丢) , 此时 A 可以不受 B 的通信状态的限制自由的发送短信给 B 。整个通信过程不需要建立连接就可以实现。

 

面向连接通信的优点、缺点

优点 : 可靠性高

缺点 : 为了对可靠性做出保障,整个过程十分复杂 (鱼和熊掌不可兼得,最重要的是找到平衡)

 

TCP 状态码

S指代服务器,C指代客户端,S&C表示两者,S/C表示两者之一 。

LISTEN - S : 服务器等待从任意远程TCP端口的连接请求。侦听状态。

SYN-SENT - C : 客户端在发送连接请求后等待匹配的连接请求。客户端向服务器发出一个同步(SYNC)信号后进入此状态。

SYN-RECEIVED - S : 服务器已经收到客户端的同步(SYNC)信号,并发送同步(SYNC)信号之后等待客户端确认(ACK)请求。

ESTABLISHED - S&C : 服务端与客户端的连接已经打开,服务端收到的数据可以发给应用层。数据传输步骤的正常情况。此时连接两端是平等的。这称作全连接。

FIN-WAIT-1 - S&C : (服务端或客户端)主动关闭发出FIN请求包,表示本方的数据发送全部结束,等待TCP连接另一端的ACK确认包或FIN&ACK请求包。

FIN-WAIT-2 - S&C : 主动关闭端在FIN-WAIT-1状态下收到ACK确认包,进入等待远程TCP的连接终止请求的半关闭状态。这时可以接收数据,但不再发送数据。

CLOSE-WAIT - S&C  : 被动关闭端接到FIN后,就发出ACK以回应FIN请求,并进入等待本地用户的连接终止请求的半关闭状态。这时可以发送数据,但不再接收数据。

CLOSING - S&C : 在发出FIN后,又收到对方发来的FIN后,进入等待对方对己方的连接终止(FIN)的确认(ACK)的状态。少见。

LAST-ACK - S&C : 被动关闭端全部数据发送完成之后,向主动关闭端发送FIN,进入等待确认包的状态。

TIME-WAIT -  S/C : 主动关闭端接收到FIN后,就发送ACK包,等待足够时间以确保被动关闭端收到了终止请求的确认包。

CLOSED - S&C : 完全没有连接。

 

TCP 三次握手建立连接

                     

连接建立的过程总共需要进过三次通信,三次通信都成功之后连接建立成功。三次通信是为了确认通信双方的状态都正常才会建立连接。就像是打电话的过程。

连接建立过程抓包分析:

              

 

客户端发起连接 , SYN = 1 

           

 

服务端接收到连接请求发送应答数据包 , SYN = 1 , ACK = 1 

         

 

客户端收到服务端应答包后发送应答包 , ACK = 1