异想天开

What's the true meaning of light, Could you tell me why

TCP连接建立和释放

日期:2015-06-02 10:02:34
  
最后更新日期:2015-07-27 10:43:41
谢希仁 《计算机网络》 p215-p218
连接建立:
注意:
1.确认序号表示小于该序号的都已经收到,TCP规定若ACK报文未携带数据,则不消耗序号。而SYN包和FIN包即使不携带数据,也消耗序号。为什么会消耗序号,因为这个报文是需要可靠传到对端,若丢失,需要重传。
2.为什么需要三次握手?
a.TCP是全双工的,需要保证对于任何一方都有一来一去的数据流向。《计算机网络》2011版对此的解释不太好。

连接释放:
1.为什么需要四次挥手?
TCP连接是双向的,释放连接,也需要拆除两个方向的链路。服务器B若还需要向客户端发送数据,则发送ACK后,发送数据。否则可以FIN包和ACK确认捎带过去。也就是三次挥手。
2.FIN-WAIT-2后为啥需要等2MSL的TIME-WAIT时间?
a.假设最后一个确认报文需要重传;
b.让客户端的报文全部消失网络中。
3.close调用的返回意味着什么?是否意味着四次挥手已经完成?假设未非阻塞的socket,调用close呢?

4.TCP保活计时器(keepalive timer)
客户端主动与服务器建立TCP连接,但若客户端主机突然挂了,服务器则不能再收到客户端的数据了,这个时候需要有措施让服务器不再继续等下去。这时就需要使用保活计时器,服务器没收到客户端的一次数据,就重新设置保活计时器,保活计时器通常设置为2小时,若2小时没收到客户端的数据,则发送一个探测报文段,以后每隔75分钟发送一次,若发送了10个探测报文段仍无响应,则认为客户端出了故障,关闭这个连接。