注:推荐看<<TCP/IP详解 卷1:协议>>第一章的概述
TCP/IP网络协议栈基础介绍
应用层 | |
传输层 | 主要包括TCP和UDP |
网络层 | 进行逻辑地址寻址,实现不同网络之间的路径选择 控制子网络的运行 协议:IP,ICMP,IGMP,ARP,RARP等 |
网络接口层 | (数据链路层和物理层 IEEE802.2-802.11) 设备驱动等 |
网络层提供点到点的服务,传输层提供端到端的服务。
主要代码
geiEndIntHandle--->geiEndRxHandle--->
END_RCV_RTN_CALL--->muxReceive--->
endEtherPacketDataGet[获取包数据] --->
pProto->rr.endRcv--->ipcom_drv_eth_recv_end--->
ipcom_pkt_input
网络数据在接收或发送时的数据流动情况:如图1

在收发网络数据时,在每一层的数据头格式如图2所示:

每一层对应的代码如下:
网络接口层:
ipnet_eth.c和网卡的驱动代码
网络层:
ipnet_ip4.c(IPv4)和ipnet_ip6.c(IPv6)
ipnet_icmp6.c(IPv4的icmp和igmp协议被整合到了ipnet_ip4.c中)
传输层:
ipnet_udp.c(UDP)
iptcp.c(TCP)
应用层:
ipcom_telnet.c等
扩展
在vxworks中还增加了一个end层,mux层
muxLib - MUX 网络接口库
常用函数
muxLibInit( ) - 初始化 MUX 的全局状态
muxBind( ) - 在网络服务和 END 之间创建绑定
muxSend( ) - 在网络接口上发送数据包
muxPollSend( ) - 在网络接口上发送数据包
muxPollReceive( ) - 轮询来自设备驱动程序的数据包
muxLinkHeaderCreate( ) - 将链路级标头附加到数据包
muxAddressForm( ) - 形成具有链路层地址的帧
muxPacketDataGet( ) - 解析数据包中的链路标头信息
muxPacketAddrGet( ) -从数据包中获取地址信息
endFirstUnitFind() - 找到命名设备的第一个单元
muxDevExists( ) - 查看设备是否已经加载到 MUX(不推荐)
muxTkDrvCheck( ) - 检查设备是 NPT 还是 END 接口
描述
该库提供了定义 MUX 接口的例程,这是一种处理数据链路层和网络协议层之间通信的工具。使用 MUX,VxWorks 网络堆栈将数据链路层和网络层解耦。因此,驱动程序和服务不再需要了解彼此的内部结构。因此,网络驱动程序和网络服务几乎是相互独立的。这种独立性使得添加新的驱动程序或服务变得更加容易。例如,如果您添加新的基于 MUX 的“END”驱动程序,则所有现有的基于 MUX 的服务都可以使用新驱动程序。同样,如果您添加新的基于 MUX 的服务,任何现有的 END 都可以使用 MUX 访问新服务。
要使用此功能,请包含以下组件:INCLUDE_MUX
endLib - 基于 END 的驱动程序的支持库
常用函数
endPoolCreate( ) - 为 END 驱动程序创建缓冲池
endPoolJumboCreate( ) - 为 END 驱动程序创建巨型缓冲池
endPoolDestroy( ) - 销毁使用 endPoolCreate( ) 创建的池
endPoolTupleGet ( ) - 为 END 驱动程序分配 mBlk 元组
endPoolTupleFree ( ) - 为 END 驱动程序释放一个 mBlk 元组
endMcacheGet( ) - 从 mBlk 回收缓存中分配一个 mBlk 元组
endMcachePut( ) - 在 mBlk 回收缓存中存储一个 mBlk 元组
endMcacheFlush( ) - 从 mBlk 回收缓存中刷新所有元组
描述
该库包含 END 样式网络驱动程序的支持例程。这些例程对所有 END 风格的驱动程序都是通用的。专门的例程应该只出现在驱动程序本身中。所有类型的驱动程序(END2、END、NPT)共享的例程都可以在 endCommon 中找到。
要使用此功能,请包含以下组件: INCLUDE_END