首页 > 试题广场 >

下列TCP连接建立过程描述正确的是:

[单选题]

下列TCP连接建立过程描述正确的是:

  • 服务端收到客户端的SYN包后等待2*ml时间后就会进入SYN_SENT状态
  • 服务端收到客户端的ACK包后会进入SYN_RCVD状态
  • 当客户端处于ESTABLISHED状态时,服务端可能仍然处于SYN_RCVD状态
  • 服务端未收到客户端确认包,等待2*ml时间后会直接关闭连接
发表于 2020-09-03 15:43:57 回复(0)
此题主要考察TCP三次握手,四次挥手的状态变化,对着图看吧,加深印象。
三次握手如下:

(此图第三次握手的ack应该等于y+1,而不是y,但不影响解这题)

四次挥手如下:


发表于 2015-08-13 15:20:14 回复(13)
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 
因此,根据第二次握手,A、B错误。
D、服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。所以D错误。 

编辑于 2015-08-09 17:58:22 回复(1)

 服务器端首先执行 LISTEN 原语进入被动打开状态( LISTEN ),等待客户端连接;

·         当客户端的一个应用程序发出 CONNECT 命令后,本地的 TCP 实体为其创建一个连接记录并标记为 SYN SENT 状态,然后给服务器发送一个 SYN 报文段;

·         服务器收到一个 SYN 报文段,其 TCP 实体给客户端发送确认 ACK 报文段同时发送一个 SYN 信号,进入 SYN RCVD 状态;

·         客户端收到 SYN + ACK 报文段,其 TCP 实体给服务器端发送出三次握手的最后一个 ACK 报文段,并转换为 ESTABLISHED 状态;

·         服务器端收到确认的 ACK 报文段,完成了三次握手,于是也进入 ESTABLISHED 状态。

  在此状态下,双方可以自由传输数据。当一个应用程序完成数据传输任务后,它需要关闭 TCP 连接。假设仍由客户端发起主动关闭连接。

·         客户端执行 CLOSE 原语,本地的 TCP 实体发送一个 FIN 报文段并等待响应的确认(进入状态 FIN WAIT 1 );

·         服务器收到一个 FIN 报文段,它确认客户端的请求发回一个 ACK 报文段,进入 CLOSE WAIT 状态;

·         客户端收到确认 ACK 报文段,就转移到 FIN WAIT 2 状态,此时连接在一个方向上就断开了;

·         服务器端应用得到通告后,也执行 CLOSE 原语关闭另一个方向的连接,其本地 TCP 实体向客户端发送一个 FIN 报文段,并进入 LAST ACK 状态,等待最后一个 ACK 确认报文段;

·         客户端收到 FIN 报文段并确认,进入 TIMED WAIT 状态,此时双方连接均已经断开,但 TCP 要等待一个 2 倍报文段最大生存时间 MSL ( Maximum Segment Lifetime ),确保该连接的所有分组全部消失,以防止出现确认丢失的情况。当定时器超时后, TCP 删除该连接记录,返回到初始状态( CLOSED )。

·         服务器收到最后一个确认 ACK 报文段,其 TCP 实体便释放该连接,并删除连接记录,返回到初始状态( CLOSED )。

        SYN攻击:
            属于DDoS攻击的一种,它利用 TCP协议 缺陷,通过发送大量的半连接请求,耗费 CPU 和内存资源。SYN攻击除了能影响 主机 外,还可以危害 路由器 防火墙 等网络系统,事实上SYN攻击并不管目标是什么系统,只要这些系统打开TCP服务就可以实施。 服务器 接收到连接请求(syn= j),将此信息加入未连接队列,并发送请求包给客户(syn=k, ack =j+1),此时进入 SYN_RECV 状态。当服务器未收到客户端的确认包时,重发请求包,一直到超时,才将此条目从未连接队列删除。配合IP欺骗,SYN攻击能达到很好的效果,通常,客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送syn包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。
检测SYN攻击非常的方便,当你在服务器上看到大量的半连接状态时,特别是源IP地址是随机的,基本上可以断定这是一次SYN攻击。我们使用系统自带的netstat 工具来检测SYN攻击:
# netstat -n -p TCP

MSL 是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。

2MSL即两倍的MSL,TCP的TIME_WAIT状态也称为2MSL等待状态,当TCP的一端发起主动关闭,在发出最后一个ACK包后,即第3次握 手完成后发送了第四次握手的ACK包后就进入了TIME_WAIT状态,必须在此状态上停留两倍的MSL时间,等待2MSL时间主要目的是怕最后一个 ACK包对方没收到,那么对方在超时后将重发第三次握手的FIN包,主动关闭端接到重发的FIN包后可以再发一个ACK应答包。在TIME_WAIT状态 时两端的端口不能使用,要等到2MSL时间结束才可继续使用。当连接处于2MSL等待阶段时任何迟到的报文段都将被丢弃。不过在实际应用中可以通过设置 SO_REUSEADDR选项达到不必等待2MSL时间结束再使用此端口
编辑于 2015-11-30 15:56:57 回复(0)
编辑于 2017-07-23 18:27:37 回复(0)
服务端收到客户端的SYN包后进入SYN-RCVD状态,故A错;服务端收到客户端的ACK包后进入ESTABLISHED状态,故B错;若服务端未收到客户端的确认包,服务端会进行超时重传,然而重传时间并不确定,故D错,选C。
编辑于 2018-12-06 21:36:25 回复(0)

TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图1所示。

(1)第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。

(2)第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。

(3)第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据。
确认号:其数值等于发送方的 发送序号 +1 (即接收方期望接收的下一个序列号)。

服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,
如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。
所以D错误。 



编辑于 2016-05-15 11:11:42 回复(0)
答案:C
通过字面排除得到C最可能是正确答案。
发表于 2015-08-07 20:09:47 回复(0)
服务器收到客户端发送的SYN后,客户端进入SYN_SEND状态,等待服务器确认,A错;
服务器发送给客户端ACK+seq后,服务器进入SYN_RECV状态,等待客户端确认,B错;

发表于 2020-05-01 12:56:34 回复(0)
发表于 2020-10-23 08:27:55 回复(0)
对于D 服务器未收到客户端的确认包,不会关闭连接吧
发表于 2015-08-19 23:28:30 回复(0)
收藏
发表于 2015-08-19 11:11:58 回复(0)