32.网络调试工具
①网络调试助手
②Wareshark抓包
③Iperf是一个TCP/IP和UDP/IP的性能测量工具,能够提供网络吞吐率信息,以及震动、丢包率、最大段和最大传输单元大小等统计信息;从而能够帮助我们测试网络性能,定位网络瓶颈。
31.端口重入问题
30.内核调试,可以借鉴此方法
29.DHCP状态转换图
28.DNS域名解析和DHCP动态配置IP地址属于应用层的范畴,IGMP(网际组管理协议)多播功能属于网络层的范畴。
27.int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout);
int maxfdp是一个整数值,是指集合中所有文件描述符的范围,即所有文件描述符的最大值加1,
readfds:select监视的可读文件句柄集合。
writefds: select监视的可写文件句柄集合。
exceptfds:select监视的异常文件句柄集合。
timeout:本次select()的超时结束时间。
26.Iperf是一个TCP/IP和UDP/IP的性能测量工具,能够提供网络吞吐率信息,以及震动、丢包率、最大段和最大传输单元大小等统计信息;从而能够帮助我们测试网络性能,定位网络瓶颈。
25.TCP函数调用流程
24.API函数与TCP状态转换
23.TCP连接状态图
22.传输控制协议(TCP)
控制块连接
21.UDP层函数关系函数
20.用户数据报协议(UDP)
19.ICMP洪水
18.ICMP网际控制报文协议
17.ping命令
16.IP数据包的16位首部校验和,采用二进制反码求和。使用函数static u16_t lwip_standard_chksum(void*dataptr,u16_t len),返回值为0,则校验正确。
15.ARP攻击
14.ARP层总流程图
13.ARP请求数据包函数:err_t etharp_raw(struct netif*netif,const struct eth_addr*ethsrc_addr,const struct eth-addr*ethdst_addr,const struct eth_addr*hwsrc_addr,const struct ip_addr*ipsrc_addr,const struct eth_addr*hwdst_addr,const struct ip_addr*ipdst_addr,const u16_t opcode)
参数netif:发送ARP包的网络接口结构
参数ethsrc_addr:以太网帧首部中的以太网源地址值
参数ethdst_addr:以太网帧首部中的以太网目的地址值
参数hwsrc_addr:ARP数据包中的发送方MAC地址
参数ipsrc_addr:ARP数据包中的发送方IP地址
参数hwdst_addr:ARP数据包中的接收方MAC地址
参数ipdst_addr:ARP数据包中的接收方IP地址
参数opcode:ARP数据包中的OP字段值
12.ARP协议的核心就是对ARP缓存表的操作,实质就是对缓存表的建立、更新、查询等操作。
11.网卡初始化函数err_t ethernetif_init(struct netif *netif)
10.向系统注册一个网络接口设备
struct netif *netif_add(struct netif *netif,struct ip_addr *ipaddr,struct ip_addr *netmask,struct ip_addr *gw,void *state,err_t(*init)(struct netif *netif),err_t(*input)(struct pbuf*p,struct netif *netif)),
参数netif:指向一个已分配好的netif结构体
参数ipaddr:网络接口的IP地址
参数netmast:网络接口子网掩码
参数gw:网关地址
参数state:用户自定义的一些数据信息
参数init:网络接口的初始化函数
参数input:网络接口向IP层提交数据包的函数
返回值:成功注册的网络接口结构指针
9.数据包释放函数u8_t pbuf_free(struct pbuf*p).
8.数据包申请函数 struct pbuf*pbuf_alloc(pbuf_layer,u16_t length,pbuf_type type),其中layer指定该pbuf数据所处的层次,分配函数根据该值在pbuf数据区预留出首部空间,length表示需要神奇的数据区长度,type指出需要申请的pbuf类型。
7.动态内存池与动态内存堆
动态内存池(POOL)分配策略可以说是一个比较笨的分配策略了,但其分配策略实现简单,内存的分配、释放效率高,可以有效防止内存碎片的产生。用户只能申请大小固定的空间。相关函数void memp_init(void),void *memp_malloc(memp_t type),void memp_free(memp_t type,void*mem)。
动态内存堆分配策略的本质就是对一个事先定义好的内存块进行合理有效的组织和管理,其内存分配的策略采用首次拟合方式,只要找到一个比用户请求空间大的空闲块,就从中切割出合适的块,并把剩余的部分返回到动态内存堆中。void mem_init(void),void *mem_malloc(mem_size_t size),void mem_free(void *rmem)。
6.ARP与ICMP的区别
①定义的不同: A.ARP含义是address resolution protocol,地址解析协议,用于将网络层的IP地址解析为数据链路层的物理地址(mac地址)。B.ICMP是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。
②工作原理的不同:A.在主机启动时,主机上的ARP映射表为空;当一条动态ARP映射表项在规定时间没有使用时,主机将其从ARP映射表中删除掉,以便节省内存空间和ARP映射表的查找时间。如果在ARP映射表中找不到对应的mac地址,主机创建一个ARP request,并以广播方式在以太网上发送。该网段上的所有主机都可以接收到该请求,但只有被请求的主机会对该请求进行处理。B.在基于IP数据报的网络体系中,网关必须自己处理数据报的传输工作,而IP协议自身没有内在机制来获取差错信息并处理。为了处理这些错误,TCP/IP设计了ICMP协议,当某个网关发现传输错误时,立即向信源主机发送ICMP报文,报告出错信息,让信源主机采取相应处理措施,它是一种差错和控制报文协议,不仅用于传输差错报文,还传输控制报文。
③使用范围不同: A. ARP被设计成支持硬件广播的网络上使用,这就意味着ARP将不能在X.25网络上工作。
B. 所用使用IP的主机和路由器都必须使用ICMP
3.今天跨过移植部分,直接看第三/四章RAW编程接口UDP/TCP实验部分,大致浏览了一下。
2.LWIP数据包和网络接口管理参考《嵌入式网络那些事 LWIP协议深度剖析与实战演练》作者朱升林。暂时不要买,不要看!!!太底层的东西不好理解。晕,已经看完了一遍(2010/03/20)。
1.需要了解动态内存管理实验。见《STM32H7开发指南-HAL库版本_V1.0》第44章内存管理实验。