TCP三次握手四次挥手

Posted You295

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP三次握手四次挥手相关的知识,希望对你有一定的参考价值。

知识点总结

1.TCP为什么采用三次握手,而不是两次或者四次握手

(1)TCP提供可靠的面向连接服务,TCP是双工的,即任何一端都可以发送数据,也可以接收数据,但是需要有一个发送序列号和一个接收序列号。
(2)TCP三次握手的目的是同步连接双方的序列号和确认号,并且交换tcp窗口大小信息,确认双方都具有收发信息的能力。

若现在改成两次握手,是可能发生死锁问题的。例子如下:假设c给s发送一个连接请求分组,s收到了这个分组,并且发送了确认应答信息。按照两次的握手协议,s认为已经成功建立连接了,可以开始发送数据分组。但是,c在s的应答分组在传输中被丢失的情况下,将不知道s是否已经准备好了,不知道s建立了什么样的序列号,c甚至不知道s是否已经接收的到了自己的连接请求信息,在这种情况之下,c认为还没有成功建立连接,会忽略s发来的任何数据分组,只是在等待连接确认应答分组。然而s在发出的分组超时后,重复发出同样的分组,这样就形成了死锁。

2.为什么客户端和服务端的初始序列号ISN是不相同的呢

(1)因为网络中的报文会延迟,会复制重发,也有可能丢失,这样就会造成不同链接之间相互产生影响,所以为了避免互相影响,客户端和服务端的初始序列号是随机且不相同的。

3.为什么连接的时候是三次握手但是关闭的时候确是四次挥手呢

(1)当s收到c的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来做应答的,SYN报文使用做同步的。但是在关闭连接时,当s端收到FIN报文时,很有可能不会立即关闭SOCKET,所以只是先回复一个ACK报文,告诉c端,“你发送的FIN报文我收到了” 。只有等到我s端的所有报文都发送完了,我才可以发送FIN报文,因此不能一起发送,多了一次。故需要四次挥手。

4.为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态呢

(1)按照原理来讲,此时我们四个报文段都已经发送完毕了,应该可以直接进入CLOSE状态了,但是我们必须要设想网络是不可靠的,有可能最后一个ACK丢失掉。故TIME_WAIT状态就是就是用来重新发送可能丢失掉的ACK报文。在c发出最后的ACK报文回复后,该ACK可能丢失,s如果没有收到ACK,将不断重复发送FIN片段。所以c不能够立即关闭,它必须确认s收到了该ACK。

5.如果已经建立了连接,但是客户端突然出现故障了怎么办(保活机制)

(1)TCP设有一个保活计时器,客户端如果出现故障,服务器不能一直等下去,白白的浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,如果两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒发送一次。若一连发送十个探测报文仍然没有反应,服务器就会认为客户端出了故障,接着就关闭连接。

6.三次握手可以携带数据吗

(1)第一次和第二次握手不可以携带数据,然而第三次握手是可以携带数据的。如果说第一次可以携带数据的话,如果有人想要恶意攻击服务器,每次都在第一次握手中的SYN中放入大量的数据,重复发送大量的SYN报文段,此时服务器就会花费大量的内存空间来缓冲这些报文,服务器就会很容易受到攻击了。

7.一台主机上出现大量的CLOSE_WAIT是什么原因,要怎么处理呢

CLOSE_WAIT是被动关闭方收到FIN请求进行回复之后的状态,等待上层程序进行进一步的处理,,如果出现了大量的CLOSE_WAIT,则可能是被动关闭方主机程序中忘了最后一步断开连接后调用close释放资源。这可看做为是一个BUG,需加上对应的close即可以解决问题。

8.一台主机上出现大量的TIME_WAIT是什么原因,要怎么处理呢

TIME_WAIT是主动关闭方出现的,主机上出现大量的TIME_WAIT说明这台机子上发起了大量的主动关闭连接。这时应该去调节TIME_WAIT的等待时间。常见于一些爬虫服务器。

9.TCP三次握手如果失败了,服务端将会怎么处理

握手失败的原因有两种:第一种服务端没有收到SYN,则什么都不需要做,不需要去处理;第二种服务端回复了SYN+ACK以后,长时间没有收到ACK响应,则超时后就会发送重置连接报文段,释放资源。

10.什么是半连接队列

服务器第一次收到客户端的SYN后,就会处于SYN_RECD状态,这时双方还没有完全建立连接。服务器就会把这种状态下的请求连接放在一个队列里,我们把这种队列称为半连接队列。全连接队列就是已经完成了三次握手,建立起来的就会放在全连接队列里,如果队列满了就会出现丢包现象。

以上是关于TCP三次握手四次挥手的主要内容,如果未能解决你的问题,请参考以下文章

三次握手&&四次挥手

TCP三次握手与四次挥手

TCP连接时的三次握手,四次挥手

TCP三次握手和四次挥手

TCP 连接三次握手、四次挥手

tcp 三次握手,四次挥手