3 断开连接 四次挥手
不分客户端,服务器,只分主动方和被动方
- 主:tcp包里fin这一位 置1
- 被:回,ack这一位 置1
- 被: fin=1
- 主:ack=1
与posix api关系,调用了close() ,不是网络的函数,是fd文件系统的函数
-
fd回收
-
发fin空包: close类似send,但是send一个final的空包
被动方recv返回0说明收到fin空包,知道结束了,那么调用close()
shutdown()最好别用,没必要 鸡肋
状态和右下小图对应上
-
现象
-
不一定先发的数据先到,比如被动方先发的ack还没到主动方,fin先到
可能的,先fin_wait1-ack-finwait2-timewait
-
双方同时调用close
close-fin-fin_wait1-ack-closing-time_wait
双方time_wait,如果服务器出现大量time_wait,为什么?就是因为双方同时close,卡住了
-
小图对应三次握手跳了没看
send - b发syn - a回ack,syn -b 回ack- established
tcp做p2p(peer - to -peer去中心,点对点, 绕开网络快):双方close以后同时建立连接,握手, 没有client server双方平等
connect前 bind绑定端口 optional
作业:
2台虚拟机,本地,远程地址 都绑定实现tcp点对点,2份一样代码在a,b
答案:https://gitlab.0voice.com/King/tcp-p2p