TCP的四次挥手
客户端,服务端两边都可以发起关闭请求。
-
客户端发送关闭请求FIN=1,seq=u(u是发送请求最后的序列+1)
-
服务端回执确认报文ACK=1,seq=v(服务端的序列号),ack=u+1(回执是请求的序列+1)
-
服务端发送关闭请求回执报文,FIN=1,ACK=1,seq=x(因为中间会继续传输数据所以序列会从v到x),ack=u+1
-
客户端发送回执报文,ACK=1,seq=u+1,ack=x+1,服务端收到报文就会关闭,客户端根据操作系统不同等待关闭时间不同
等待2m的timewait是为了1.确保对方获取到ACK报文 2.避免新旧连接混淆
UDP
- 面向非连接(不是双工,可以一对一也可以一对多)
- 不维护连接状态,支持同时向多个客户端传输相同的消息
- 数据包报头只有8个字节,额外开销小
- 吞吐量只受限于数据生成速率、传输速率以及机器性能
- 尽最大努力交付,不保证可靠交付,不需要维持复杂的链表状态表
- 面向报文,不对应用程序提交的报文信息进行拆分或者合并
TCP UDP的区别
- TCP是面向连接的,UDP是无连接
- TCP可靠的,UDP会丢失
- TCP有序,UDP可能有序
- TCP速度慢,UDP快
- TCP重量级,UDP轻量级