TCP/UDP

最近公司要给一个项目增加一个网页实时聊天的功能,要使用到 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 服务不可靠,需要上层协议来处理数据确认和超时传送,可以用于广播(目标为全部)和多播(目标为多个地址)。



首先我是一个热爱生活的人,其次我才是一个码农。

有趣的不止代码,还有你身边的事物。放开去感受你能感受到的一切,一切都是那么美妙。

发表评论

电子邮件地址不会被公开。 必填项已用*标注