三次握手与Socket API

什么是三次握手?

所谓三次握手其实指的是三次信息交换过程,三次信息交换完毕后我们就可以认为一个“连接”建立好了,那么什么是一个“连接”呢?

一个连接唯一确定了发送方和接收方,除此之外一个连接还确定了双方“说话的方式”,三次握手规定:双方在说话前都要加一个数字,该数字用来记录这是彼此的第几句话了,比如:

A: 1,今天天气不错啊
                  1,对啊 :B
                  2,明天天气也不错 :B
A:  2,不过好像明天有雨
A:  3,而且明天还要加班
A:  4,不想上班 :(
                  3, 我明天休假啦 :B
                  6, 下班啦 :B
                  4, 今天可以早点撤 :B
                  5, 开心 :B           

从这里我们可以看出双方说话前都报上这是自己说的第几句话,当然在真实情况下只有无聊到极点的人才会在微信里用这种方式聊天。但是微信所依赖的网络通信协议其实就用这种看上去略显神经质的方式在彼此通信,有的同学可能已经看出来了,这种方式的好处在于可靠性

从上面的聊天中我们可看到,B最后说的几句话可能因为网络问题出现了乱序,但A依然知道该怎么阅读B发过来的信息,原因就在于每一句都带有编号,A可以依照编号的顺序而不是接收数据的顺序进行阅读,这就是每句话加编号的作用。

真实的网络协议双方的第一句话都不是从1开始的,三次握手的目的就在于协商双方最开始的数字是几,比如A和B说:“我的信息序号从X开始”,B对A说:“我的信息序号从Y开始”,此后双方在X和Y的基础上每说一句就加1,以此来确保通信的可靠性。

那么什么网络协议需要依赖三次握手交换说话序号来确保可靠性呢,答案就是网络通信协议中的TCP,只有TCP协议在通信前才需要进行三次握手彼此交换起始序号。

那么UDP协议在双方通信前需要三次握手吗?当然是不需要的,UDP协议不负责通信的可靠性,依赖UDP的通信双方无需三次握手就可以直接发送数据。

本文的关注重点在TCP协议,以下内容都是关于TCP协议的,这一点要注意。

 

为通信加上序号的重要性

TCP规定接收方需要对接收到的数据进行回复确认,也就是发送ACK,发送方接收到ACK后就知道接收方确实已经收到信息了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值