SylixOS TCP 报文接收流程简述

SylixOS TCP 数据段接收流程简述

Q:SylixOS TCP 数据段接收流程简述
1、数据包最初由网卡驱动中断接收,通过调用 tcpip_input() 送入 LwIP 协议栈;
2、在 tcpip_inpkt() 中将 ip_input() 通过 mbox (本质为消息队列) 投递至线程 “t_netproto”,并在线程中执行 ip_input();
3、在 ip_input() 中针对 IPv4 报文调用 ip4_input() 进行处理。针对 TCP 报文,tcp_input() 处理了基本的协议规则;
4、针对有效数据包,通过调用 TCP_EVENT_RECV(即调用 tcp_recv() 注册的 recv_tcp())将数据包通过 mbox 发送至应用线程接收部分;
5、应用线程接收部分通过 socket 接口调用 read() 读取数据包,本质即通过 mbox 接收传递过来的消息,调用流程如下:



整体框架图如下:


    • Related Articles

    • SylixOS TCP 数据段发送流程简述

      Q:SylixOS TCP 数据段发送流程简述 1、在 LwIP 协议栈中使用 TCP 控制块结构 struct tcp_pcb 管理 TCP 连接,使用 TCP 段结构 struct tcp_seg 描述 TCP 段。在 TCP 控制块中有两个队列 unsent 与 unacked 表示所有未发送的 TCP 数据段和发送了还未收到确认的 TCP 数据段。如下图所示。 2、TCP 连接发送数据由应用层发起,数据段构建后首先被缓存在 TCP 控制块的 unsent ...
    • TCP/UDP 通信中 server 端异常关闭后无法再次连接

      Q:在 TCP/UDP 通信中,服务器和客户端正常通信时若手动异常关闭 server 端进程,再次运行开启 server 端程序会在 bind 函数位置报错,造成无法连接? 尝试在 bind 函数前添加 setsockopt 函数增加复用功能,重用本地地址,代码如下  iRet = setsockopt(sockFd, SOL_SOCKET, SO_REUSEADDR, &iRet, sizeof(int));     if(iRet < 0){         ...
    • SylixOS 协议栈学习(四)ping 工作流程

      Ping工作流程: 1、涉及协议介绍       运行ping程序时,会用到以下协议:       ICMP(因特网控制报文协议):用于IP主机、路由器直接传递控制消息(一般是差错信息,如TCP/UDP传输失败,会构建ICMP报文返回)。       IP协议:一种不可靠、无连接的传输协议(目的是为了更好的提供传输服务)。(对于TCP传输,已十分可靠,不需要在IP层再链接;UDP本身就是不可靠、无连接的协议,使用IP协议能更快传输)。     ...
    • SylixOS 功能介绍及版本差异

      SylixOS功能介绍及版本差异 SylixOS 标准版 SylixOS 标准版是 SylixOS 的基础版本,具备如下功能: 兼容 IEEE 1003(ISO/IEC 9945)操作系统接口规范; 兼容 POSIX 1003.1b(ISO/IEC 9945-1)实时编程标准; 支持国军标 GJB7714-2012 操作系统接口规范; 优秀的实时性能(任务调度与切换算法时间复杂度为 O(1)); 支持无限多任务; 抢占式调度支持 256 个优先级; 支持虚拟进程; ...
    • SylixOS 动态关核架构流程

      1. SylixOS 动态关核接口 SylixOS 支持动态关核操作,通过如下应用函数; VOID  Lw_PowerM_CpuSet(ULONG  ulNCpus, UINT  uiPowerLevel); 函数Lw_PowerM_CpuSet原型分析: 参数 ulNCpus是运行态的CPU 核个数;  参数 uiPowerLevel是CPU能耗级别。 2. 基本流程 系统函数调用流程如图 2.1: (1) Lw_PowerM_CpuSet( ...