服务器端合适发送探查报文?

    1. 客户主机依然正常运行,并从服务器可达。

    客户的TCP响应正常,而服务器也知道对方是正常工作的。服务器在两小时以后将保活定时器复位。
    如果在两个小时定时器到时间之前有应用程序的通信量通过此连接,则定时器在交换数据后的未来2小时再复位。

    1. 客户主机已经崩溃,并且关闭或者正在重新启动。

    在任何一种情况下,客户的TCP都没有响应。服务器将不能够收到对探查的响应,并在75秒后超时。
    服务器总共发送10个这样的探查,每个间隔75秒。如果服务器没有收到一个响应,它就认为客户主机已经关闭并终止连接。

    1. 客户主机崩溃并已经重新启动。这

    时服务器将收到一个对其保活探查的响应,但是客户端这个响应是一个复位,使得服务器终止这个连接。

    1. 客户主机正常运行,但是从服务器不可达。

    这与状态2相同,因为TCP不能够区分状态4与状态2之间的区别,它所能发现的就是没有收到探查的响应。

    保活举例
    另一端崩溃且没有重新启动的情况

    1. client (bsdi)和 server(svr4)建立一个连接,client使用-K选项使能保活功能。
    2. 验证数据可以通过该连接。
    3. 观察client TCP每隔2小时发送保活分组,并观察server端的TCP确认。
    4. 将以太网电缆从server端拔掉,这会使客户认为服务器主机已经崩溃。

    5. 在我们断定服务器已经关闭连接之前,client会发送10个间隔75秒的保活探查。

    client (bsdi) —> server(svr4)

    image.png

    image.png

    此过程去掉了三次握手,MSS,及窗口大小。
    1. client向server端发送数据
    2. server端返回ack确认
    3. server端回显数据
    4 - 5. 经过7200s(2h),client向server端发送保活探查之前,会先发送一个arp请求 client端收到一个arp的响应
    6. client 发送保活探查
    7. server 端响应保活探查
    8 - 11. 经过7200s(2h),client 向 server端发送同样的保活探查。这个时候拔断server端的网线。
    12 - 21 . 经过7200s(2h),client继续向server端发送保活探查,由于server端网线被拔段,无法响应。
    客户端会每隔75秒发送一个活动探查,共发送10次。

    另一端崩溃并重新启动
    1. client (bsdi)和 server(svr4)建立一个连接,client使用-K选项使能保活功能。
    2. 验证数据可以通过该连接。
    3. 将以太网电缆从server端拔掉,重启服务器端程序,然后再连接到网络上。
    4. 我们会看到下一个保活探查产生一个来server端的的复位,因为现在server端不知道关于这个连接的任何信息。
    image.png

    image.png

    此过程去掉了三次握手,MSS,及窗口大小。
    1 -3 . client向server端发送数据;server端返回ack确认;server端回显数据。
    此时将以太网电缆从server端拔掉,重启服务器端程序,然后再连接到网络上。
    4 - 5. 经过7200s(2h),client向server端发送保活探查之前会先发送一个arp请求 client端收到一个arp的响应
    6. client 发送保活探查
    7. 由于server端被重启,所以不知道关于这个连接的任何信息。会返回一个复位。至此连接被复位。

    另一端不可达
    image.png

    image.png