您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息
三六零分类信息网 > 长治分类信息网,免费分类信息发布

为什么TCP必须“三次握手”和“四次挥手”?百度没有这么详细

2024/1/29 11:52:33发布17次查看
为什么tcp必须“三次握手”和“四次挥手”?百度没有这么详细
互联网上有很多关于tcp的文章,比如“三次握手”和“四次浪潮”,头条有10多篇文章。那些文章很好地解释了它的原理,但是有些词枯燥难懂,所以你必须反复思考!
正好,今天巴师兄在和朋友们交流的时候,看到有人在问tcp“三次握手”:
事实上,已经知道这句话的朋友会很快理解这句话的意思,但是那些还在摸索的朋友呢?
下面,巴戈将以自己的方式告诉大家,什么是tcp的“三次握手”和“四次浪潮”?很久以前,.....
记者:什么是传输控制协议?
程序员:传输协议
记者:udp也是,那为什么不用udp呢?
程序员:因为udp不关心它什么时候传输数据,所以假设接收者会收到它。不幸的是,真实的网络环境不是那么简单,甚至复杂和残酷。
在网络环境中,包丢失、拥塞和无序一直存在。如果不小心,数据可能无法传输到目的地。此时,轮到tcp了
记者:为什么传输控制协议是可靠的?
程序员:这是因为它的“三次握手”和“四波”!
采访者武神主宰最新章节(邪恶的微笑):告诉我吧!
程序员:那就仔细听
三次握手程序员:这种“三次握手”是在交流中建立联系的过程。看下面的图片
流行的观点是:
顾客:你好,我是顾客
服务器:你好,客户,这是服务器
客户:你好,服务器
这个过程通常称为“请求->响应->响应的响应”
记者:对不起,问一个问题,为什么不是两次或四次,而是三次?
程序员:嗯,是的,他是一个称职的面试官!
想象一下,当客户端由于数据包丢失、超时或服务器根本不想建立连接而发送连接时,此时客户端应该做什么?
客户端不知道结果,所以它必须重复发送连接请求。虽然此时服务器已经收到了它,但是客户端仍然不知道这一点,只能继续发送请求。
此时,服务器接收来自客户端的请求,当然知道客户端的存在。如果服务器不同意建立连接,客户端会在几次重试后放弃,没问题。
如果服务器愿意建立连接呢?这时,一个回应将被发送给客户(好了,别喊了,我知道你在客户那里)
此时,已经握过两次手了!理论上,此时可以建立连接,但问题来了:
因为对于服务器来说,这个响应过程也可能丢失数据包,这些数据包可能不会到达客户端,甚至客户端可能会完全挂断。
在其他情况下,在第一次握手期间,由于网络问题,客户端向服务器发送了许多连接建立请求。通常假设其中一个成功建立,进行简单的通信,然后结束连接。但是,由于网络延迟,其他一些请求到达了服务器,服务器会认为这是一个正常的请求,然后建立连接。
因此,两次握手会有各种各样的问题。
为了确保能够正确接收到服务器的响应,客户端仍然需要告诉服务器我已经收到了服务器的响应,也就是说,给服务器一个“响应响应”,这就是三次握手。
采访者:如果这种“响应响应”也有诸如数据包丢失的问题,并且没有被发送,会怎么样?
程序员:你在找麻烦,不是吗?然后,如果你这么说,你的手就烂了,你不能保证这个消息是100%可靠的。三次握手,足以确保服务器端和客户端都确认对方的存在。
四波采访者:嗯,是的,让我们来谈谈什么是“四波”!
程序员:连接建立后,你可以传输数据。传输完成后,你需要挥手四次才能说再见。流程见下图
面试官:你的颞下颌关节不像上次那么清晰!
程序员:哎呀~面试时间有限,所以我们就看看吧!
一般来说,是这样的...
顾客:服务员,我想和你说再见
服务员:好的,我明白了
这时,客户端说再见,不会向服务器发送数据。此时是否可以立即关闭服务器?
你不能!因为服务器可能还没有处理完相应的事情,所以它仍然需要发送数据。此时,状态正在等待关闭。处理后,有必要继续以下步骤。
服务器:客户,我也想和你说再见
顾客:再见,走开
程序员:实际上,这里有些问题。当客户说“再见”而服务器说“我知道”时,这两次都没有错。
然而,当客户端说“再见”时,它直接走出了门,这引起了问题,因为服务器没有说“知道”,即使它说了“知道”,客户端可能已经离开了。
这时,为了解决这些问题,tcp协议有几个状态来处理这些问题,如上面的状态图所示:
当客户端说“再见”时,它进入fin_wait_1状态。在接收到“再见”的消息后,服务器发送“我知道”,然后进入关闭等待状态。
当客户收到“收到”并进入fin_wait_2时,过了一会儿,客户还会收到“客户,我想和你说再见”,所以客户应该发送“再见,走开”,说完后就可以走了。
但是,客户端发送的消息发送不成功,服务器只能重复发送“我想和你说再见”。不幸的是,客户已经离开,永远不会回复你。
由于这个问题,tcp协议要求客户端在离开之前等待一段时间。这个等待时间叫做时间等待,这个时间等待还有另一个功能。如果客户端在说再见后需要等待一段时间,如果不等待,它将直接释放端口。
在前面的连接中,客户在说“再见”后离开了。服务器不知道,一直回答“我知道”。这时,一个新客户端连接万古神帝最新章节上了,这个新客户端收到了“我知道”。这是不是特别令人困惑?
因此,这个时间等待特别重要,它可以确保较晚的tcp段有足够的时间被识别和丢弃。当连接结束时,网络中延迟的消息也应该被丢弃,以免影响立即建立的新连接。
关于什么?巴兄说清楚了吗?给点动力!
文章来源:www.atolchina.com
长治分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录