Loading

4--传输层 tcp连接的三次握手

TCP连接的建立

 

回顾tcp标记,占6bit,每位个有不同含义

 

 

 

三次握手

发送方主动和接收方建立连接,SYN=1标记唯一,seq=x,x为同步的序列号,此时为三次握手的第一次握手

接收方收到报文后,被动打开tcp连接,同时回应报文进行第二次握手,SYN=1意味连接请求,ACK=1对序列号确认,ack=x+1确认号表示下一次希望收到x+1的序列号值,seq=y同时携带当前的序列号y

 第三次握手,发送报文ACK=1表示确认位, ack=y+1表示希望收到y+1的确认号数据,并且同步自己的序列号seq=x+1,表示当前我的序列号为x+1

通过三次握手后,双方的tcp连接就建立起来了

回顾,第一次与第二次都有SYN=1表示连接请求的意思

第二次和第三次都有ACK=1的标记,表示先对双方的序列号同步,发送方知道接收方的序列号,接收方也知道发送方的序列号

不但建立了连接,且同步了各自的序号,之后就可以进行数据传输了

 

 

为什么发送方要发出第三个确认报文?

为了避免意境失效的连接请求报文发送到对方,引起错误

假设第一次报文很久才传送过去,发送方很久都没有收到消息

此时发送方认为数据报文已经超时,发送方就会发送第二次报文,而这次很快就到达了对方

接受方收到后很快进行回应,并建立起连接

而第一次的请求报文就成了失效的请求报文,因为他的功能已被第二次发送的请求报文完成了。

 假设两次就建立连接,那么第一次迟到的报文此时送达了,接收方回应也会建立起连接

两次握手就建立连接导致同样的请求发送两次就可以建立2个tcp连接的情况,这种情况是错误的

而三次握手,第一个确认会先到发送方,发送方再发发送一个报文确认,第三,次握手才建立连接

比较慢的报文虽然比较慢,也到了接受方,且进行了回应,但是发送方已经进行了三次握手,发送方会忽略掉第二次确认消息,不进行任何操作

这样就避免了失效的请求到达对方,两次握手引发多次建立连接的错误

posted @ 2021-08-10 13:51  浅忆尘  阅读(208)  评论(0)    收藏  举报