TCP连接的建立,三次握手的过程,以及为什么要三次握手,两次握手为什么不行

  • TCP三次握手的过程

SYN=1表示这是一个连接请求的意思

ACK=1表示对序列号的一个确认,当这个值=1的时候,确认号ack才有效的

ack=x+1表示确认号,表示的是接收方期望下一次握手的时候收到的序列号值是x+1,即第三次握手的时候,seq=x+1

通俗解释:

①第一次握手:发送方发送一个报文给接收方,说:"哥们好"

②第二次握手:所以接收方发送一个报文给发送方说:"我收到你发送得消息了"

③第三次握手:所以发送方再次发送一个报文给接收方说:"我知道你收到我的消息了"

假设老板就是发送方,员工是接收方。

老板和员工通过即时通讯软件聊天。

老板说:"老王,麻烦你做一件什么什么事"。(相当于第一次握手)

老王说:"好的老板!"。(相当于第二次握手)

老王担心 "好的老板!"这个消息不知道是否到达老板那边,要是消息没有到达老板那里,老板岂不是误认为我不理他?

老板为了老王不要那么担心焦虑,于是再次发送了一个消息給老王:"老王,我知道你确定要做这个事儿了,好好加油干哦"。(相当于第三次握手)

这时候,老王才松了一口气

①其中seq=x相当于老板給老王的任务,y相当于老王说的 "好的老板"。

②由于老王心里不安,不知道老板是否收到消息,于是期望老板响应自己,給自己一个定心丸,这个期望,就相当于ack=x+1。这时候老板确实给了老王定心丸,老板说:"我知道你愿意为我干这件事儿"。老板说的这句话,就相当于seq=x+1。

③这个seq=x+1就说明 达到老王的期望了,老王就不会再担心老板是否能收到了。

其中,相对于发送方来说,第一次握手和第二次握手这样一发一收的过程,是同步已发送的一个过程。

相对于接收方来说,第二次握手和第三次握手这样一发一收的过程,是同步已接收的过程。

相对于发送方,到达第二次握手,就已经建立连接了。

相对于接收方,第三次握手结束,才算已经建立连接。

之后,才可以进行数据传输。

  • 为什么要三次握手呢?两次握手难道就不行吗?

两次握手会产生什么问题呢?它会产生这样一个问题:

已经失效的连接请求报文传达到对方,引起错误。这是什么意思呢?

当只要两次握手,发送方就可以建立连接,这种情况我们来分析一下

①发送方第一次发送报文的时候,很久才到达接收方,于是发送方认为是超时传输,于是重传

②重传的时候,报文很快被接收方收到了,也很快得到了确认消息

但是上次发送的超时报文到达接收方以后,接收方照样发送确认包給发送方

这时候,发送方就收到2个确认包。很显然,这样就引起了错误。

如果进行第三次握手,发送方发送的超时报文还没有收到确认(第二次握手),重传的那个报文已经进行第三次握手了,即使发送方收到超时报文的确认(第二次握手),也不会进行第三次握手了,因为重传报文已经进行第三次握手了,超时报文直接抛弃掉,什么都不做。

这就是为什么要三次握手的原因,第三次握手,就是解决 "已经失效的连接请求报文传达到对方,引起错误" 的问题

猜你喜欢

转载自blog.csdn.net/Xeon_CC/article/details/108931537