28. 当服务器执行被动关闭TCP连接时,不会进入TIME_WAIT状态,为什么?
答:因为,终止一个客户程序,并立即重新启动,则这个新客户程序将不能重用相同的本地端口。但这不会带来什么问题,因为客户使用本地端口,而并不关心这个端口号是什么。但对于服务器,因为服务器通常使用熟知端口。如果终止一个已经建立连接的服务器程序,并试图立即重新启动这个服务器程序,服务器程序将不能把它的这个熟知端口赋值给它的端点,因为那个端口是处于2MSL连接的一部分。在重新启动服务器程序前,它需要在1~4分钟。
29. 半打开连接和半关闭连接的区别是什么?
答:在一个半关闭的连接上,一个端点已经发送了一个FIN,正等待另一端的数据或者一个FIN。一个半打开的连接是当一个端点崩溃了,而另一端还不知道的情况。
30. 如下图,请解释tcpdump输出。
答:客户在主机solaris上,服务器在主机bsdi上。客户对服务器SYN的确认(ACK)和客户的第一个数据段结合在一起(第3行)。接着,客户在等待它的数据的确认之前发送了它的FIN(第4行)。这样使得服务器可以在第5行同时确认客户数据和它的FIN。这次交互(将一个报文段从客户发送到服务器)需要7个报文段,而正常的连接建立和终止,以及一个数据段和它的确认,需要9个报文段。
31. 请简要阐述Nagle算法的基本思想。
答:
① 一个TCP连接上,最多只能有一个未被确认的未完成的小分组;
② 在该分组的确认到达之前,不能发送其他的小分组。
③ 相反,TCP收集这些小分组数据,送入缓存,在确认到来或存到一定数量时,再以
一个分组的方式发出去。
优点:算法是自适应的:确认到达得越快,数据就发送得越快。
32. 简述拥塞避免算法的基本步骤。
答:
对每个连接,拥塞避免算法和慢启动算法维持两个变量:拥塞窗口cwnd和慢启动门限ssthresh。算法的工作过程如下:
① 对给定的连接,初始化cwnd = 1 (报文段), ssthresh = 65535 (字节)。
② TCP输出例程的输出不能超过cwnd和接收方通告窗口的大小。
拥塞避免是发送方使用的流量控制,通告窗口是接收方进行的流量控制。