简单的做一下tcp传输的过程分析(linux下),以加深自己的记忆,如有不足之处,希望各位道友能够指出,谢谢!
Tcp连接传输分三步:
- 三步握手建立连接
- 数据传输
- 四步挥手断开连接
一、三步握手连接
- 在服务端已经完成bind listen等开启监听服务从而阻塞于accept()下(简单的情况),客户端connect()服务端:发送一个SYN数据包建立连接, 数据包IP头中包含SYN及一些常见的选项如MSS、Window size等,此时客户端:SYN_SENT;
- 服务端接收数据包后回应相应的ACK数据包,并在包中设置SYN位,也请求像对方建立链接,此时服务端:SYN——REVD;
- 客户端接收到服务端的数据包,状态:SYN_SENT---->ESTABLISHED, connect()返回,而后发送ACK回应包,表示接收到了服务端的SYN包。而后服务端接收到此包,状态:SYN_REVD--->ESTABLISHED, accept()返回,至此,连接成功建立。
二、数据传输
- 客户端writ