【3w1h1p】TCP三次握手和四次挥手

三次握手

网络上进行连接通信的机制
核心思想:是让客户端和服务端互相知道双方是可接受和发送的,从而保证双方能够正常通信。

  • 举个例子——老朋友偶遇
    1、老朋友——>我:老朋友说:“你不是彭于晏吗?你怎么在这?”(此时我知道了两件事,我发现1老朋友能说话正常利索,也发现2自己听力正常
    2、 我——>老朋友:很快啊,我说:“哦!我去接张导演呢,吴彦祖。怎么了愁眉苦深的,刚才发生了什么事?”(此时老朋友听我一说他就知道了四件事,老朋友发现他能听到我的说话知道了1他听力很不错,他的说话被我回应了说明2他说话很正常,也发现我有回应他的话他知道了3我的听力4说话正常
    3、老朋友——>我:很快啊,老朋友说:“刚才有人跟我吹大数据,说学大数据好,我说我就是18届的大数据,这不好,学不会,转行java了.”(此时我又知道了两件事,那就是我发现3老朋友听力正常,能回应自己,说明4自己的说话也正常利索
  • 过程:在某网络上两个电脑(客户端A、服务端B)
    1、客户端发送带有 SYN 标志的数据包请求给服务端,服务端接收。这个时候服务端知道这个客户端的发送是正常的,服务端B对这个客户端A的接受也是正常的
    2、服务端响应客户端的请求发送带有 SYN/ACK 标志的数据包,客户端接收。这个时候客户端知道自己的发送和接受是正常的,也知道服务端的发送和接收是正常的。
    3、客户端发送发送带有带有 ACK 标志的数据包,服务端接受。这个时候服务端知道了客户端的接受是正常的,服务端也知道自己的发送也是正常的。
    OK,双方都确保双方是能够正常通信了
    …建立通信了,接下来就可以http数据传输了
    在这里插入图片描述

四次挥手

网络上实现结束通信的机制

  • 举个通俗的例子——欠费的租客
    租客:我要退房(请求关闭)
    房主:可以,但是等我计算一下你之前欠我的费用,还有看看房间的东西有没有损坏(回应,并处理)
    房主:处理完了,你可以把钥匙和钱给我了(准备好了)
    租客:给,那我走了,拜拜!(发送正式关闭请求)

  • 过程:A客户端,B服务端
    1、A发送fin报文给B,表示客户端不再发送数据
    2、B先回一个ack,B可能还有一些数据要处理
    3、只有等到服务端处理完毕,准备好关闭该服务,不再发送数据才会发送fin给客户端
    4、客户端发送一个关于关闭的ack报文给服务器,服务端收到客户端的ack,此时服务端就不会发送任何消息了(然后客户端等待两倍的msl时间后,客户端关闭自己)

核心思想:让客户端和服务端双方关闭通信的机制

然后客户端发送给服务端一个关闭报文
再经过等两倍的msl,客户端自己会关闭自己

  • 为什么是四次挥手而不是三次挥手呢?

    • 其实四次挥手的第二三个步骤就是三次握手的第二个步骤拆成两个部分
      为什么呢?因为服务端关闭那个服务不能一下子关闭,它需要先处理完毕关于该通信已有的服务请求。
      等它处理好后,才会发送一个fin报文,现在已经准备好关了
    • 我的理解是如果三次挥手,Service可能收到关闭请求,但S还在处理Client的业务,我肯定要处理完才给你发关闭,但是等我处理完了,会不会超时了呢?你会不会重发呢?所以我需要四次挥手,多出来的一次先回应你的关闭。
  • 为什么要等待呢?
    这里是因为有可能网络超时导致客户端没有收到fin或者服务端没有收到ack
    在服务端准备好关闭的情况下
    服务端可能没有收到客户端的关于关闭的ack报文,此时服务端如果发现客户端迟迟没发送关闭报文会重发fin报文
    因此,为了防止网络超时失效的问题,确保能够关闭,客户端必须要等待一段时间

  • 为什么要等待两倍呢?
    msl是指报文在网络上最大存活时间,超过这个时间就会丢弃,报文经过一来一回所以两倍,
    1、为了服务端能接收到关闭的ack报文,客户端必须等待一段时间,最坏的情况下,ack消息的最大存活时间和fin最大存货时间=2msl
    在这段时间内,如果服务端重发fin,客户端就会发送ack给服务端去关闭这个服务。
    2、如果这个时候,客户端可能在这个时候因为以前发送请求断开过,但是这个时候恢复了连接,导致服务端以为是新的客户端
    所以我们等待2倍的msl,让这些过时的数据丢弃。
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值