LWIP网络协议基础

article/2025/8/28 3:06:51

1、LWIP有3种编程接口:RAW(裸机跑,不带操作系统)、NETCONN和SOCKET(要带操作系统)

例程使用的是ucos小型操作系统,ucosii任务数限制了最大只能有255个任务(其中0—空闲任务和254、255—系统任务不能用),ucosiii没有限制

程序上下文的切换采用汇编来编写,一般程序的运行过程是预处理à编译à汇编à运行,如果使用汇编进行编程可提高程序的运行效率,节省C语言转换成汇编语言的步骤,直接对集成电路操作,执行效率较高,但是不易理解,适当会点对自己来说有好处

UDP--用户数据包协议,是无连接、不可靠的传输协议,OSI七层模型中的传输层协议  TCP/IP--4层

端口号:0`65535,有一些公用端口不能使用

2、OSI模型(开放系统互连参考模型)与TCP/IP模型

2.1、OSI简介:采用了分层的结构化技术,共分七层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。TCP/IP—四层结构=应用层+传输层+网络层+网络接口层)
2.2、物理层:提供为建立、维护和拆除物理链路所需要的机械的、电气的、功能的和规程的特性;有关的物理链路上传输非结构的位流以及故障检测指示。
    数据链路层:在网络层实体间提供数据发送和接收的功能和过程;提供数据链路的流控。
  网络层:控制分组传送系统的操作、路由选择、拥护控制、网络互连等功能,它的作用是将具体的物理传送对高层透明。
  传输层:提供建立、维护和拆除传送连接的功能;选择网络层提供最合适的服务;在系     统之间提供可靠的透明的数据传送,提供端到端的错误恢复和流量控制。
  会话层:提供两进程之间建立、维护和结束会话连接的功能;提供交互会话的管理功能,如三种数据流方向的控制,即一路交互、两路交替和两路同时会话模式。
  表示层:代表应用进程协商数据表示;完成数据转换、格式化和文本压缩。
  应用层:提供OSI用户服务,例如事务处理程序、文件传送协议和网络管理等。

OSI模型是标准的、理想的网络结构,但是不切合实际的应用,所以推出TCP/IP模型,是简化后的OSI,在实际应用中比较广泛,大多数网络协议是在该基础上演变出来的,例如:http--超文本传输协议

OSI模型的应用层 + 表示层 + 会话层 == TCP/IP的应用层

OSI模型的数据链路层 + 物理层 ==  TCP/IP的网络接口层

3、UDP协议简介

UDP是用于数据包协议,是OSI参考模型中的传输层协议,是一种无连接的(TCP是面向连接的)、不可靠的传输协议。UDP协议只是尽可能的将应用层的数据发送出去,不提供任何的浏览量控制、报文确认等,也就是说当报文发送以后是无法得知报文是否安全完整的到达目的主机的。UDP只负责发送不管接收方是否接收到,无ACK应答回发)

UDP协议的优缺点:

缺点:没有确认数据包是否正确的发送到目的主机,因此UDP报文有可能丢失、出错等(可靠性低)。

    优点:由于UDP协议省去了建立连接,数据确认、流量控制等一系列的过程,因此UDP的协议代码量少,处理过程简洁,实时性好!因此适合那些对轻微的数据差错不敏感的应用,如网络电话和网络视频等。

3.1、UDP报文交付

用户进程使用UDP来传送数据时,UDP协议会在数据前加上首部组成UDP报文,并交给IP协议发送,IP层将报文封装在IP数据报中并交给底层发送,在底层,IP数据报会被封装在物理数据帧。因此,一份用户数据在被发送时,经历三次封装过程。

在接收端,物理网络先接收到数据帧,然后逐层地将数据递交给上层协议,每一层都在向上层递交前去除掉一个首部。在UDP层,它将从IP层得到UDP报文,UDP协议会根据该报文首部中的目的端口字段将报文递交给用户进程,绑定到这个目的端口进程间等到报文中的数据。从两台对等的机器上看,目的主机上IP层传递给UDP层的报文等同于源主机上UDP层传递给IP层的报文,目的主机上UDP层传递给用户进程的数据正好是源主机上用户进程传递给UDP的数据。

3.2、UDP报文格式

用户数据报 = UDP首部 + UDP数据区

由4个16位字段组成,用户数据报从哪个端口来,要到哪个端口去、总长度和校验和

3.2、UDP伪首部与校验和

伪首部完全是虚拟的,并不会与用户数据报一起被发送出去,只是在校验和计算过程中被使用,UDP校验和的计算覆盖三部分:UDP伪首部、UDP首部、UDP数据区,为16位二进制反码求和。

LWIP中使用UDP控制块来描述UDP,UDP控制块是UDP协议最核心的东西,UDP控制块是一个结构体,这个结构体在udp.h中定义。

struct udp_pcb

{

   IP_PCB;                                                  //宏IP_PCB中的各个字段

   struct udp_pcb  *next;          //指向udp_pcb,用于将控制块组织成链表

   u8_t  flags;                         //控制块状态字段

   u16_t local_port, remote_port;    //本地端口号和目的端口号

   udp_recv_fn   recv;                //处理数据的回调函数

   void  *recv_arg;              //传递给回调函数的参数

};

recv字段指向的是一个函数,这个函数需要我们来编写,当内核收到报文并匹配到某个控制块以后通过函数指针recv来回调这个我们编写的处理函数,recv指向的是udp_recv_fn类型的,udp_recv_fn如下:

typedef void (*udp_recv_fn)  (void *arg, struct udp_pcb *pcb, struct pbuf*p, ip_addr_t *addr, u16_t port);

arg:表示将传递给函数的用户自定数据。

pcb:指向接收到报文的UDP控制块结构。

p:  指向接收到的报文。

addr:表示发送该报文的的源主机地址。

port:表示发送该报文的源主机端口。

UDP控制块链表如下:

 相关API函数

函数

描述

new_udp()

新建一个UDP的PCB控制块。

udp_remove()

将一个PCB控制块从链表中删除,并释放这个控制块的内存。

udp_bind()

为UDP的PCB绑定一个本地IP地址和端口号。

udp_connect()

连接到指定IP地址主机的指定端口号,其实就是设置PCB控制块的remote_ip和remote_port。

udp_disconnect()

断开连接。

udp_send()

通过一个PCB控制块发送数据

4、TCP协议介绍

TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。面向连接就意味着两个TCP应用(通常是客户端和服务器)在进行网络通信之前必须先建立一个TCP连接,这点和UDP是不同的,UDP是无连接的。

在TCP连接中,仅有两方通信,广播和组播是不能用TCP协议的!!

TCP是提供传输的可靠性的,TCP协议通过以下方式提供可靠性:

1)应用数据会被分割成TCP认为最适合的发送的数据块,最大传输段MSS受MTU限制。

2)当TCP发出一个报文段后,会开启一个定时器,等待目的端确认收到这个报文。

3)当TCP收到另一端发送过来的数据以后会想对方发送一个确认。

4)采用分段传输的话到达目的主机的报文段可能顺序会乱,TCP会对这些报文段进行重新排序。

5)TCP还提供流量控制。

可靠性主要还是体现在三次握手、四次挥手的SYNC洪流攻击

TCP数据包结构如下:

 

4.1、TCP连接建立三次握手:

1)客户端发送SYN标志置1 的TCP报文段,并且发送自己的初始序号syn,假设为j。

2)服务器收到客户端发送的SYN,然后返回一个SYN+ACK,ACK报文包含了有效的确认段,这个值就是客户端发送的初始序号j+1。同时服务器还发送一个SYN报文,SYN表明服务器响应连接,并且在报文中包含了服务器自身的初始序号ISN,假设为k。

3)客户端收到服务器发送来的SYN报文后会再次产生一个ACK报文,在这个ACK报文中包含了对服务器发送来的SYN报文的有效确认号,该值为服务器发送的ISN加1,也就是k+1。

 4.2、TCP连接断开是四次挥手:

1)首先客户端主动发起断开连接,发送FIN报文,用来关闭从客户端到服务器的数据传输,该报文的序号字段假设为X。

2)服务器接收到客户端发来的FIN字报文,返回一个ACK报文,这个ACK报文的序号字段为X+1,当客户端收到这个ACK后,那么客户端到服务器的连接就断开了。

3)服务器TCP向上层通知客户端断开操作,这样服务器会发送一个FIN报文来关闭服务器到客户端的连接。FIN报文的序号字段假设为Y。

4)客户端也会返回一个ACK报文,此ACK报文的序号字段为Y+1。这样该方向上的连接也就断开了。

 

http:超文本传输协议,是用于www浏览的一个协议(平时输入网址名www.xxx就用到)。http是一个客户端服务器端请求和应答的标准(TCP),是TCP协议族中的一种。客户端是终端用户,服务器端是网站。通过使用Web浏览器网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口80)的HTTP请求。


http是应用层协议,TCP是传输层协议,数据包在网络传输过程中,http被封装在TCP包内

作者:广东松山电子实验室

+WeChat(linzebinwinner)


http://chatgpt.dhexx.cn/article/pw4guEPY.shtml

相关文章

LAN IP,WAN IP和Global IP

LAN IP,WAN IP和Global IP是与网络通信相关的三种IP地址,下面是它们的解释: LAN IP 局域网IP地址(LAN IP),又称私有IP地址,是指对于一个私有网络环境内的主机所使用的IP地址。这些IP地址属于私…

一文读懂ssh,tomcat,LANP,LNMP,ftp,dns等常见的环境配置(运维工程师必看)

文章目录 一.网络服务的概述1.网络服务是什么2.网络服务有哪些(进行简单的梳理)3.网络服务学习建议 二.网络服务基础1.CentOS6与7的区别2.常见网络端口以及/etc/service文件3.网关和路由,主机名(路由选择,网关,NAT解释…

ubuntu 上搭建lanp环境

2019独角兽企业重金招聘Python工程师标准>>> 1.安装tasksel sudo apt-get install tasksel 使用tasksel 时只需 sudo tasksel 2.安装lamp sudo tasksel instal lamp-server 打开浏览器输入127.0.0.1 可以看到apache首页 切换到/var/www/html(默认目录) 目录下新…

LANP环境编译设置

1.下载nginx-1.10.2 wget -O nginx-1.10.2.tar.gz http://nginx.org/download/nginx-1.10.2.tar.gz 2.安装nginx-1.10.2.tar.gz [rootxuegod64 ~]# yum in stall -y gcc gcc-c autoconf automake zlib zlib-devel openssl openssl-devel pcre-devel //zlib:给Ngin…

LANP平台搭建

【需要理解--lamp调用过程】 apache(libphp5.so) -> index.php(mysql.so)-> mysql ####################################################### 【配置yum】 mount /dev/cdrom /media vim /etc/yum.repos.d/yum.repo [base] namebase baseurlfile:///media/Server gpgch…

CentOS 7.4 YUM 搭建LANP环境+WordPress

CentOS YUM 搭建LANP环境Wordpress LAMP是什么呢? 其实就是一系列服务的简称 LAMP:LLinux,AApache,MMariadb/MySQL,PPHP LNMP:LLinux,NNginx,MMariadb/MySQL,PPHP LA…

lanp+nginx实现动静分离

因为apache处理动态页面能力比较高,nginx处理静态页面能力比较高,所以做动静分离来提高页面的访问速度。 系统环境: CentOS Linux release 7.9.2009 (Core) 脚本编译安装httpd-2.4.53 测试httpd服务 执行脚本安装mysql 验证mysql 执行脚本…

LANP架构搭建

安装Apache 解压apache安装包(httpd-2.4.17.tar.gz)到 /usr/src/目录下面 tar -zxvf /root/httpd-2.4.17.tar.gz -C /usr/src/ 安装httpd所需要的依赖包 yum -y install zlib* openssl* apr* pcre-devel openssl* 进入httpd目录,安装httpd所需…

LANP环境搭建(yum安装)

LAMP环境搭建 LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写, 在很多的生产条件下,都需要LAMP环境来实现。今天小白就教大家如何搭建一个LAMP环境。 环境需求 一台win10的主机(192.168.150.110),…

搭建LANP架构

文章目录 什么是lanp架构现在搭建Lanp架构部署Nginx服务安装 MySQL服务安装配置 PHP解析环境配置 Nginx 支持 PHP解析验证数据库工作是否正常部署 Discuz!社区论坛 Web 应用 什么是lanp架构 L :linux 提供操作系统运行环境平台 N :Nginx 提供…

R语言生存分析生成仿真数据构建COX回归分析模型并计算C-index

R语言生存分析生成仿真数据构建COX回归分析模型并计算C-index 参考:R语言实战 参考:R语言统计入门 参考:R语言机器学习 参考:从零开始学 R 语言,带你玩转医学统计学

对连续性变量进行LASSO回归分析 cox

对连续性变量进行LASSO回归 jmzeng163.com 6/19/2017 我的博客我们的论坛捐赠我 安装并加载必须的packages 如果你还没有安装,就运行下面的代码安装: install.packages(lars) install.packages(glmnet) 如果你安装好了,就直接加载它们即可 …

R studio做加权cox回归分析时候总是报错,急求,非常感谢老师

老师您好,我使用R studio进行复杂抽样(权重,分层和PSU)的COX回归时候,单因素cox回归可以运行,但是多因素就会报错“system is computationally singular”,我网上查了有的说是矩阵行列式太小,计算机识别为0…

5.临床预测模型的构建--cox回归分析

1.cox回归溯源 2.cox回归应用 3.cox原理 4.cox回归公式 5.cox回归的主要应用领域 6.应用举例 7.logistic近似cox回归分析的应用场景

用R语言进行Cox回归生存分析

欢迎关注”生信修炼手册”! 在生存分析中,探究生存时间的影响因素是一个重要的研究内容,通过KM和log-rank test检验的方法,只能够处理单个二分类因素的生存数据。当想探究多个因素或者离散型变量对生存时间的影响时,我们就需要借助…

数据分析系列:生存分析(生存曲线分析、Cox回归分析)——附生存分析python代码。

上一篇文章写了数据分析系列:归因分析原理、案例和python代码。但是现实中用户所归属的渠道可能很多,比如用户在网上商城的首页点击了一个产品,又在其他公众号的相关推荐点击了此产品,在所有转化用户中,每个渠道的贡献…

SPSS详细操作:生存资料的Cox回归分析

SPSS详细操作:生存资料的Cox回归分析 一、问题与数据 某研究者拟观察某新药的抗肿瘤效果,将70名肺癌患者随机分为两组,分别采用该新药和常规药物进行治疗,观察两组肺癌患者的生存情况,共随访2年。研究以死亡为结局,两种治疗方式为主要研究因素,同时考虑调整年龄和性别的…

如何才能做Cox呢?今天带来Cox回归分析步骤详解

Cox回归是生存分析中运用最多的一个模型,又称为比例风险回归模型(proportional hazards model)。是由英国统计学家D.R.Cox在1962年提出的,为了表示对他的尊敬,所以大家以他的名字命名这个模型。这是一种半参数回归模型,以结局和生…

R语言与临床模型预测——LASSO回归,单因素多因素cox,差异表达分析,Venn图,森林图,列线图,矫正曲线,ROC全套代码及解析——第五部分 批量cox回归分析 本专栏可免费答疑

上次我们将自噬相关基因的表达数据与临床数据进行了匹配,下面我们进行批量cox回归分析,筛选出预后相关的自噬基因: 这个临床模型预测会针对一个案例进行讲解,目录如下: 1.下载数据 2. 匹配基因 3. 基因去重复 4.匹配临床数据 5.批量cox回归分析 6.差异表达基因筛选 …

Cox与KM生存分析及结果解读 不同的生存分析方法 单因素和多因素生存分析的比较km cox回归分析差异 生存分析结果详解 结果解读 参数详细解释 全因死亡率

生存分析KM法与Cox法异同介绍 KM 方法即Kaplan-Meier survival estimate是一种无参数方法(non-parametric)来从观察的生存时间来估计生存概率的方法。KM生存分析模型,是单变量分析(univariable analysis),在做单变量分析时,**模型只描述了该单…