php socket的三次握手,socket中TCP的三次握手建立連接&四次握手釋放詳解

本文详细介绍了TCP的三次握手建立连接的过程,包括客户端发起SYN请求,服务器响应SYN并确认,以及客户端的最终确认。同时,解释了TCP四次挥手释放连接的步骤,从应用进程调用close开始,直到双方都确认关闭。
摘要由CSDN通过智能技术生成

A.TCP建立連接要進行"三次握手",也就是交換三個分組。大致流程如下:

>客戶端向服務器發送一個SYN J

>服務器向客戶端響應一個SYN K,並對SYN J進行確認ACK J+1

>客戶端再向服務器發一個確認ACK K+1

當客戶端調用connect時,觸發連接請求,向服務器發送了SYN J包,這時候connect進入阻塞狀態(等待服務器回復應答);

服務器監聽到連接請求,也就是收到了SYN J包,服務器調用accept函數接收請求向客戶端發送SYN K,ACK+1,這時accept進入阻塞狀態;

客戶端收到服務器的SYN K,ACK J+1之后,這時connect返回,並對SYN K進行確認;

服務器接收到ACK K+1時,accept返回,至此三次握手完畢,連接建立

總結:客戶端的connect在三次握手的第二次返回,而服務器端的accept在三次握手的第三次返回

三次握手發生的時間點就是在客戶端與服務器端建立連接的時候發生的

B.socket中TCP的四次握手釋放連接詳解

前提一定客戶端的進程與服務器端的進程建立了連接(這話說的比較多余--!)

>某個應用進程首先調用close主動關閉連接,這時候這個應用程序的一側發送FIN M包;

>另一端接收到FIN M之后,執行被動關閉,對這個FIN進行確認。它的接收也作為文件結束符傳遞給應用進程,因為FIN的接收意味着應用進程在相應的連接上再也接收不到額外數據;同事會回復一個ACK M+1

>一段時間之后,接收到文件結束符的應用進程調用close關閉它的socket。這導致它的TCP也發送了一個FIN N;

>接收到這個FIN的源發送端TCP對其確認,確認后回復ACK N+1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值