复用和分用
# 复用和分用
为什么要进行多路复用/分用
如果某层的一个协议对应直接上层的多个协议/实体,则需要复用/分用
接收端进行多路分用
传输层依据头部信息将收到的 Segment 交给正确的 Socket,即不同的进程
示意图
发送端进行多路复用
从多个 Socket 接收数据,为每块数据封装上头部信息,生成 Segment,交给网络层
# 分用的工作原理
主机接收到IP数据报(datagram)
- 每个数据报携带源IP地址、目的IP地址
- 每个数据报携带一个传输层的段(Segment)
- 每个段携带源端口号和目的端口号
TCP/UDP 段格式
分用的工作原理
- 主机收到 Segment 之后,传输层协议提取 IP 地址和端口号信息,将 Segment 导向相应的 Socket
- TCP做更多处理
# 无连接的分用
利用端口号创建Socket
DatagramSocket mySocket1 = new DatagramSocket(99111);
DatagramSocket mySocket2 = new DatagramSocket(99222);
1
2
2
UDP 的 Socket 用二元组标识
- (目的IP地址,目的端口号)
主机收到UDP段后
- 检查段中的目的端口号
- 将UDP段导向绑定在该端口号的 Socket
来自不同源 IP 地址和/或源端口号的 IP 数据包被导向同一个 Socket
示例
# 面向连接的分用
TCP 的 Socket 用四元组标识
- 源IP地址
- 源端口号
- 目的 IP 地址
- 目的端口号
接收端利用所有的四个值将 Segment 导向合适的 Socket
服务器可能同时支持多个 TCP Socket
- 每个 Socket 用自己的四元组标识
Web 服务器为每个客户端开不同的 Socket
面向连接的分用示例
多线程 Web 服务器示例
- 一个进程创建多个线程,通过多个线程来进行 TCP 连接
编辑 (opens new window)