[TODO] 抓包分析tcp3次握手+实现echo+运行情况分析 + 半连接队列和全连接队列
Linux 网络收发流程
tcp断开连接: RST与FIN
- FIN表示正常关闭连接,没有数据丢失,缓冲区所有数据包都发送完成才会发送FIN包,这与RST不同。
- RST表示复位,用来异常的关闭连接,在TCP的设计中它是不可或缺的。发送RST包关闭连接时,不必等缓冲区的包都发出去,直接就丢弃缓存区的包发送RST包。而接收端收到RST包后,也不必发送ACK包来确认。
代码验证
// 附录1,4和代码
-
如果正常关闭连接
defer conn.Close()
,抓包结果如下
-
如果不关闭连接退出程序
注释掉// defer conn.Close()
, 抓包结果如下
echo 网络交互图 + 半连接队列和全连接队列
附录1.1, 5
参考
1.代码:用Golang实现 echo服务器/客户端
1.1 02.丢掉nc,自己实现echo客户端+各种命令查看进程信息
2.TCP三次握四次挥手里seq和ack号的【正确】理解 //这个博客写得很完善
3.Linux 网络收发流程
4.TCP协议之RST与FIN
5. 五分钟带你读懂 TCP全连接队列(图文并茂)