【网络】TCP通讯协议里面的三次握手和四次挥手的流程!!

  • 服务器初始化的一般过程:
    • 调用socket 函数获取创建的文件描述符
    • 使用bind函数对IP和port进行绑定
    • 调用listen函数监听socket创建的文件描述符
    • 调用accept函数对客户端进行连接

客户端和服务器建立连接和断开连接的过程:
这里写图片描述

  • 三次握手
    过程:

     - 使用`socket`创建文件描述符
     - 调用connect向服务器发起连接请求
     - connect向服务器发送SYN段,并阻塞式等待服务器回应(第一次)
     - 服务器接收到客户段的SYN,会答应SYN+ACK段表示同意连接(第二次)
     - 客户端接收到服务器端发送的SYN+ACK段,同时回应一个ACK段(第三次)
    
  • 四次挥手
    过程:

     - 客户端如果请求关闭,调用`close`关闭文件描述符,同时客户端会向服务器发送FIN报文(第一次)
     - 服务器接收到客户端的FIN,会回应ACK报文,同时`read`返回0(第二次)
     - 服务器的`read`返回之后会调用`close`关闭文件描述符,同时向客户端发送FIN报文(第三次)
     - 客户端接收到服务器的FIN报文之后,回向服务器发送ACK报文(第四次)
    

  • 为什么连接是三次握手而断开连接是四次挥手?

因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,”你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值