最代码广告位
hadoopCJ的gravatar头像
hadoopCJ2019-09-25 13:40:20
TCP三次握手那些事儿

最近,一天下班没啥事,几个老哥谈起来最近新来公司的几个新人,说到了一个面试题,问他们TCP的3次握手咋回事,几个人支支吾吾也没答个所以然,我自己一想,自己好像也都忘了,于是又回过头去炒了一顿回锅饭,正好做个记录吧。我们都知道TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP也是日常通讯中用的最广泛的一种协议,TCP的连接需要三次握手。为了便于大家理解,我在网上随便找了个原理图。

话不多说。三次握手,我来解释一下。

第一次握手:我们给服务器发消息“喂。老哥,咱两建个链接呗”,我们做这个动作是想证明,我们有没有发消息的能力,怎么证明呢,需要服务器把我们发的消息回传回来。

第二次握手:服务器告诉我们“好呀,来啊,来啊”,同时再把我们发的消息回传给我们。这个时候我们就可确定,我们发消息的能力是没有问题的,同时服务器也需要通过这次握手来确定自己的发消息能力。也就是这次握手确定了我们的发消息能力,需要确定的是服务器的发消息能力。

第三次握手:我们告诉服务器“得嘞,我马上就到,等我哟”。这时候服务器就确定了自己的发消息能力是没有问题的,于是你们就可以愉快的玩耍了。

名词解释:SYN:synchronous建立联机   ACK:acknowledgement 确认

原理图解释:

第一次握手:我们发送一个SYN=1,seq=x(x是随机数字的意思)的数据包,服务器看到我们发过来数据包,就知道你要跟他建立链接。

第二次握手:服务器发给我们一个SYN=1,seq=y,ACK=x+1。服务器发送前两个数据是为了确认自己的发消息能力,第三个数据在我们的seq上加1,以确认建立的是同一个链接。

第三次握手:我们只需要向服务器发送一个ACK=y+1,服务器便可以确认自己的发送能力了。

 


打赏

已有3人打赏

lczd888的gravatar头像Ckxlnd的gravatar头像最代码官方的gravatar头像

分享到:

最近浏览
cometcc昨天
暂无贡献等级
与哲rhcy LV411月7日
月亮
shanjunkai123 LV211月5日
星星星星
1225086246 LV311月4日
星星星星星星
暂无贡献等级
yisita LV411月1日
月亮
北京时间五点整 LV710月31日
月亮星星星星星星
chiaki10月28日
暂无贡献等级
西红柿爱炒番茄 LV210月28日
星星星星
KID星心 LV110月28日
星星
最代码广告位
顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友