socket传输数据的流程

image-20221026183904345

服务器:

在客户端发起连接请求之前,服务端必须初始化好。

  1. 初始化socket
  2. 执行bind函数,将服务与IP端口绑定。
  3. 执行listen ,将原来的socket转化为服务端的socket
  4. 服务器阻塞在accept上等待客户端请求的到来。

客户端:

此时服务端已经准备就绪。

  1. 客户端初始化socket
  2. 执行connect向服务端的IP端口发起连接请求(三次握手)

一旦握手完成,客户端和服务端建立连接,就可以进行数据传输。

一旦连接建立,数据的传输就不再是单向的,而是双向的(即全双工)

关闭:

当客户端需要与服务端断开连接时,执行close函数,操作系统会向服务端发送一个FIN包;服务端收到执行后被动关闭,这时整个数据链路处于半关闭状态;此后服务端也会执行close函数,整个数据链路才会真正的关闭。

半关闭状态下,发起close的一端在没有收到对端发来的FIN报文之前都认为连接是正常的;全关闭状态,双方都感知到连接已经关闭。


zhaobuqi
1 声望1 粉丝

« 上一篇
tcp--Keep-Alive
下一篇 »
channel