TCP连接的建立和终止

1 TCP概念

TCP是一个复杂、可靠、面向连接的协议。
TCP使用三路握手建立连接,使用四分组交换序列终止连接。
一个TCP连接可处于11种状态之一。

1.1 可靠性

当TCP向另一端发送数据时,它要求对端返回一个ACK确认。如果没有收到确认,TCP就会自动重传数据并等待更长时间。在数次重传失败后,TCP才放弃,如此在尝试发送数据上所花的总时间一般为4~6分钟。
可靠性体现在提供数据的可靠传送或故障的可靠通知。

1.2 RTT(round-trip time)

TCP含有用于动态估算客户端和服务器之间的往返时间RTT的算法,以便它知道等待一个确认需要多少时间。

1.3 序列号

TCP通过给其中每一个字节关联一个序列号对所发送的数据进行排序。
协议头中的序列号值为第一个字节的序列号。
目的是解决接收数据后的排序、重复数据的校验和丢失重传问题。

1.4 流量控制

TCP提供流程控制。
TCP总是告知对端在任何时刻它一次能够从对端接收多少字节的数据,这称为通告窗口。当TCP对应某个套接字的接收缓冲区已满,导致它必须等待应用从该缓冲区读取数据时,方能从对端再接收数据。

1.5 全双工

TCP连接是全双工的,可以在任何时刻在进出两个方向上既发送数据又接收数据。

2 TCP连接建立

TCP连接建立.png

3 TCP连接终止

TCP连接终止.png

4 TIME_WAIT状态

存在这一状态是为了实现TCP的全双工连接终止(即处理最终那个ACK丢失的情形),并允许老的重复分节从网络中消逝。
为什么是2MSL?
在客户端最后一个ACK到达服务端前,服务端刚好重传了一次FIN,然后服务端就正常关闭该连接了,那么最后误重传的FIN就会引发客户端再重传ACK。为了最后这个ACK不影响后续连接,就需要让客户端的连接等待2MSL(FIN重传最大时间+ACK重传最大时间)。

5 参考文献

文中内容大部分摘抄于以下文献

  • UNIX网络编程 卷1
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容