TCP/IP四次挥手
在TCP/IP协议取消连接的时候会进行四次挥手过程:
当某个应用进程主动关闭的时候,该端TCP会发送一个FIN分节,表示数据发送完毕。
接收到这个FIN的对端执行被动关闭,这个FIN由TCP进行确认,他的接受也作为一个文件结束符EOF传递给接收端应用进程,因为FIN的接受意味着接收端应用进程在相应连接上再无额外数据可以接受。
一段时间后,接受到这个文件结束符的应用进程将调用close关闭他的套接字,这导致他的TCP也发送一个FIN。
接受这个最终FIN的原发送端TCP,即执行主动关闭的那一端确认这个FIN。
一个FIN占据一个字节的序列号空间,因此每个FIN的ACK确认好就是这个FIN的序列号加一。
值得注意的是:
当套接字被关闭的时候,其所在端TCP各自发送了一个FIN。这是由应用进程调用close而发生的,但是必须知道。
当一个Unix进程无论是自愿的,即调用exit或从main函数返回,还是非自愿的(终止)时,所有打开的文件描述符都被关闭,这导致仍然打开的任何TCP连接上也发出一个FIN。
TCP四次挥手状态转换
如果某个应用进程在接收到一个FIN之前调用close,即主动关闭,那就转换到FIN_WAIT _1状态,如果一个进程在close之前收到了一个F