20. 从编程方面分析三次握手过程


前面分析过了理论的三次握手的过程以及为什么需要三次握手, 本节我们再以socket编程的方面分析三次握手的过程.


从编程角度分析三次握手

在这里插入图片描述
三次握手, 三个函数, 分别是listen, connectaccept.

服务端调用listen函数一直监听网络中有没有要与服务端连接的客户端, 并且**listen初始化未决连接队列**.

未决连接队列分为未完成连接队列已完成连接队列, 这里是我统一的简称, 为了说明方便.

  • 未完成连接队列 : 服务端还未完成三次握手全部过程的一个队列.

  • 已完成连接队列 : 服务端已经完成三次握手全部过程的一个队列, 等待accept函数从这个队列中返回下一个已连接的(返回其实是取出, 该套接字不在已完成队列中了)套接字.

    注意 : 两个队列总和的个数都不超过listen函数设置的值.

以下较为重要的地方用加粗提醒

  1. 客户端使用connect函数向服务端发送连接请求, 服务端调用listen监听到有连接到来并且连接队列没有满, 就将此连接加入未完成连接队列中, 并且初始化ISN后向客户端发送ACK确认.
  2. 当客户端调用connect函数, 等待收到确认后 connect函数才返回返回正确的值并确认, 此时服务端也收到ACK后, 将连接从未完成连接队列移动到已完成连接队列中.
  3. 服务端调用accept函数检测到已完成连接队列中有连接时停止阻塞, 从已完成队列中取出就绪连接并返回, 从而两端开始进行通信.

ok! 相信大家已经看完了三次握手的基本过程了, 下面对几个重要的地方做实验验证也是大家容易忽略的地方.

1. connect什么时候返回

认真看过前面的应该能够知道connect是收到

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值