为什么需要握手:握手的作用就是为了同步一些信息,比如最大滑动窗口
TCP:是一个可靠的连接,也就是客户端和服务器双方必须感知对方的存在,也就是需要经历一个建立连接的过程
用三次握手建立TCP连接,连接有三个阶段
连接的管理就是使连接的建立和释放都能正常地进行,连接阶段过程中要解决以下三个问题
TCP建立连接的过程:被称为握手
① 握手过程其实是发送的TCP报文,在这里面有两个字段,SYN 和 seq
② 当服务器接受到我们的握手请求时,会回复一个确认报文
③ 当客户端收到确认报文的时候,客户端需要对这个确认报文进行回复
经过了这三次握手,两者就进入了连接状态
然后建立TCP连接
中国机长版三次握手
四次连接有点多余,第三次的时候,我们已经互相进行了连接确认
但是因为我们无法保证百分百的可靠性
客户端知道服务器有接收 和 发送的能力,服务器不知道客户端有没有接收数据的能力,因为通过第一次握手,已经知道了客户端能够发送数据,但是能不能接收数据,还是不清楚,因此这个TCP连接是不可靠的。
为什么不能两次握手就建立连接
因为超时重传机制的存在
但客户端发送第一次握手的时候,可能会经历网络拥塞,然后客户端会以为这个连接已经丢失,然后会重新发送一个请求连接的信息到服务器,这次发送的消息很快被服务器接受,然后服务器建立连接就开始建立连接。但是当第一次发送的请求经过一段时间的阻塞后,成功到达服务器,然后服务器又连接连接,而此时客户端是不会理会这次请求的建立,所以服务器一直在等待客户端数据的发送。
所谓的四次挥手,就是关闭TCP连接的过程,指的是断开一个TPC连接,需要客户端和服务端总共发送4个包,以确定双方连接的断开。
主要目的:保证TCP连接的全双工连接
由于TCP连接是全双工的,因此每个方向都必须单独关闭,这个原则是当以防完成它的数据发送任务后,就能发送一个FIN包来终止这个方向的连接。
收到一个FIN包只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后,仍然能发送数据,首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
这是因为虽然双方都同意了关闭连接,而且握手的4个报文也都协调和发送完毕,按道理可以直接回到CLOSE状态
但是因为我们需要假设网络是不可靠的,你无法保证你最后发送的ACK报文是会一定被对方收到,因此处于LAST_ACK状态下的socket可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的报文。
当客户端与服务器在规定的时间内没有得到应答
会发送报文进行探测,假设没有应答,那么就会关闭连接
下面是四次挥手的过程
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )