简述tcp半打开状态

23 Apr 2019

TCP 一些问题解答

简述TCP半打开状态

设想TCP客户端因为一些原因突然和服务端的TCP连接断开(例如突然宕机),但是没有来得及通知服务端,在这种情况下,服务端也没有办法给客户端发送FIN报文,所以对于服务端来讲,这条TCP连接没有办法断开,所以就一直持续占用服务端资源。这种情况显然是不允许的,所以就有必要在服务端设置一个计时器,来判断客户端有没有出现异常,这个计数器叫做保活计数器(keepalive timer)。当服务端接收到客户端的数据时候,保活计数器就置零重新开始。若两个小时没有接收到客户端的数据,就发送一个探测报文,以后则每隔75分钟发送一次,如果一连发送10个探测报文客户端仍无相应,服务器认为客户端发送了故障,紧接着断开连接。

简述TCP半关闭状态

TCP双端进行四次挥手的时候,第一阶段,客户端发送FIN报文,第二阶段,客户端收到FIN报文的确认报文,随后进入TCP连接进入半关闭状态。半关闭状态是指客户端已经结束发送报文,服务端还是可以再继续发送报文。

TCP同时打开

发送端和接收端的两方进程都同时发送一个SYN报文,但是最终也是打开一条TCP链接。此时的报文交换情况是:

同时打开

与TCP三次握手不一样的是,首先是四次交互,其次是每方的第二步都是序列号都是和自己主动发送的请求的序列号一致,相当于重新发送一遍相同的序列号,顺便是搭载了确认报文。假设左方是A方,右方是B方,A如果先建立连接的话,就是

可以看到前两步骤相同,(如果接收方刚开始的发送的SYN报文序号seq=K的话)