云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > lwip中各种函数,标志位的总结

lwip中各种函数,标志位的总结

  • 62 次阅读
  • 3 次下载
  • 2025/5/5 7:46:40

要是state, netif, ethaddr, cttime)

LWIP利用netif.input指向的函数接收以太网数据包,通常这个函数是ethernet_input。ethernet_input 根据以太网首部的类型字段判断收到的数据包的类型,如果是IP 包,则将该包递交给etharp_ip_input,如果是ARP包,则将该包递交给 etharp_arp_input并不是说ethernet_input 直接与底层硬件交互接收数据包,而是更底层的函数接收到数据包后将数据包递交给ethernet_input,ethernet_input再对其进行处理 ARP应答包,主要的工作就是更新arp表

etif.output指向的函数发送IP数据包,通常这个函数是etharp_output。注意,这里并不是说etharp_output直接与底层硬件交互发送数据包,而是将数据包做相应的处理,主要是将IP数据包打包成以太网帧数据,最终递交给netif.linkoutput函数来发送的。

IP层的输入

8位协议字段用来描述该IP 数据包是来自于上层的哪个协议,该值为1表示为ICMP协议,该值为2表示IGMP协议,该值为6表示TCP协议,该值为17表UDP协议

LWIP中是怎么样来描述这个IP数据报头的,使用的结构叫ip_hdr

从以太网底层进来的数据包经过ethernet_input函数分发给

IP模块或者ARP模块,分发给IP 模块是通过调用ip_input 函数完成的,当然在递交前,ethernet_input需要将数据包去掉以太网头

对IP 数据报头做校验,该工作是函数inet_chksum 完成的 ip_input 函数会遍历netif_list链表上的netif结构以找到匹配的IP地址,并记录该netif结构体变量,也即记录该网卡 这就是IP 分片数据包的重装,ip_input函数通过数据包的3位标志和13位片偏移字段判断发给自己的该IP包是不是分片包,如果是,则需要将该分片包暂存,等到接收完所有分片包后,统一将整个数据包递交给上层应用程序

ip_input函数根据IP数据包头内部的协议字段判断该数据包应该被递交给哪个上层协议,并调用相应的函数递交数据包。是UDP协议,则调用udp_input函数;是TCP协议,则调用 tcp_input 函数;是ICMP协议,则调用icmp_input 函数;是IGMP协议,则调用igmp_input函数;如果都不是,则调用函数icmp_dest_unreach 返回一个协议不可达ICMP 数据包给源主机,同时删除数据包。

TCP的建立与断开

源端口号和目的端口号,用于标识发送端和接收端的应用进程。这两个值加上IP 首部中的源IP地址和目的IP地址就能

唯一确定一个TCP连接。一个IP地址和一个端口号也称为一个插口(socket)

32位序号字段用来标识从TCP发送端到TCP接收端的数据字节流,用它来标识这个文段中的第一个数据字节的序号。当建立一个新的连接时,SYN标志置1,序号字段包?由这个发送主机选择的该连接上的初始序号ISN(Initial Sequence Number)。该主机要发送数据的第一个字节序号为ISN+1 32 位确认序号只有ACK标志为1时才有效,它包?发送确认的一端所期望收到的下一个序号。因此,确认序号应当是上次已成功收到数据字节序号加 1。当一个TCP连接被正确建立后,ACK字段总是被设置为1的。

在T C P首部中有6个标志比特。URG紧急指针(urgent pointer)有效标识;ACK确认序号有效标识;PSH 接收方应该尽快将这个报文段交给应用层;RST重建连接;SYN同步序号,用来发起一个连接;FIN 发端完成发送任务 最长报文大小,又称为 MSS PACK_STRUCT_BEGIN struct tcp_hdr {

PACK_STRUCT_FIELD(u16_t src); // 源端口 PACK_STRUCT_FIELD(u16_t dest); // 目的端口 PACK_STRUCT_FIELD(u32_t seqno); // 序号 PACK_STRUCT_FIELD(u32_t ackno); // 确认序号

PACK_STRUCT_FIELD(u16_t _hdrlen_rsvd_flags); // 首部长度+保留位+标志位

PACK_STRUCT_FIELD(u16_t wnd); // 窗口大小 PACK_STRUCT_FIELD(u16_t chksum); // 校验和 PACK_STRUCT_FIELD(u16_t urgp); // 紧急指针 } PACK_STRUCT_STRUCT; PACK_STRUCT_END

它首先打开某个端口,进入LISTEN状态以侦?客户端的连接请求。当服务器收到客户端的SYN连接请求,则进入SYN_REV状态,并向客户端返回一个ACK及自身的SYN包,此后,服务器等待客户端返回一个确认包,收到该ACK包后,服务器进入ESTABLISHED状态,并可以和服务器进行稳定的数据交换过程。

当服务器收到客户端发送的一个断开数据包FIN时,则进入CLOSE_WAIT状态,并向上层应用程序通告这个消息,同时向客户端返回一个ACK包,此时客户端到服务器方向的连接断开成功;此后,当服务器上层应用处理完毕相关信息后会向客户端发送一个FIN包,并进入LASK_ACK状态,等待客户端返回一个ACK包,当收到返回的ACK包后,此时服务器到客户端方向的连接断开成功,服务器端至此进入初始的CLOSED状态

TCP控制块

搜索更多关于: lwip中各种函数,标志位的总结 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

要是state, netif, ethaddr, cttime) LWIP利用netif.input指向的函数接收以太网数据包,通常这个函数是ethernet_input。ethernet_input 根据以太网首部的类型字段判断收到的数据包的类型,如果是IP 包,则将该包递交给etharp_ip_input,如果是ARP包,则将该包递交给 etharp_arp_input并不是说ethernet_input 直接与底层硬件交互接收数据包,而是更底层的函数接收到数据包后将数据包递交给ethernet_input,ethernet_input再对其进行处理 ARP应答包,主要的工作就是更新arp表 etif.output指向的函数发送IP数据包,通常这个函数是etharp_output。注意,这里并不是说etharp_output直接与底层硬件交互发送

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com