hadoopCJ的gravatar头像
hadoopCJ 2019-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头像
最近浏览
刘先生-OL  LV13 2022年11月21日
crazy11crazy  LV30 2021年6月21日
噜噜噜路口  LV2 2021年6月16日
liupengfei  LV7 2021年3月5日
水光浮藻  LV6 2021年3月4日
java小书童  LV17 2021年1月6日
lininj 2020年7月31日
暂无贡献等级
admin1021  LV6 2020年7月24日
大朗丶起来喝药了  LV4 2020年5月8日
zzctest  LV1 2020年4月20日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友