芋圆-钰源
我只想好好学习....
展开
-
LWIP_简记(8.tcpip_init()之lwip_init())
LWIP一句话记住就行:一项工程,两份配置,三种内存分配,四套操作API,五步初始化,六个"数据流",七个数据结构-------------------------------------------从这一讲开始我们来剖析一下lwip_init()中那些子系统的初始化.先上源码:/** * @ingroup lwip_nosys * Initialize all modules. ...原创 2020-03-28 15:22:27 · 4091 阅读 · 1 评论 -
LWIP_简记(7.tcpip_init()之tcpip_thread)
LWIP一句话记住就行:一项工程,两份配置,三种内存分配,四套操作API,五步初始化,六个"数据流",七个数据结构-------------------------------------------接着上一篇的讲:/** * @ingroup lwip_os * Initialize this module: * - initialize all sub modules * - ...原创 2020-03-28 12:45:17 · 3379 阅读 · 1 评论 -
LWIP_简记(6.走一遍初始化)
LWIP一句话记住就行:一项工程,两份配置,三种内存分配,四套操作API,五步初始化,六个"数据流",七个数据结构-------------------------------------------前面在第一节乃至后面每一篇我都在强调五步初始化,第三节也实操了一下.今天呢就详细的再来讲一下这五步初始化的具体操作.1.xxx_init(网络驱动,一般由具体厂商弄,比如BCM,RTL,AW...原创 2020-03-28 10:52:28 · 2534 阅读 · 0 评论 -
LWIP_简记(5.数据包管理)
LWIP一句话记住就行:一项工程,两份配置,三种内存分配,四套操作API,五步初始化,六个"数据流",七个数据结构-------------------------------------------先整链接:https://blog.csdn.net/XieWinter/article/details/99829412这篇博文讲的特别清楚详细.前言再来自我总结:lwip说到底也就是...原创 2020-03-22 13:18:48 · 675 阅读 · 0 评论 -
LWIP_简记(4.高大上的内存管理)
LWIP一句话记住就行:一项工程,两份配置,三种内存分配,四套操作API,五步初始化,六个"数据流",七个数据结构-------------------------------------------前言在第一讲中我们已经简单的提到了lwip支持的三种内存分配策略,这里我们先来聊聊这三种内存分配的异同. |C库自带内存分配策略(malloc/free/rea...原创 2020-03-22 12:31:48 · 753 阅读 · 0 评论 -
LWIP_简记(3.今天来点儿干货,"实操")
LWIP一句话记住就行:一项工程,两份配置,三种内存分配,四套操作API,五步初始化,六个"数据流",七个数据结构-------------------------------------------相信大家有了前面的基础,已经对lwip有了个框架认识,那么今天就来实操一下 .按照惯例我喜欢条例化,那么来吧!以RTThread操作系统为例,五步曲跑通lwip.至于为啥选择RTThread...原创 2020-03-14 17:02:39 · 757 阅读 · 0 评论 -
LWIP_socket(5小总结)
1.前言一个基本的socket建立顺序是Server端:socket()bind()listen()accept()recv()Client端:socket()connect()send()没想到吧,我胡汉三又回来了,怎么说over就over呢,学习了不总结还学习干嘛?2.总结一下1)先简单说一下api的分析技巧,通过前面几篇,大家几乎都能够发现,在lwip中,其实还是...原创 2020-03-12 16:38:41 · 607 阅读 · 0 评论 -
LWIP_socket(4recv)
1.前言一个基本的socket建立顺序是Server端:socket()bind()listen()accept()recv()Client端:socket()connect()send()本文着重介绍Server端的recv()过程。还记得前一篇的accept吧,不熟悉的再回去看看.前一篇文章中,accept()生成了一个新的socket,作为server端socket...原创 2020-03-12 16:30:53 · 595 阅读 · 0 评论 -
LWIP_socket(2listen)
1.前言一个基本的socket建立顺序是Server端:socket()bind()listen()accept()recv()Client端:socket()connect()send()本文着重介绍Server端的listen()过程,这节是比较轻松的,开心的往下看就好了.用户使用socket,调用listen()时,实际调用的是lwip里的lwip_listen()...原创 2020-03-12 16:26:39 · 368 阅读 · 0 评论 -
LWIP_socket(3accept)
1.前言一个基本的socket建立顺序是Server端:socket()bind()listen()accept()recv()Client端:socket()connect()send()本文着重介绍Server端的accept()过程。会有大量代码分析,请提前准备小板凳认真听课.上一篇我们已经分析了listen()过程,listen()过程新建了pcb并把它放到了tc...原创 2020-03-12 16:23:18 · 485 阅读 · 0 评论 -
LWIP_socket(1bind)
1.前言一个基本的socket建立顺序是Server端:socket()bind()listen()accept()recv()Client端:socket()connect()send()2.lwip_bind()用户调用bind()时,实际调用的是lwip_bind(),我们从这个函数看起: 1 int 2 lwip_bind(int s, const struc...原创 2020-03-12 16:17:15 · 316 阅读 · 0 评论 -
LWIP_socket(0创建)
1.前言一个基本的socket建立顺序是Server端:socket()bind()listen()accept()recv()Client端:socket()connect()send()2.lwip_socket()用户使用socket时,首先会调用socket()函数创建一个socket。在lwip中实际调用的就是lwip_socket()函数。intlwip_...原创 2020-03-12 16:12:23 · 1736 阅读 · 1 评论 -
LWIP_ARP协议(6个人总结)
功能根据目标IP地址,寻找网络中的目的主机,获取主机MAC地址.实质IP地址和MAC地址的映射,对arp缓存表项的建立,更新,查询操作.关键数据结构表项数组[]每一个元素(即每一个表项)都有如下重要指标:IP地址<–>MAC地址状态:enum etharp_state{ETHARP_STATE_EMPTY = 0, //空ETHARP_STATE_PENDING...原创 2020-03-12 11:46:49 · 544 阅读 · 0 评论 -
LWIP_ARP协议(0协议原理)
引言从前一篇文章中,我们知道计算机中会维护一个ARP缓存表,这个表记录着IP地址与MAC地址的映射关系,我们可以通过在电脑的控制台通过arp -a指令查看一下我们自己计算机的ARP缓存表:那么什么是ARP协议呢?初始ARPARP协议是地址解析协议(Address Resolution Protocol)是通过解析IP地址得到MAC地址的,是一个在网络协议包中极其重要的网络传输协议,它与网...转载 2020-03-12 11:09:14 · 497 阅读 · 0 评论 -
LWIPARP协议(5数据包接收)
ARP数据包处理以太网是有自己独立的寻址方式(MAC地址),而对于TCP/IP的上层协议(如TCP协议、IP协议),它们是以IP地址作为网络的标识,如果没有IP地址则无法进行收发数据。当数据通过网卡中接收回来的时候,LwIP内核就需要将数据进行分解,如果是IP数据报则递交给IP协议去处理,如果是ARP数据包则交由ARP协议去处理。真正让LwIP内核去处理接收到的数据包是ethernet_inp...转载 2020-03-12 10:42:40 · 431 阅读 · 0 评论 -
LWIP_ARP协议(4数据包发送)
ARP数据包发送我们知道一个数据包从底层传递进来的流程是怎么样的,如果是ARP数据包就会给ARP去处理,如果是IP数据报就使用ip4_input()函数传递到上层,这些处理在后面的章节讲解。那么如果上层协议想要发送数据,也肯定需要经过ARP协议将IP地址映射为MAC地址才能完成发送操作,IP数据报通过ip4_output()函数将上层数据包传递到ARP协议处理,关于IP协议是怎么样传递的我们暂且...转载 2020-03-12 10:40:30 · 434 阅读 · 0 评论 -
LWIP_ARP协议(3请求包的发送)
发送ARP请求包发送ARP请求包的时候,需要填充已知的目标IP地址、源MAC地址、源IP地址等,并且需要该ARP包进行广播出去,所以以太网首部的目标MAC地址为FF-FF-FF-FF-FF-FF。LwIP先调用etharp_request()函数进行发送ARP请求包,在etharp_request()函数中会调用etharp_request_dst()函数进行发送,此时指定的目标MAC地址是e...转载 2020-03-12 10:37:58 · 678 阅读 · 0 评论 -
LWIP_ARP协议(2缓存表超时处理)
ARP缓存表的超时处理ARP表项的生存时间是5分钟,而ARP请求的等待时间是5秒钟,当这些时间到达后,就会更新ARP表项,如果在物理链路层无法连通则会删除表项。这就需要ARP层有一个超时处理函数对ARP进行管理,这些操作都是根据ARP表项的ctime字段进行的,它记录着对应表项的生存时间,而超时处理函数是etharp_tmr(),它是一个周期性的超时处理函数,每隔1秒就调用一次,当ctime的值...转载 2020-03-12 10:35:24 · 1168 阅读 · 0 评论 -
LWIP_ARP协议(1缓存表数据结构)
前言从前面的文章,我们知道,ARP协议的核心是ARP缓存表,而ARP协议的实质就是对缓存表项(entry)的建立、更新、查询等操作。那么,LwIP中是是怎么实现ARP协议的呢?ARP缓存表的数据结构LwIP使用一个arp_table数组描述ARP缓存表,数组的内容是表项的内容,每个表项都必须记录一对IP地址与MAC地址的映射关系,此外还有一些基本的信息,如表项的状态、生命周期(生存时间)以...转载 2020-03-12 10:32:45 · 708 阅读 · 0 评论 -
LWIP_简记(2.谈谈具体的配置)
LWIP一句话记住就行:一项工程,两份配置,三种内存分配,四套操作API,五步初始化,六个"数据流",七个数据结构上一篇已经提到了一项工程,粗略的介绍了大纲,以及两份配置,其实要真正弄懂LWIP,还真没那么简单,讲到配置,拿东西可多了,什么协议,TCP,UDP,PPP,IP,ICMP,IGMP…各种xxP,还有各种mem,南瘦香菇.如果你以为我这里会把所有配置列出来一通分析,那你就大错特错了...原创 2020-03-14 12:39:33 · 950 阅读 · 0 评论 -
LWIP_简记(1.不得不说一下目录结构)
当然啦不失一般性,我也会简单讲一下LWIP的目录结构,点到为止,毕竟一开始还是面对初学者,没必要整有些没的,吓到了不好.或者一些大神原本看都看到吐了的东西,再看浪费时间,扫一眼就够了.我呢,全系列以最新的2.0.0及以上开始整.小白请自觉跳转这篇博文(https://blog.csdn.net/ZCShouCSDN/article/details/79229728).先整张图:可怕不.....原创 2020-03-13 20:33:56 · 972 阅读 · 0 评论 -
LWIP_简记(0.说在前面的话)
今天开始计划做一系列LWIP的简记,什么叫简记呢?说实话,鄙人开始学习网络也不久,也还在摸爬打滚,所以也都是网上各种搜索"LWIP移植","LWIP源码分析",“LWIP手把手教学”......这些关键字,于是乎就会出现一大堆网址,资料,看多了发现还是停留在移植,目录结构的介绍,但是每每看到LWIP分析...的文章还是忍不住从头到位看一遍,生怕错过什么精彩(大同小异)内容,时间悠哉悠哉就没了.所...原创 2020-03-13 19:21:23 · 666 阅读 · 0 评论