TCP三次握手

一、场景

首先想一种场景,在古代,a和b是非常要好的朋友,但分别住在A庄和B庄,A庄和B庄相隔千里,有一天,a甚是想念b,想要一同到长安见面,于是用信鸽带着自己写的信发送给b,一段时间过去了,b在自己的院子里散步,突然发现有一只信鸽飞到自己菜园子里吃虫,b跑过去,抓住信鸽,拆下绑在信鸽脚下的信,打开一看,非常开心,b立刻回到书房写下了一封同意的信绑在信鸽脚下,将信鸽放飞,放飞之后的几天里,b时常会想,a有没有收到自己写的信,会不会信鸽丢了。没过多久,a收到了b的回信,非常开心,但是a又一想,如果b以为他写的这一封同意信我没有收到,他会不会不立刻启程去往长安。于是,a就又写了一封收到信,让信鸽带给b,之后,b收到a的信,又会想,会不会a以为我没有收到他写的收到信,不会立刻去长安,于是又写了一封信发送出去...............

这就是一个恶性循环,彼此都会想最后一次会不会对方没有收到,最后一次总是没有确认应答的。TCP握手时,在最后一次应答发送出去之后,发送端会认为建立成功,就会开辟新空间用来储存要接收的数据。综上所述,可以得出没有百分百的肯定连接建立成功。

所以,最有一次ACK应答是谁发送的,谁接收的是至关重要。

 

二、现在讨论一下TCP为什么是三次握手而不是两次、四次或者更多次?

假设是两次握手,客户端将SYN请求发送给服务器,服务器收到客户端的请求后,将ACK和SYN一起发送给客户端,这时服务器需要开辟新的空间建立数据结构用来储存接下来需要接收的数据,如果这时服务器发送的ACK和SYN因为各种原因,客户端没有接收到,连接就没法完全建立,如果这种情况不断的出现,服务器建立数据结构越来越多,空间越来越不足,最终会导致服务器崩溃。

假设是三次握手,最后一次是由客户端发送给服务器的ACK应答,当客户端将ACK发送出去之后,客户端会认为连接已经建立,客户端会开辟新的空间建立数据结构用来储存接下来需要接收的数据,如果这时服务器没有接收到ACK应答,服务器会认为连接没有建立,客户端认为连接建立成功并开辟空间建立了数据结构,就算没有接收到ACK应答,握手没有成功,对服务器也没有什么伤害。

假设是四次握手,跟两次握手原因相同,假设最后一次的服务器发送给客户端的ACK应答没有成功,从服务器发送ACK出去之时,服务器就会认为连接建立成功了,就会开辟空间,长期如此,就会导致空间不足以致服务器崩溃。

五次呢?同三次,最后一次ACK应答是客户端向服务器发送的,所以假使最后一次没有到达,服务器也不会受到什么影响。但是相比于三次,省时省力。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值