再议三次握手

再议三次握手

tcp连接的三次握手和四次挥手,可以说是很多人的惯性认知了,在网上很多人的文章啊博客啊,视屏教程,还有大学老师的授课中也会这样说,tcp的三次握手,这也是面试可以说是必考的题目。然后呢在2019-9-12的夜里突然想到这个问题,这个三次握手到底是怎么回事,怎么会有三次握手呢,我的老师有一句话我记得很清楚,计算机的很多东西都是人类社会的映射,结合实际的生活经验可以理解很多东西,比如数据结构中的队列啊,栈,二叉树,面向对象啊,抽象,继承之类的显然都是,但三次握手是怎么回事,如果以握手来做比为什么是三次,和一个人握三次手这显然是,非常不符合现实逻辑的。那么下面帮大家回顾在一下tcp连接的过程,已经很熟悉的完全可以跳过下面这段

tcp的连接过程

在tcp要建立连接的时候发送方一般是客户端client,接受方一般是服务端server,下面都以这两个为例,

  • client第一次向server发送的请求报文包含一个SYN=1,和一个随机数 seq=x,
  • 然后server回复给client: SYN=1 和发送的随机数加一 : seq=x+1,
  • 最后client再回复给server:ACK=1,

那么大致是这个过程,这个过程中的几个关键字这里说一下

  • SYN(Synchronize Sequence Numbers)同步序列编号,
  • ACK(Acknowledge character)确认字符
  • seqSequence number(顺序号码)

真的是三次握手吗

可以看到前两次是同步信号synchronize,最后一次才是真正的确认acknowledge, 那么显然了tcp连接其实只握了一次手。
那么前两个过程究竟是做了什么呢。其实用握手去映射tcp连接的过程,很难去解释,因为tcp的连接过程很难有现实中的映射,首先他是个协议,协议是什么,是人为的规定,就是一个很朴素的想法:要建立连接要事先同步一下,强行解释的话,那么我们看一下在和一个人握手的过程中究竟发生里什么,

  • 首先你要和一个人握手,那么你肯定知道这个人,而这个人还和你在同一个房子里,(目标ip,都在以太网中)
  • 你望向你要握手的对象,然后那个人也看到了你,两个人目光交汇(同步过程,你望向他,)
  • 然后你直直的走向啦个男人,伸出你的手和他握上了(最后的Ack确认)

看看是不是很牵强,所以还是不要随便去拿一些概念去做比,即不准确亦难以描述清楚事实,最重要的是易于误导,和扭曲现实,至少我身边的人包括我在内,初听到这个三次握手都是深以为然,完全没有想到三次握手这件事是多么的诡异。

上面都是我的想法,而且我在书里找到里佐证,在谢希仁-计算机网络-第五版216页下面的一行小字,也就是注解2关于三次握手(three way handshake)的

广为流传的译名 “三次”(three-way)并不准确。这里的"三次"是指:A发送一个报文给B, B发回确认,然后A再加以确认,来回共三次。 实际上这三个报文合起来构成连接建立的“一次握手”

所以确实是握手但不是三次

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值