关于tcp为什么要建立三次连接问题的探讨

我们都知道Tcp需要建立连接并且连接成功之后才会传递数据,那么为什么连接一定要是三次而不能是两次呢,且听我娓娓道来:
为什么需要我们双发先建立连接呢,这是因为在连接对象刚刚建立好,通讯刚开始的时候很多数据需要对方告诉我(SN是自己生成的不需要对方告诉,但是我们需要知道双方的ASN,就像班级你和领导之间发信息,领导主动给你发送了一条消息,你只有回复收到之后领导才能知道给你发送的信息你收到了但是你给领导发送的收到假如领导没有回复你的话。这时候你是不知道你发送的信息领导是不是已经读取了,你心急如焚,只有在领导回复你之后你们时间的通讯才确认双方都接受到了。)
1.首先主动打开方会发送一个随机生成的SN,假设时SN=X(引入序列号)过来(随机生成为了防止不法分子篡改信息)和syn(表示同步信息的标识符在tcp首部)此时因为是同步关系所以syn=1,ack =0(表示此segment(最好的表述方式不是包而是直接用英文,翻译过来的中文可能都不是特别标准)ASN = 0(应答序列号)在同步状态时不传送数据所以len = 0;此时的主动打开放把自己的信息发送给了被动打开放,等待被动打开放的回应。
2.在被动打开方收到了这份信息之后,选择建立连接或者拒绝建立连接都可以,为了对方能获取你的SN信息和其他对方需要建立连接时所需的数据这时候你发送过去的数据时SN = 随机数假设时SN=y,syn =1,ack =1,ASN =x+1,len =0(这时候加的1时syn占用一个序列号) 。你发送了你的信息以及向请求发起方回复了你收到了的信息,在对方收到这个信息之后他就可以知道你收到了他发送的信息。
3.请求发起方继续在收到对方的信息之后继续回复我收到了,此时的数据是:SN=x+1;syn = 0(已关闭同步,此时可以传递数据)ack = 1, ASN = y+1,len>0。
我们的疑问同时也在这第三步,有的人说没有必要是三次连接,在被动打开方发送给主动发起方他收到了你的信息并且回应一个他自己的信息后就可以直接传送数据了,不需要再发送我收到了你的信息。(我在这里举个栗子,就像两个不同国家的人们为了确认这两国之间有没有通路一样,首先a国的人给b国发送了一条信息,想确认路可以通吗,此时b国回应了你说路通着同时问你我的路到你那里通不通,你想着是既然我都可以到他们国家了,他们国家肯定到我们国家的路是通畅的,但是b国的人迟迟收不到你的来信确认没有通路。只有双方都建立了连接有并且都收到了回应才表示连接真的通了。)
在列举一个谢希仁的计算机网络中举到的例子,最后一次由请求发起方再一次发送确认,为了防止已经失效的连接请求报文段突然有传到了请求的被动接受方。
已经失效的报文段是这样产生的考虑正常情况,A(请求主动发起方)发出连接请求,但因为请求报文段丢失而未确认收到。于是A再次重传一次连接请求。后来收到了确认,建立了连接。数据传输完成后,就释放了连接。A总共发送了两个请求连接报文段,其中第一个丢失,第二个成功到达了B(被动打开连接方),没有已失效的请求报文段。
现在假定出现一种情况,就是A发出的第一个连接请求报文段并没有丢失而是在释放之后的某个时间点才到达B。本来这是以一个早已失效的报文段。但是B收到失效的连接请求之后就误认为是A又发送一次新的连接请求。于是就向A发出了确认报文段,同意建立连接。假定不采用报文握手,那么只要B发出确认,新的连接就建立了。由于A并没有发出建立连接的请求,不会理睬B,也不会向B发送数据,但是B却以为新的链接已经建立了,并一直等待下去,这样一来B的好多资源就浪费掉了。假如此时我们我们建立了三次握手,B由于收不到A给他发送过来的确认信息,就知道了A并没有要求建立连接。
我再举个例子,这次以画图的方式:
![在这里插入图片描述在这里插入图片描述以上就是我对tcp建立三次连接的初步理解希望有什么错误大家可以指出,我们一起进步。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值