Go开发企业级微服务网关(0)网络基础

OSI 七层网络协议

经典协议与数据包

以太网标头主要包含MAC地址信息
IP标头主要包含IP信息
TCP标头包含TCP类型和数据包长度

TCP三次握手、四次挥手

三次握手主要目的是保证连接是双工的,可靠性则更多用过重传机制来保证。

time_wait 需要等待 2MSL 的原因

  • 保证 TCP 协议的全双工连接能够可靠关闭(防止客户端最后一个ACK丢失导致服务端无法关闭连接)
  • 保证本次连接的重复数据段从网络中消失

TCP 流量控制

  • 由于通信双方网速不同,任一方发送过快都会导致对方消息处理不过来,因此需要把数据放到缓冲区中
  • 如果缓冲区满了,发送方继续发送,接收方会丢弃数据包。因此需要控制发送速率
  • 缓冲区大小称为接收窗口

TCP 拥塞控制

  • 拥塞控制是调节网络的负载
  • 接收方网络资源繁忙,因未能及时响应 ACK 导致发送方重传大量数据,会导致网络更加拥堵
  • 拥塞控制是动态调整 win 的大小,不只是依赖缓冲区大小确定窗口大小
1. 慢开始和拥塞避免
2. 快速重传和快速恢复

粘包和拆包

  • 应用程序写入的数据大于套接字缓冲区大小,将会发生拆包
  • 应用程序写入的数据小于套接字缓冲区大小,网卡将应用多次写入的数据发送到网络上,将会发生粘包
  • 进行 MSS (最大报文长度)大小的 TCP 分段,当 TCP 报文长度 – TCP 头部长度 > MSS 的时候将发生拆包
  • 接收方不及时读取套接字缓冲区数据,也将发生粘包

发表评论