【嵌入式软件】LWIP 以太网通信

1.互联网模型

1.1 OSI(Open System Interconnection)七层模型

1)应用层:

        为上层用户提供应用的接口。常用的应用层的网络协议有:HTTP、FTP、TFTP、SMTP、SNMP、DNS、TELNET、HTTPS、POP3、DHCP

2)表示层:

        提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。如果必要,该层可提供一种标准表示形式,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式。

        数据压缩/解压缩和加密/解密(提供网络的安全性)也是表示层可提供的功能之一。

3)会话层:

        对应主机进程,指本地主机和远程主机正在进行的会话。会话层就是负责建立、管理、终止表示层实体之间的通信会话。

        该层的通信由不同设备中的应用程序之间的服务请求和响应组成。将不同实体之间表示层的连接称为会话。

        因此会话层的任务就是组织和协调两个会话进程之间的通信,并对数据交换进行管理。

4)传输层(TCP/UDP协议)

        传输层定义传输数据的协议端口号,以及端到端的流控和差错校验。

        该层建立了主机端到端的连接,传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务,包括差错校验处理和流控等问题。常见的:TCP、UDP协议,端口号就是这里的“端”。

5)网络层(IP、ICMP、IGMP协议)

        进行逻辑地址寻址,实现不同网络之间的路径选择。本层通过IP寻址来建立两个节点之间的连接,为源端发送的数据包选择合适的路由和交换节点,正确无误地按照地址传送给目的端的运输层。网络层(Network Layer)也就是常说的IP层。

        该层包含的协议有:IP(IPv4、IPv6)、ICMP、IGMP等

6)数据链路层:

      数据链路层是OSI参考模型中的第二层,负责建立和管理节点间逻辑连接、进行硬件地址寻址、差错检测等功能。将比特组合成字节,进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。

        数据链路层分为两个子层:

        (1)逻辑链路控制子层(LLC)

                建立和维护网络连接,执行差错校验、流量控制和链路控制;

        (2)媒体访问控制子层(MAC)

                解决共享型网络中多用户对信道竞争的问题,完成网络介质的访问控制。

        数据链路层的具体工作:接收来自物理层的位流形式的数据,并封装成帧,传输到上一层;同样,也将来自上层的数据帧,拆装为位流形式的数据转发到物理层;并且,还负责处理接收端发回的确认帧的信息,以便提供可靠的数据传输。

7)物理层

        利用传输介质为数据链路层提供物理连接,实现比特流的透明传输;

        尽可能屏蔽掉具体传输介质和物理设备的差异,是数据链路层不必考虑网络的具体传输介质是什么;

        网络数据信号的传输是通过物理层实现的,通过物理介质传输比特流。物理层规定了物理设备标准、电平、传输速率等。常用的设备有集线器、中继器、调制解调器、网线、双绞线、同轴线缆等。

1.2 TCP/IP四层模型

        

1.3 TCP/IP五层混合模型

        将TCP/IP四层模型中的网络访问层拆分后才能了数据链路层和物理层。

        在TCP/IP混合参考模型中,数据链路层被分为了LLC(逻辑链路层)和MAC(媒体介质访问层)。目前,对于普通的接入网络终端的设备,LLC和MAC是软硬件的分界线。比如,PC的网卡主要是负责实现参考模型中的MAC子层和物理层;PC中的软件系统中有一套庞大的程序实现了LLC层及以上的所有网络层的协议。 

2.以太网

        以太网是指遵守IEEE 802.3标准组成的局域网,由IEEE 802.3标准规定的主要是位于参考模型的物理层(PHY)和数据链路层中的介质访问控制子层(MAC)。

2.1 PHY层

        在物理层,由IEEE 802.3 标准规定了以太网使用的传输介质、传输速度、数据编码方式和冲突检测机制,物理层一般是通过一个PHY芯片实现其功能的。

2.1.1 传输介质

        传输介质包括同轴线缆、双绞线、光纤。最常用的五类线适用于100BASE-T、10BASE-T的网络。

2.1.2 编码

        为了让接收方在没有外部时钟参考的情况下也能确定每一位的起始、结束和中间位置,在传输信号时不直接采用二进制编码。在10BASE-T的传输方式中采用曼彻斯特编码,在100BASE-T中采用4B/5B编码。

        曼彻斯特编码把每一个二进制的周期分为两个间隔。在表示“1”时,前半个周期为高电平,后半个周期为低电平。表示“0”时则相反。

        由于每个位周期都有边沿跳变,曼彻斯特编码具有自同步能力。接收端可以通过检测信号边沿的跳变来确定每个位的开始和结束,从而实现自同步。

        在100BASE-T采用的4B/5B编码是把待发送数据位流的每4位分为一组,以特定的5位编码来表示,这些特定的5位编码能使数据流有足够的跳变,达到同步的目的,而且效率从曼彻斯特编码的50%提高到了80%。

