OSI 七层模型和 TCP/IP 五层模型介绍

OSI 七层模型:

  • 应用层
  • 表示层
  • 会话层
  • 传输层
  • 网络层
  • 数据链路层
  • 物理层


TCP/IP 四层模型:

  • 应用层
  • 传输层
  • 互联网层
  • 数据链路层
  • 网络接口层



什么是 TCP 和 UDP,两者有什么区别

对比

TCP

UDP

名称

Transmission Control Protocol(传输控制协议)

User Datagram Protocol(用户数据包协议)

用途

是一种面向连接、可靠的、基于字节流的传输层通信协议

是一种无需建立连接就可以发送数据的一种协议

特性

  • 工作在传输层
  • 面向连接
  • 全双工
  • 半关闭
  • 错误检查
  • 数据分片
  • 确认机制
  • 数据恢复、重传
  • 流量控制、滑动窗口
  • 拥塞控制、慢启动和拥塞避免算法
  • 工作在传输层
  • 非面向连接
  • 有限的错误检查
  • 传输性能高
  • 无数据恢复特性

缺点

  • 需要消耗较多的网络带宽,以及需要更多的处理性能
  • 无法保证数据的可靠性

使用场景

访问网站、下载资源等

游戏、直播、语音等


TCP 三次握手和四次挥手

TCP 三次握手过程

TCP 是一种面向连接、可靠的、基于字节流的传输层通信协议。为什么说可靠?因为 TCP 协议在传输数据时,客户端和服务端会有一个建立连接的过程,只有建立了连接,才能开始传输数据。为了在复杂的网络环境下,保证建立连接的可靠性,也就有了常说的 TCP 三次握手,通过三次握手机制来保证连接的可靠性。


  1. 第一次握手:客户端向服务器端发起请求连接,客户端会发送一个 SYN(SEQ=x) 包,同时客户端进入 SYN_SEND 状态。

网络模型以及 TCP、UDP 介绍_客户端

  1. 第二次握手:服务器端收到 SYN 报文之后,会回应一个 SYN+ACK(SEQ=y,ACK=x+1)包,并进入 SYN_RECV 状态。

网络模型以及 TCP、UDP 介绍_传输层_02

  1. 第三次握手:客户端收到服务器端的 SYN 报文,并回应一个 ACK(ACK=y+1)包,同时进入 Established 状态。

网络模型以及 TCP、UDP 介绍_客户端_03


四次挥手过程

假如客户端主动发起关闭连接:

  1. 第一次挥手:客户端发起关闭连接请求,会先服务端发送一个 FIN 包,表示要关闭连接。同时客户端进入 FIN-WAIT-1 状态。
  2. 第二次挥手:服务端发送 ACK 包,表示自己进入了关闭等待状态 CLOSE-WAIT。同时客户端变为 FIN-WAIT-2状态。
  • 此时服务端还可以向客户端发送未发送的数据,客户端也还可以接收数据。
  1. 第三次挥手:服务端在发送完数据之后,会向客户端发送 FIN 包,并进入最后确认状态 LAST-ACK。
  2. 第四次挥手:客户端收到之后,回复 ACK 包:
  • 客户端同时进入超时等待状态 TIME-WAIT,并经过超时时间后关闭连接(CLOSED)。
  • 而服务端收到客户端的 ACK 包之后,立即进入关闭连接(CLOSED)。


为什么第四次挥手,客户端需要等待超时时间再关闭?

这是为了保证服务端已收到 ACK 包:

  • 因为假设客户端发送完最后一包 ACK 包后就释放了连接,一旦 ACK 包在网络中丢失,服务端将一直停留在最后确认状态 LAST-ACK。
  • 如果客户端发送最后一包 ACK 包后,等待一段时间,这时服务器因为没有收到 ACK 包,会重发 FIN 包,客户端会响应这个 FIN 包,并重发 ACK 包并刷新超时时间。