TCP/IP 传输协议,即传输控制/网络协议,也叫作网络通讯协议。它是在网络的使用中的最基本的通信协议。TCP/IP 传输协议对互联网中各部分进行通信的标准和方法进行了规定。并且,TCP/IP传输协议是保证网络数据信息及时、完整传输的两个重要的协议。TCP/IP传输协议是严格来说是一个四层的体系结构,应用层、传输层、网络层和数据链路层都包含其中。TCP/IP协议是Internet最基本的协议,其中应用层的主要协议有Telnet、FTP、SMTP等,是用来接收来自传输层的数据或者按不同应用要求与方式将数据传输至传输层;传输层的主要协议有UDP、TCP,是使用者使用平台和计算机信息网内部数据结合的通道,可以实现数据传输与数据共享;网络层的主要协议有ICMP、IP、IGMP,主要负责网络中数据包的传送等;而网络访问层,也叫网路接口层或数据链路层,主要协议有ARP、RARP,主要功能是提供链路管理错误检测、对不同通信媒介有关信息细节问题进行有效处理等。
IP API 包括用于网络信息检索的通用函数,例如查询已安装的网络接口卡 (NIC)、IP 地址、地址转换函数、错误处理等。 此外,IP API 还具有一些用于套接字操作的特殊功能,例如设置套接字选项或绑定。
IP 系列函数 | ||
---|---|---|
Name | Description | Comment |
IpAddAdapterAddress | 将地址添加到具有给定索引的网络接口 | 使用过程中需要注意 TCP/IP 堆栈选择 |
IpBind | 通过指定的 socket 将地址和端口相关联 | 使用 TcpConnect 或 TcpListen 时不要使用 IpBind |
IpGetAdapter | 获取指定通道的接口索引 | 对于 VLAN ,必须提供通道和 vlanId |
IpGetAdapterAddress | 检索与网络接口关联的地址 | CANoe 堆栈中考虑了所有分配的地址,包括 VLAN 地址 |
IpGetAdapterAddressAsString | 检索与指定网络接口关联的第一个地址并使用字符串表示 | - |
IpGetAdapterChannel | 返回具有给定索引的网络适配器所连接的以太网通道的编号(Eth 1 为 1) | - |
IpGetAdapterAddressCount | 返回属于给定地址组中分配给具有给定索引的适配器的地址计数 | - |
IpGetAdapterCount | 返回本地计算机的网络接口数 | CANoe 堆栈中考虑了所有分配的地址,包括 VLAN 地址 |
IpGetAdapterDescription | 检索指定网络接口的描述 | 返回的错误值: ERROR_NOT_ENOUGH_MEMORY (8): 存储描述的数组空间小 WSA_INVALID_PARAMETER (87): 网络接口索引无效 |
IpGetAdapterGateway | 检索与指定网络接口关联的默认网关地址 | 在 on prestart 期间网关信息尚不可用 堆栈完全初始化,在 on start 首先可用 |
IpGetAdapterGatewayAsString | 检索与指定网络接口关联的默认网关地址并使用字符串表示 | 在 on prestart 期间网关信息尚不可用 堆栈完全初始化,在 on start 首先可用 |
IpGetAdapterMacId | 获取接口的 MAC ID | 错误码: WSA_INVALID_PARAMETER (87): 网络接口索引无效 WSAEADDRNOTAVAIL (10049): 未找到MAC ID |
IpGetAdapterMask | 检索与指定网络接口关联的地址掩码 | 错误码: ERROR_NOT_ENOUGH_MEMORY (8): 掩码数组小 WSA_INVALID_PARAMETER (87): 网络接口索引无效 WSAEADDRNOTAVAIL (10049): 无可用适配器地址 |
IpGetAdapterMaskAsString | 检索与指定网络接口关联的地址掩码并使用字符串表示 | 错误码: ERROR_NOT_ENOUGH_MEMORY (8): 掩码数组小 WSA_INVALID_PARAMETER (87): 网络接口索引无效 WSAEADDRNOTAVAIL (10049): 无可用适配器地址 |
IpGetAdapterVlanDefaultPriority | 获取给定适配器的 VLAN 优先级 | 错误码: WSA_INVALID_PARAMETER (87): 网络接口索引无效/非 VLAN 适配器 SOCKET_ERROR (-1): 函数执行失败 |
IpGetAdapterVlanId | 获取给定适配器的 VLAN ID | 错误码: WSA_INVALID_PARAMETER (87): 网络接口索引无效/非 VLAN 适配器 SOCKET_ERROR (-1): 函数执行失败 |
IpGetAddressAsArray | 将冒号表示法的地址字符串转换为地址字节为网络顺序的 16 字节数组 | - |
IpGetAddressAsNumber | 将数字地址转换为点表示法的地址字符串 | - |
IpGetHostByName | 获取给定主机名的地址 | 首先在 CANoe 模拟设置中搜索给定的主机名,然后在指定的数据库中搜索。 如果名称未在那里定义,则使用操作系统堆栈通过 DNS 请求确定。 为此,必须在 CANoe TCP/IP 堆栈配置对话框中选择操作系统堆栈。 然后在相应的回调函数 OnIpGetHostByName 中返回结果 |
IpGetLastError | 返回上次失败的操作的 Winsock 2 错误代码 | - |
IpGetLastSocketError | 返回指定 socket 上最后一次操作失败的 Winsock 2 错误代码 | - |
IpGetLastSocketErrorAsString | 检索在指定 socket 上失败的最后一个操作的错误消息 | 错误码: WSA_INVALID_PARAMETER (87): socket 无效 |
IpGetSocketAddressFamily | 返回给定 socket 的地址族 | AF_INET (2): IPv4 地址 AF_INET6 (28): IPv6 地址 SOCKET_ERROR (-1): 无效的 socket |
IpGetSocketName | 返回 socket 的本地绑定地址和端口 | 错误码: WSA_INVALID_PARAMETER (87): socket 的索引无效 SOCKET_ERROR (-1): 函数执行失败 |
IpGetSocketOption | 读取给定 socket 选项的值 | 使用过程中需要注意 TCP/IP 堆栈选择 |
IpGetStackParameter | 获取 TCP/IP 堆栈的给定参数的值 | 参数的名称以点分隔的路径形式给出 |
IpJoinMulticastGroup | 在给定 socket 上的添加组播组 | 要接收多播消息,必须先加入多播组 要离开多播组,使用函数 IpLeaveMulticastGroup 发送多播消息之前,必须调用 IpSetMulticastInterface |
IpLeaveMulticastGroup | 离开先前加入的多播组 | 之后不再接收组播消息 |
IpRemoveAdapterAddress | 删除具有给定索引的网络接口中的地址 | 使用过程中需要注意 TCP/IP 堆栈选择 |
IPRouteAddGateway | 向 TCP/IP 堆栈添加网关路由 | 添加路由后,tcp/ip 堆栈将通过给定的网关发送数据包至该目标地址或网络 |
IPRouteAddHost | 将静态主机路由添加到 tcp/ip 堆栈中某个接口的路由表中 | 接口或网络路由必须已经存在 |
IPRouteAddInterface | 将接口路由添加到 TCP/IP 堆栈 | 安装这样的路由后,tcp/ip 堆栈将在给定接口上发送目的地为该目的地的数据包 |
IPRouteDeleteGateway | 删除 TCP/IP 堆栈添加的网关路由 | 根据给定的掩码 (IPv4) 或前缀 (IPv6),删除到单个主机或网络的路由 |
IPRouteDeleteHost | 从 TCP/IP 堆栈中删除主机路由 | 接口或网络路由必须已经存在 |
IPRouteDeleteInterface | 从 TCP/IP 堆栈中删除接口路由 | - |
IpSetAdapterGateway | 设置默认网关地址 | 只能有一个默认网关并且旧的默认网关地址将被覆盖 默认网关必须位于网络堆栈中配置的子网之一中 要移除网关,请将地址设置为 0.0.0.0 (IPv4) 或 :: (IPv6) |
IPSetAdapterStatus | 向上或向下设置 TCP/IP 堆栈的特定适配器 | 设置适配器后,该适配器的所有 IP 地址将被删除,并且将停止在该适配器上发送或接收数据包 如果在此适配器上配置的网络中配置了默认网关,则它也将被删除 再次设置适配器时,将重新配置 TCP/IP 堆栈对话框中配置的地址并再次设置默认网关 |
IpSetMulticastInterface | 设置传出组播 Message 接口 | 要接收组播消息,组播组必须先加入 IpJoinMulticastGroup 要离开组播组,请使用 IpLeaveMulticastGroup |
IpSetSocketOption | 修改 socket 选项 | 使用过程中需要注意 TCP/IP 堆栈选择 |
IpSetStackParameter | 设置 TCP/IP 堆栈的给定参数的值 | 参数的名称以点分隔的路径形式给出 |
OnIpAddressAdded | 当地址被添加到网络接口时被调用 | 回调仅适用于使用单个 TCP/IP 堆栈实例的模拟节点 |
OnIpAddressRemoved | 当地址从网络接口中删除时调用 | 回调仅适用于使用单个 TCP/IP 堆栈实例的模拟节点 |
OnIpGetHostByName | 当阻塞 IpGetHostByName 函数完成时调用它 | - |
OnIpReceivePrepare | 在接收到的数据包被分派到 TCP/IP 堆栈之前分派 | 可以操纵包的内容或阻止从总线接收包 |
OnIpSendPrepare | 在 TCP/IP 堆栈发送数据包之前调用 | 可以操纵包的内容或阻止从总线接收包 |
关于 socket 的 option 的介绍,请查看下表。对于参数 Stacks 的值做一个单独的说明:
C:CANoe 内部网络栈支持
W:Windows 网络堆栈支持
Socket Options: IPPROTO_IP | |||||
---|---|---|---|---|---|
Socket Option | Set/Get | Description | Type | Stack | Comment |
IP_TOS | set/get | 在此 socket 上的传出数据报中设置或获取 IPv4 协议中的服务类型字段 | DWORD | C/W | 该值必须在 0-255 的范围内 |
IP_TTL | 设置或获取此 socket 上传出数据报中 IP 标头的 TTL 字段的值 | DWORD(boolean) | C/W | 该值必须在 0-255 的范围内 | |
IP_MULTICAST_TTL | 设置或获取此 socket 上 IPv4 组播流量的 TTL 字段值 | DWORD | C/W | - | |
IP_MULTICAST_LOOP | 此选项控制在同一节点上发送的多播数据是否会被加入同一多播组的侦听套接字接收 | DWORD(boolean) | C/W | - | |
IP_DONTFRAGMENT | 如果设置为TRUE,则IP标头中的不翻译标志被设置,数据将不再翻译 | DWORD(boolean) | C/W | 仅适用于 UDP 套接字 | |
IP_RECEIVE_BROADCAST | 允许或禁止接收广播消息 | DWORD(boolean) | W | 仅适用于 UDP 套接字 | |
IP_PORTRANGE | 选择用于未指定端口的范围,支持以下值: IP_PORTRANGE_DEFAULT (0) IP_PORTRANGE_HIGH (1) IP_PORTRANGE_LOW (2) | DWORD | C | - | |
IP_ONESBCAST | 当在 UDP socket 上设置此选项时,传出广播数据报的目标地址将设置为无向广播地址 | DWORD(boolean) | C | - | |
IP_BINDANY | 当此选项设置为非零值时,可以绑定到任何地址,甚至是未绑定到任何接口的地址 | DWORD(boolean) | C | - | |
IP_MINTTL | 设置接收数据包时必须具有的最小可接受 TTL 值 | DWORD | C | 如果 TTL 值较低,则数据包将被丢弃 |