lv7 嵌入式开发-网络编程开发 12 IP协议与ethernet协议

2023-10-06 11:46

本文主要是介绍lv7 嵌入式开发-网络编程开发 12 IP协议与ethernet协议,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1 IP协议作用和意义

2 IP数据报首部格式

3 IP数据报分片

4 以太网协议作用和意义(链路层)

5 练习


1 IP协议作用和意义

IP网的意义 

  • 当互联网上的主机进行通信时,就好像在一个网络上通信一样,看不见互连的各具体的网络异构细节。
  • 如果在这种覆盖全球的 IP 网的上层使用 TCP 协议,那么就是现在的互联网 (Internet)。

网络互联使用路由器,路由器转发的都是IP协议

分组在互联网中的传送过程

分组传输路径

2 IP数据报首部格式

  • 版本——占 4 位,指 IP 协议的版本。 目前的 IP 协议版本号为 4 (即 IPv4)
  • 首部长度——占 4 位,可表示的最大数值 是 15 个单位(一个单位为 4 字节), 因此 IP 的首部长度的最大值是 60 字节
  • 区分服务——占 8 位,用来获得更好的服务(优先级)。 只有在使用区分服务(DiffServ)时,这个字段才起作用。 在一般的情况下都不使用这个字段
  • 总长度——占 16 位,指首部和数据之和的长度, 单位为字节,因此数据报的最大长度为 65535 字节总长度必须不超过最大传送单元 MTU
  • 标识 (identification) ——占 16 位, 它是一个计数器,用来产生 IP 数据报的标识
  • 标志(flag) ——占 3 位,目前只有前两位有意义。 标志字段的最低位是 MF (More Fragment)。 MF=1 表示后面还有分片,MF=0 表示最后一个分片。 标志字段中间的一位是 DF (Don't Fragment) 。 只有当 DF=0 时才允许分片
  • 片偏移——占 13 位,指出:较长的分组在分片后 某片在原分组中的相对位置。 片偏移以 8 个字节为偏移单位

3 IP数据报分片

IP数据报分片是指在网络传输过程中,当一个IP数据报的大小超过了网络链路的最大传输单元(Maximum Transmission Unit, MTU)时,将该数据报分成多个较小的片段进行传输的过程。

IP数据报分片通常发生在发送方的路由器上,以适应不同链路的传输要求。当一个IP数据报需要在某个链路上传输,但其大小超过了该链路的MTU时,发送方的路由器会将数据报分成多个片段。这些片段会被分配序列号,并分别打上标记表示它们是同一个数据报的一部分。

在接收方的路由器或目标主机上,它们会重新组装这些分片,按照序列号将它们合并成完整的IP数据报。这样,接收方就能够得到和发送方完全相同的原始数据。

IP 数据报首部中与分片有关的字段中的数值 

标识相同,DF=0才允许分片,MF=0代表最后的数据报

总长度

标识

MF

DF

片偏移

原始数据报

3820

12345

0

0

0

数据报片1

1420

12345

1

0

0

数据报片2

1420

12345

1

0

175

数据报片3

1020

12345

0

0

350

IP 数据报首部的固定部分中的各字段 

  • 生存时间——占 8 位,记为 TTL (Time To Live), 指示数据报在网络中可通过的路由器数的最大值(最多255)。 
  • 协议——占 8 位,指出此数据报携带的数据使用何种协议, 以便目的主机的 IP 层将数据部分上交给那个处理过程
  • IP 协议支持多种协议,IP 数据报可以封装多种协议 PDU。
  • 首部检验和,只检验首部。

ICMP(Internet Control Message Protocol)是一种网络协议,主要用于在IP网络中传递控制消息。ICMP报文通常被用于测试和调试网络,比如网络测量、故障诊断、路由器交互等。

ICMP报文包含一个类型字段和一个代码字段。类型字段表示该报文的作用,通常包括echo回显请求、目的不可达、时间超时等等,而代码字段则更加具体地描述了该类型消息的细节。

比如,ICMP的echo回显请求报文(Type=8)会被发送方发送到目标主机上,目标主机需要根据该报文的内容向发送方返回一个echo回显响应(Type=0),以表明主机之间的连通性。

IGMP(Internet Group Management Protocol)是一种多播协议,主要用于管理多播组或频道的成员关系。IGMP一般运行在网络层上,可以与IP协议一起工作。

使用IGMP时,当主机要加入或离开一个多播组时,它会向所在的局域网发送一个IGMP报文,请求或通知局域网上的路由器,告知它当前主机的多播组成员状态。

路由器会根据收到的IGMP报文进行相应处理,如果发现没有任何主机对该多播组感兴趣,那么它就不会将多播数据包传送到该局域网中,以避免不必要的网络负载。

因此,在一个多播网络中,IGMP可以帮助路由器和主机有效地管理多播组成员关系,并避免造成不必要的网络拥塞。

4 以太网协议作用和意义(链路层)

数据链路层的地位

数据链路层信道类型  

使用一对一的点对点通信方式。(ppp)

使用一对多的广播通信方式。

必须使用专用的共享信道协议来协调这些主机的数据发送。

以太网 V2 的 MAC 帧格式

类型字段用来标志上一层使用的是什么协议, 以便把收到的 MAC 帧的数据上交给上一层的这个协议。(mac地址与ip地址的关系是arp协议)

数据字段的正式名称是 MAC 客户数据字段。 最小长度 64 字节 - 18 字节的首部和尾部 = 数据字段的最小长度(46字节) 举例:MTU是根据链路层规定,如IP数据报最大1500,目标地址6,源地址6,类型2,FCS4,那么MTU最大1518。

无效的 MAC 帧

数据字段的长度与长度字段的值不一致;

帧的长度不是整数个字节;

用收到的帧检验序列 FCS 查出有差错;(CRC算法得出的内容叫做FCS)

数据字段的长度不在 46 ~ 1500 字节之间。

有效的 MAC 帧长度为 64 ~ 1518 字节之间。

5 练习

举例说明IP分片是如何进行的?

当一个IP数据报的大小超过了网络链路的最大传输单元(MTU)时,发送方的路由器会将该数据报进行分片,以下是一个具体的示例:

假设发送方有一个大的IP数据报,大小为1800字节,而链路的MTU为1500字节。

  1. 发送方的路由器首先检查数据报的大小是否超过了链路的MTU。如果超过了,就需要进行分片。

  2. 路由器根据链路的MTU大小(1500字节),将原始数据报分成两个片段。

    第一个片段:包含前面的1500字节数据,剩余300字节被截断。 第二个片段:包含剩余的300字节数据。

  3. 每个分片都会被分配一个序列号,并设置相应的标志位来指示它们是同一个数据报的一部分。

  4. 发送方的路由器将这两个分片分别封装成新的IP数据报,并在其中设置相应的分片信息。

  5. 这两个分片进入网络后,可能经过不同的路径到达目标主机。

  6. 目标主机或接收方的路由器接收到这些分片后,根据它们的序列号和标志位,进行重新组装。

  7. 目标主机成功地将两个分片重新组装成原始的IP数据报,恢复了原始的1800字节数据。

通过IP分片,发送方就能够将超过MTU的大数据报合理地分解成多个小片段,以适应不同链路的传输要求。接收方可以根据序列号将这些分片重新组装,得到与发送方完全相同的原始数据。

这篇关于lv7 嵌入式开发-网络编程开发 12 IP协议与ethernet协议的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/152969

相关文章

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Python中使用正则表达式精准匹配IP地址的案例

《Python中使用正则表达式精准匹配IP地址的案例》Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋... 目录为什么需要IP正则表达式?IP地址的基本结构基础正则表达式写法精确匹配0-255的数字验证IP地

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子