TCP半关闭的必要性

TCP所提供的是全双工服务(数据可在两个方向上同时传递),连接建立后,就如同开辟了两条通路。对连接的任一端来说,一条通路用于进数据,另一条用于出数据。 一般说关闭TCP连接,是指某一端调用了close(windows平台为closesocket)函数将自己的两条通路同时断开,其结果就是,它再也不可在socket上收发数据了(TCP会将那些已在发送缓冲中的数据发送出去 ...


硬性关闭TCP连接

硬性关闭是指:使用非正常的手法立即终止当前TCP连接,只求关闭,不考虑后果,丢失数据也无所谓。这种方式在处理一些紧急状况时或许是必要的。

正常的关闭流程是在连接双方的配合下经历四次握手完成的。应用程序里的操作就是调用close接口。

对socket实施close操作,实际上会产生一个FIN报文段,这个段当然也要遵从TCP的规则,它会在发送缓冲区中排队。显然,调用close的一方要想实际发出这个FIN段,当然要先将排在它之前的那些字节发出去才行。也就是说,调用close后,到实际发出FIN之前,发送缓冲区中的数据已经发送到对端了。

上面说的是正常的关闭,用close接口即可发起。非正常关闭,也是用这个接口,只不过要配置一下socket的LINGER选项。

linger有“苟延残喘”的意思 ...


网线断了是什么状态-续

之前测试的场景是两个主机直接连接,中间没有其他设备。在现实情况中,这种做法几乎是不存在的。一端连接主机的网线,其另一端通常接入的是交换机,集线器之类的网络设备。

在这种情况(除接入一个交换机之外,其他设定与之前相同)下,执行前篇进行的各种操作,可能会有不同的结论 ...


网线断了是什么状态

两个主机,A(WinXP)的IP为192.168.1.100,B(Win7)为192.168.1.200,顺便说一下以太网口上的两个用于指示状态的LED灯,后面说到左右,都是指从正面看,如下图 ...


Port与Endpoint

Port:端口,标识一个应用进程:
  0-1023 - Well-known
  1024-49151 - Register
  49152-65535 - Dynamic

Endpoint:端点,(IP,Port)二元组,标识一个通信端(某个主机上的某个进程)。通信两端的端点信息唯一标识了两端之间的连接。