网络模型和 TCP 连接

这篇文章简要记录一下网络模型和 TCP 三次握手四次挥手。

网络模型

网络模型有 OSI 七层模型、TCP/IP(参考)4层模型、网络5层模型三种划分方式。

OSI 七层模型

OSI(Open System Interconnection,开放系统互连)七层模型(七层协议体系机构)是国际标准化组织(ISO)提出的一个理论模型。

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

TCP/IP 四层模型

OSI 模型全面复杂,并没有实际应用,实际网络使用的是 TCP/IP 四层模型。

应用层
传输层
网络层
网络接口层

四层模型是参考的 OSI 模型进行的划分。其中物理层和数据链路层换成网络接口层——TCP/IP 模型侧重的是互联网通信核心,因此没有物理层。表示层和会话层合并到应用层。

网络五层模型

这种模型是七层和四层的折中,用于计算机网络教学。

应用层
传输层
网络层
数据链路层
物理层

TCP 连接

三次握手

tcp 连接需要经过三次握手。

  • 客户端发送 SYN 请求连接报文到服务端。
  • 服务端收到报文,发送 SYN + ACK 请求连接和应答报文到客户端。
  • 客户端收到报文,发送 ACK 应答报文到服务端。

在三次握手之后,客户端分配资源(内存空间)(在二次握手后就分配了),服务端分配资源(socket 队列),然后双方可以发送接收数据包。

如果服务端没有收到 ACK 报文,这时客户端可以发送数据包,但服务端不会接收,因为服务端还没有分配相关资源。

为什么是三次?

如果是两次,当客户端发出的 SYN 延迟了,一直到报文失效服务端才接收到,服务端分配资源,发送 SYN + ACK 报文到客户端,但因为第一次的 SYN 失效,客户端不认可这次连接,则双方连接并没有建立,服务端就浪费了资源。

四次挥手

断开 TCP 连接需要四次挥手。

  • 客户端发送 FIN 请求断开报文表示不再发送数据。
  • 服务端收到报文,发送 ACK 确认应答报文。服务端仍可以发送数据。
  • 服务端发送 FIN 请求断开报文。
  • 客户端收到报文,发送 ACK 确认应答报文。