2.1.3 CSMA/CD冲突检测

         早期的以太网大多是多个节点连接到同一条网络总线上 (总线型网络),存在信道竞争问题,因而每个连接到以太网上的节点都必须具备冲突检测功能。以太网具备 CSMA/CD 冲突检测机制,如果多个节点同时利用同一条总线发送数据,则会产生冲突,总线上的节点可通过接收到的信号与原始发送的信号的比较检测是否存在冲突,若存在冲突则停止发送数据,随机等待一段时间再重传。

        现在大多数局域网组建的时候很少采用总线型网络,大多是一个设备接入到一个独立的路由或交换机接口,组成星型网络,不会产生冲突。但为了兼容,新出的产品还是带有冲突检测机制。  

2.2 MAC子层

        MAC子层是属于数据链路层的下半部分,它主要负责与物理层进行数据交接。如是否可以发送数据,发送的数据是否正确,对数据流控 制等。它自动对来自上层的数据包加上一些控制信号,交给物理层。接收方得到正常数据时,自动去除 MAC 控制信号,把该数据包交给上层。 

2.2.1 MAC数据包

        IEEE 对以太网上传输的数据包格式也进行了统一规定。

        数据包组成:前导字段、帧起始定界符、目标地址、源地址、数据包类型、数据域、填充域、校验和域组成。

字段名称字节大小字段内容功能
前导字段70X55555555555555用于收发节点的时钟同步。该字段在MAC接收数据包后被自动过滤掉。
帧起始界定符10X5D区分前导字段和数据字段,MAC接收数据包后被自动过滤掉。
MAC地址DA6地址目标地址-网卡物理地址
MAC地址SA6地址源地址-网卡物理地址
数据包类型/长度2类型/长度

当数值大于0X0600时,表示本MAC数据包是属于TCP/IP协议层的IP包、ARP包、SNMP包。

当数值小于0X0600时,表示本MAC数据包数据段的长度。

数据段0-1500数据来自于上层
填充域由于协议要求整个MAC包的长度至少为64字节(接收的数据包如果少于64字节会被认为发生冲突,数据包自动丢弃),当数据段的字节少于46字节时,在填充域会自动填充无效数据,使得数据包符合长度要求。
校验和域4
MAC 数据包的尾部是校验和域,它保存了 CRC 校验序列,用于检错。

3. TCP/IP协议栈

        1)LLC层:处理传输错误;调节数据流,协调收发数据双方速度,防止发送方发送太快而接收方丢失数据。主要使用数据链路协议。

        2)网络层:本层也被称为IP层。LLC层负责把数据从线的一端传输到另一端,但很多时候不同的设备位于不同的网络中。此时需要使用网络层来解决子网路由拓扑问题、路径选择问题。这一层协议主要有IP协议、ICMP协议、ARP协议。

        3)传输层:由网络层处理好了网络传输的路径问题后,端到端的路径就建立起来了。传输层负责处理端到端的的通信。这一层的协议主要有TCP、UDP协议

        4)应用层:经过前面三层的处理,通信完全建立。应用层可以调用传输层的接口来编写特定的应用程序。而TCP/IP协议一般也会包含一些简单的应用程序如 Telnet 远程登录、FTP 文件传输、SMTP 邮件传输协议。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/581073.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】C\C++内存管理

下面是围绕C\C内存管理这一块知识谈论相关的内存管理机制,有需要借鉴即可。 同时,我在下面也放了快速建立链表的模板,方便oj题目拿到vs上进行调试。 内存管理目录 1.CPP内存管理1.1new、delete关键字概念1.2特性1.3总结 2.new、delete的底层…

【C语言】贪吃蛇详解(附源码)

一、贪吃蛇实现效果 【C语言】贪吃蛇(控制台) 二、源码 🎈🎈🎈Snake 残风也想永存/C语言项目 - 码云 - 开源中国 (gitee.com)🎈🎈🎈 三、如何使用C语言去实现一个贪吃蛇&#xff1f…

每日一题:地下城游戏

恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正整数。如果他的健康点数在某一时刻降至 0…

ThreeJs 环境配置及遇到问题的解决方法

一、环境搭建 ThreeJs在实际在实际使用中更多的是结合框架开发例如:vue框架、react框架,在使用时需要配置开发环境,本文使用的是vscode ThreeJs NodeJs vue 1、ThreeJs安装 下载路径:GitHub - mrdoob/three.js: JavaScript…

CentOS命令大全:掌握关键命令及其精妙用法!

CentOS是一种流行的开源企业级Linux发行版,它基于Red Hat Enterprise Linux (RHEL)的源代码构建。对于系统管理员和运维工程师来说,掌握CentOS的常用命令至关重要。 这些命令不仅可以帮助管理服务器,还可以进行故障排查、性能监控和安全加固等…

【idea】idea 中 git 分支多个提交合并一个提交到新的分支

