面试官:TCP为什么是三次握手?而不是两次或四次...

这是一个很有意思的问题~

首先,我们要知道TCP是全双工的,即客户端在给服务器端发送信息的同时,服务器端也可以给客户端发送信息。而半双工的意思是A可以给B发,B也可以给A发,但是A在给B发的时候,B不能给A发,即不同时,为半双工。单工为只能A给B发,B不能给A发;或者是只能B给A发,不能A给B发。

我们假设A和B是通信的双方。我理解的握手实际上就是通信,发一次信息就是进行一次握手。

  • 第一次握手:A给B打电话说,你可以听到我说话吗?

  • 第二次握手:B收到了A的信息,然后对A说~我可以听得到你说话啊,你能听得到我说话吗?

  • 第三次握手:A收到了B的信息,然后说可以的,我要给你发信息啦!

在三次握手之后,A和B都能确定这么一件事:我说的话,你能听到;你说的话,我也能听到。 这样,就可以开始正常通信了。

注意:HTTP是基于TCP协议的,所以每次都是客户端发送请求,服务器应答,但是TCP还可以给其他应用层提供服务,即可能A、B在建立链接之后,谁都可能先开始通信。

如果两次,那么B无法确定B的信息A是否能收到,所以如果B先说话,可能后面的A都收不到,会出现问题 。

如果四次,那么就造成了浪费,因为在三次结束之后,就已经可以保证A可以给B发信息,A可以收到B的信息;B可以给A发信息,B可以收到A的信息。

三次握手正式情况下做了什么?

第一次握手:

客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里


第二次握手 :

服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即X+1。

第三次握手:

客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1

即SYN就是询问:你能听得到吗?ACK就是回到:我能听得到啊。

TCP四次挥手的过程:


四次挥手:

A:“喂,我不说了 (FIN)。”A->FIN_WAIT1

B:“我知道了(ACK)。等下,上一句还没说完。Balabala……(传输数据)”B->CLOSE_WAIT | A->FIN_WAIT2

B:”好了,说完了,我也不说了(FIN)。”B->LAST_ACK

A:”我知道了(ACK)。”A->TIME_WAIT | B->CLOSED

A等待2MSL,保证B收到了消息,否则重说一次”我知道了”,A->CLOSED

这样,通过四次挥手,可以把该说的话都说完,并且A和B都知道自己没话说了,对方也没话说了,然后就挂掉电话(断开链接)了 。

最后也给想软件测试的朋友们分享一份测试资料:

以上内容,对于软件测试的朋友来说应该是最全面最完整的备战仓库了,有需要的朋友关注下方卡片的公众号,免费领取

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
网络通信中,TCP协议是一种常用的可靠传输协议。而其中的三次握手四次挥手则是TCP连接的建立和断开过程中必然要遵循的步骤。因此,在面试中,面试官出现关于TCP三次握手四次挥手的问题也是很常见的。 面试官可能会问及TCP协议的基本原理,以及TCP连接建立、数据传输、连接关闭等方面的内容。针对TCP三次握手四次挥手,面试官可能会问到以下问题: 1. TCP为什么要进行三次握手进行连接的建立? 三次握手是保证连接可靠性的一种手段。它主要是防止网络中存在延迟重复数据的情况,以及确保双方都可以正常收发数据。在进行三次握手时,客户端发送一个请求包,服务端接收并回应确认包,客户端再回应确认包,这样就完成了连接的建立。 2. TCP为什么要进行四次挥手关闭连接? 四次挥手是为了确保连接的正常关闭。在关闭连接时,双方需要先告知对方自己已经没有数据要传输,等待对方回应确认。在双方都没有数据要传输后,才会真正地关闭连接。四次挥手的过程中,主要是为了避免出现数据的丢失或错误。 3. 三次握手四次挥手的流程是什么? 三次握手:客户端向服务端发送SYN报文,服务端接收后发送SYN ACK报文,客户端接收后再发送ACK报文,完成连接的建立。 四次挥手:客户端发送FIN报文告知服务端自己已经没有数据要传输了,服务端回应ACK报文进行确认;服务端同样发送FIN报文告知客户端没有数据要传输,客户端返回ACK报文进行确认;之后等待一段时间,连接会自动关闭。 总的来说,要想在面试中应对TCP三次握手四次挥手的相关问题,需要实际理解这两个过程的原理和流程。同时,也需要知道在实际应用中,TCP协议是如何确保数据可靠性和连接可靠性的。最后,要明确无论是面试还是实际工作中,了解TCP协议和网络通信的相关知识都是非常重要的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值