最近公司要给一个项目增加一个网页实时聊天的功能,要使用到 websocket 技术。websocket 协议区别于平时开发所用到的 http/https 协议,但是同样也基于 TCP 协议。所以趁此机会,复习一下 TCP/UDP 协议。
TCP/UDP 处于 OSI(Open Systems Interconnection Model) 模型中的第四层:传输层。同时也是 TCP/IP 模型中的第三层:传输层。是端到端传输数据的基本功能。
TCP
TCP 服务可靠。采用发送应答、超时重传机制,来保证服务的可靠。
通过三次握手来保证了双方的接受和发送正常,通过四次握手来断开连接。所以 TCP 连接是一对一的。
三次握手
- 客户端发送一个 SYN 报文,指明自己的初始化序列号 ISN(c),由 Close 状态变为 SYN_SENT
- 服务器收到 SYN,确认客户端可以接收,应答一个 SYN + ACK 报文。指明自己的初始化序列号,自己由 Listen 转为 SYN_REVD
- 客户端收到 SYN + ACK 报文,确认服务端的接受和发送正常,回应 一个 ACK 报文。SYN_SENT 转为 establised
- 服务器收到 ACK 报文,确认客户端接受正常。SYN_REVD 转为 establised连接建立成功。
四次分手
- 客户端发送一个 FIN 报文,establised 转为 FIN_WAIT1
- 服务端收到后,发送 ACK(客户端的序列号+1),establised 转为 CLOSE_WAIT
- 服务端确认自己也要关闭,就发送一个 FIN 报文,指定一个序列号,CLOSE_WAIT 转为 LAST_ACK
- 客户端收到 ACK ,FIN_WAIT1 转为 FIN_WAIT2
- 客户端收到 FIN ,发送一个 ACK(服务端的序列号+1) FIN_WAIT2 转为 TIME_WAIT。过一会儿才会转为 CLOSED
- 服务端收到 ACK ,就 LAST_ACK 转为 CLOSED。连接关闭
UDP
UDP 服务不可靠,需要上层协议来处理数据确认和超时传送,可以用于广播(目标为全部)和多播(目标为多个地址)。
首先我是一个热爱生活的人,其次我才是一个码农。
有趣的不止代码,还有你身边的事物。放开去感受你能感受到的一切,一切都是那么美妙。
Comments
One response to “TCP/UDP”
嘻嘻嘻嘻嘻嘻嘻hihihihihihihi大呆呆~~~~~