2019-8-27

1.TCP为什么三次握手不是2次?

   3次握手的过程是,第一次,客户端发送连接请求,SYN=1,seq=x,第二次,服务端收到请求连接也发送连接接求,SYN=1,ack=x+1,seq=y,ACK=1,第三次客户端发送ack=y+1,ACK=1,首先我们来说明一下几个标识符的含义,SYN说名这个报文为请求报文,seq=n说明我这个包的最后一个序号为n,ack=n说的是你前n个包我都接到了,我想要你低n+1个包,syn说的是这个数据包本身,ack是请求下一个包,SYN说明这是一个请求的数据包,ACK表示这是一个响应的包。

   为什么不是三次,那我们就假设一下如果是1次会怎样,客户端发送连接请求,然后就开始等待,也不管服务端有没有接收到这个请求,很明显这是不行的,然后是2次,客户端发送连接请求,服务端接收请求,也发送连接请求,然后开始传送数据,2次好像可以,但我们要考虑一种情况,假如网络发生了一些情况,客户端的连接请求很长一段时间才传到了服务端,客户端早就关闭了,然后服务端以为客户端请求连接,然后开始空等,这就造成了很大的资源浪费。

2.TCP为什么是四次挥手?

  首先我们要知道一个概念,socket是基于TCP的,socket其实是单向的,就是我们建立的TCP连接其实是有2条,一个是客户端到服务端,一个是服务端到客户端,好了,我们来说说四次挥手,客户端发送断开请求,我的数据已经全部发送了,我现在单方面断开连接,你还有什么要发的吗,然后服务端就说等等我还有东西要发,发完后,再告诉客户端,好了我也发完了,不发了,然后客户端就可以关闭接收服务了,也发送一个确认请求,然后服务端也关闭接收请求了,主要是我们要知道,一个TCP是分为接收了发送2个服务的,是独立的,如果只有三次,就不能确定被请求段还有没有要发送的数据了

发布了133 篇原创文章 · 获赞 8 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/fbher/article/details/100098940