协议分层模型

协议运作

其实就是将对应协议之间关联到协议都要先注册。在分流器中统一管理,数据包到达后一层一层解刨在转发到对应到业务层处理

  1. 例如监听tcp服务,需要注册 ipv4 arp tcp 等。
  2. 链路层 收到网卡原始数据后,通过分流器定位到ipv4协议,然后将数据包转发到ipv4协议处理
  3. 网络层ipv4层接受到数据后,在通过分流器找到传输层协议,将数据发往传输层

    1
    e.dispatcher.DeliverTransportPacket(r, p, vv)
  4. 注册到分流器后,数据包到来,后一层一层转发到传输层tcp处理

分流器

也就是每个协议层之间当协作转发关系。也就是分发网络协议到对应到协议栈处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/ 网络层协议号和传输层协议号的组合,当作分流器的key值
type protocolIDs struct {
network tcpip.NetworkProtocolNumber
transport tcpip.TransportProtocolNumber
}

// transportEndpoints 管理给定协议的所有端点。
type transportEndpoints struct {
mu sync.RWMutex
endpoints map[TransportEndpointID]TransportEndpoint
}

// transportDemuxer 解复用针对传输端点的数据包(即,在它们被网络层解析之后)。
// 它执行两级解复用:首先基于网络层协议和传输协议,然后基于端点ID。
type transportDemuxer struct {
protocol map[protocolIDs]*transportEndpoints
}

可以看到分流器是个两级结构,第一级是protocolIDs,它是网络层协议号和传输层协议号的组合。第二级是个传输层 ID-TransportEndpointID,表示传输层端的四元组:源 IP、源端口、目的 IP、目的端口。分流器执行两级解复用,首先基于网络层协议和传输协议,然后基于端点 ID。