一、方法原理讲解 我们在 dev 分支对不同的代码文件做了多次提交。现在我们想要把这些提交都合并到 test 分支。首先我们要明白四个 git 操作, commit:命令用于将你的代码变更保存到本地代码仓库中,它创建了一个新的提交(commit…

Ubuntu编译安装MariaDB并进行初始化配置

Ubuntu编译安装MariaDB并进行初始化配置 1. 编译安装MariaDB2. 配置MariaDB3. Docker安装MariaDB 1. 编译安装MariaDB MariaDB官方安装文档:https://mariadb.com/kb/en/Build_Environment_Setup_for_Linux/    下载MariaDB源码:https://mariadb.org/ma…

Spring Boot 如何实现缓存预热

Spring Boot 实现缓存预热 1、使用启动监听事件实现缓存预热。2、使用 PostConstruct 注解实现缓存预热。3、使用 CommandLineRunner 或 ApplicationRunner 实现缓存预热。4、通过实现 InitializingBean 接口,并重写 afterPropertiesSet 方法实现缓存预热。 1、使用…

TCP-模拟BS架构通信

简介 bs是通过浏览器进行访问的每次访问都会开启一个短期的socket用来访问服务器的资源 响应报文的格式 服务端 bs架构中的b是浏览器,不需要我们书写,我们只需要书写服务端即可 服务端 public class Server {public static void main(String[] args) {S…

[C++]22:C++11_part_one

C11 一.列表初始化:1.{}初始化:2.C11扩大了列表初始化的范围:3.std::initializer_list1.简单类型的列表初始化:2.复杂类型的列表初始化3.实现vector的列表初始化4.实现list的列表初始化:5.不支持列表初始化&#xff1a…

制作一个RISC-V的操作系统十六-系统调用

文章目录 用户态和内核态mstatus设置模式切换核心流程封装代码背景解释代码示例解析解释目的 用户态和内核态 mstatus设置 此时UIE设置为1和MPIE为1,MPP设置为0 代表当前权限允许UIE中断发生,并且在第一个mret后将权限恢复为用户态,同时MIE也…

易错知识点(学习过程中不断记录)

快捷键专区: 注释:ctrl/ ctrlshift/ 保存:ctrls 调试: 知识点专区: 1基本数据类型 基本数据类型有四类:整型、浮点型、字符型、布尔型(Boolean), 分为八种&#xff…

UE5 GAS开发P40 周期性效果,持续治疗

Periodic Gameplay Effects周期性的游戏效果 它们在一段时间内以固定的间隔重复应用到目标上。这种效果通常用于表示持续性伤害、治疗或其他影响,例如中毒、灼烧或回复效果。 修改GE_CrystalHeal,在Period改为每0.1秒执行一次 假如同时有三个持续时间在进行,那么这…

STM32与OLED显示屏通信(四针脚和七阵脚)

系列文章目录 STM32单片机系列专栏 C语言术语和结构总结专栏 文章目录 1. 单片机调试 2. OLED简介 3. 接线 4. OLED驱动函数 4.1 四针脚版本 OLED.c OLED.h OLED_Font.h 4.2 七针脚版本 引脚连接 OLED.c OLED.h OLED_Font.h 5. 主函数 工程文件模板 1. 单片机…

linux下安装deepspeed

安装步骤 一开始安装deepspeed不可以使用pip直接进行安装。 这时我们需要利用git进行clone下载到本地: git clone https://github.com/microsoft/DeepSpeed.git 进入到deepspeed的安装目录下 cd /home/bingxing2/ailab/group/ai4agr/wzf/Tools/DeepSpeed 激活…

verilog 从入门到看得懂---matlab 自动生成verilog

matlab 的强大不用多说,以前经常用simulink 生成c,最近尝试用simulink进行了verilog的生成,方法也很简单。 一个简单的示例如下。 1,新建一个模型文件,并且根据需要进行模型搭建 2.配置HDL生成模块 3.点击 generation…

纯血鸿蒙APP实战开发——全局状态保留能力弹窗

全局状态保留能力弹窗 介绍 全局状态保留能力弹窗一种很常见的能力,能够保持状态,且支持全局控制显隐状态以及自定义布局。使用效果参考评论组件 效果图预览 使用说明 使用案例参考短视频案例 首先程序入口页对全局弹窗初始化,使用Globa…

Linux学习之路 -- 进程篇 -- 自定义shell的编写

前面介绍了进程程序替换的相关知识&#xff0c;接下来&#xff0c;我将介绍如何基于前面的知识&#xff0c;编写一个简单的shell&#xff0c;另外本文的所展示的shell可能仅供参考。 目录 <1>获取用户的输入和打印命令行提示符 <2>切割字符串 <3>执行这个…

qt-C++笔记之滑动条QSlider和QProgressBar进度条

qt-C笔记之滑动条QSlider和QProgressBar进度条 —— 2024-04-28 杭州 本例来自《Qt6 C开发指南》 文章目录 qt-C笔记之滑动条QSlider和QProgressBar进度条1.运行2.阅读笔记3.文件结构4.samp4_06.pro5.main.cpp6.widget.h7.widget.cpp8.widget.ui 1.运行 2.阅读笔记 3.文件结构…

智慧供热一站式热网平衡多功能集成系统

供热管理地域分散的现实&#xff0c;决定必须采用先进技术手段开发软件系统&#xff0c;使各管理单位互联互通。在多年技术积累的基础上&#xff0c;公司采用目前成熟而且领先的技术架构&#xff0c;研发了适用于多个组织机构集中式管理的供热管理软件。使管理在技术上不再受地…
最新文章