当前位置: 首页 > article >正文

入门车载以太网(3) -- 网络层

目录

1. 网络通信示例

2. IP地址类别

3. IP数据报

4. 小结


今天继续车载以太网,聊聊网络层。

1. 网络通信示例

我们首先回顾车载以太网的数据传输模型。

从7层开始(车载以太网模糊了5-7层,统称应用层),每个中间层都为上层提供功能,享受其下一层提供的服务。

而网络层位于模型的第3层,负责处理IP数据包在不同网络间的传输、路由、拥塞控制和流量控制,在该层级使用 IP 地址找到最终目的地。 

为什么会出现网络层呢?我们假设以下两种网络通信场景:

  • 当通信双方出现在同一局域网里,可利用交换机直接使用MAC寻址方式进行通信;
  • 当通信双方出现在不同网络时,数据链路层无法直接通信(试想几万台设备通过交换机通信的成本?),因此就需要三层IP地址进寻找目标设备。

我们以Alice和Bob为例,在北京的Alice通过电脑微信客户端向身处上海的Bob的手机发送消息“Hello Bob”,很明显这2个设备没有物理连接,使用多个交换机利用MAC寻址进行数据透传也不现实,那么有没有其他办法呢?路由器就派上了用场,它作为一台拥有独立MAC地址的设备,可以对数据进行转发,承担了网关的作用。

由于MAC地址是设备制造商在出厂生成时固定烧录的,一般来说只要不人为修改,MAC地址就是固定的,就像门牌号一样具备唯一性。如果通过MAC地址想要组建自己的子网,那就必须通知厂商生产时按照你的规划来设置MAC地址,It's totally imTMpossible。

因此在第三层网络层出现了IP地址,常理讲这个地址是逻辑地址,可以自由设置。但我们先把其通信原理讲清楚,再讲IP地址的分类。

首先假设有两个子网段(192.168.0.1\192.168.1.1)(不要纠结怎么来的,先记住它),网段内通过交换机进行数据透传,网段间通过路由器进行数据转发,如下:

ECU0要给ECU1发送数据,整个数据包格式如下:

这种情况下,IP地址没有起到作用,只需要交换机就可发出去。

但如果ECU0要给ECU4发送数据,就需要先把数据发给路由器,再由路由器转发给ECU4;

在ECU0 -> 路由器这一路径下,数据包格式如下:

在路由器 -> ECU4这一路径下,数据包格式如下:

敏锐的你想必已经发现了,在ECU0 -> ECU4这条通路下,变化的只有MAC地址,IP地址始终不变,就好像我给你写信,不管这个信是通过什么交通方式(飞机、火车、汽车)送到你手上,寄信人始终是我,收信人始终是你。

在上述通信过程中,我们深入研究下去,会发现几个问题:

  • ECU0是如何知道要把数据丢给路由器?路由器IP地址怎么来的?

既然把数据丢给路由器,那ECU0肯定知道接收节点不在一个网段内,如何判断?这就引入了子网掩码概念,我们假定子网掩码为255.255.255.0,ECU0只需要“与”上掩码,如下:

源IP:  192.168.0.1 & 255.255.255.0 = 192.168.0.0
目标IP:192.168.1.1 & 255.255.255.0 = 192.168.1.0

就可发现目标IP不在一个网段,那就交给路由器处理吧。

路由器每个端口都有MAC地址,哪总得有个IP地址吧,默认网关的概念又出现了。

如上图,①代表路由器端口位于子网段0,IP地址192.168.0.254;②代码路由器端口位于子网段1,IP地址192.168.1.254。

ECU0在首先配置在该网段的默认网关IP地址为192.168.0.254,一旦发现接受方不在同一网段,它就往这个默认网关这个地址发数据。

这是网络层的部分内容,但实际上数据还是得从数据链路层->物理层发送出去,ECU0是如何知道路由器MAC地址的,这又引入了ARP(Address Resolution Protocol),ECU0广播一条ARP请求,各个节点就会带上自己MAC地址响应,通过这种方式最终实现了网段内ARP缓存表完整,如下表:

  • 路由器是怎么知道从哪个端口把数据扔给ECU4?

如同交换机有自己的SAT(Source Address Table)一样,路由器要完成数据转发,也要维护自己的路由表,该路由表记录目标网段地址、子网掩码、对应端口或者下一跳。

值得一提的是,子网掩码转为二进制表现形式b11....11000,那么掩码前多少位就表示对应子网的网段,例如子网掩码255.255.255.0前24位用于网段表示,因此,这个路由表一般又按如下格式表示:

路由器从端口3接到ECU0发过的报文,发现目标IP地址处于网段1,查找路由表发现是网段1对应端口6,然后再从ARP中找到IP地址对应的MAC地址,最终在数据链路层重新添加头,经由交换机转发给ECU4。

至此,一个简单的通信示例就完成了,这里面涉及到的概念有子网、子网掩码、默认网关、ARP、路由表,每个概念都可以单独再深挖,这里暂时不表。

2. IP地址类别

在第一小节,我们给每个ECU都分配了IP地址:192.168.1.xxx,这个是怎么来的呢?

这就不得不提到IP协议,IPv4和IPv6。

IPv4规定IP地址长度为32位,因此理论上就可以表示2^32 近42亿个终端设备。为方便记录,IP地址分为了4个8位字段,每个字段用十进制表示,采用点-数记号法,例如100.100.101.111。 一般来说,前3个字段表示网络ID,后1个字段表示设备主机ID。

除此之外,IP地址考虑不同规模网络需求,定义了5类地址空间类别,A至E类,具体如下:

A类地址可用于少量的大型网络,B类地址用于中等规模,C类地址适用小型网络。 根据RFC1918"Address Allocation for Private Internets"规定,IANA还将A、B、C类地址预留一部分作为私有地址(Private Address),具体如下:

  • A类:10.0.0.0 -- 10.255.255.255,1个网络--16777216(2^24)个节点
  • B类:172.16.0.0 -- 172.32.255.255,16个网络--65534(2^16)个节点
  • C类:192.168.0.0 -- 192.168.255.255,256个网络 -- 254个节点

因此,192这个怎么来的就不言而喻了。

3. IP数据报

在了解了IP地址类别之后,我们继续来看看IPv4数据报格式。

首先,在MAC层以太网帧Ethertype用0x0800来表示IPv4类型报文,

IPv4数据报总体如下图所示:

在IP层的数据报每个位域描述如下:

  • Version:使用的IP版本号,IPv4 = 4;
  • IHL: Internet Header Length,单位DWORD(32bits);
  • DSCP:Differentiated Service,Traffic Management;
  • ECN:Explicit Congestion Notification,扩展探测丢弃的数据包;
  • Total Length:数据和头的总长度;
  • ID:一帧报文的不同分片;
  • Flag:是否切片,bit1(不分片)、bit2(分片)
  • Fragment Offset:分片偏移;
  • Time to Live:每次路由减1,如果到0,数据包就丢弃;
  • Protocol:第四层的协议;
  • Source IP Address:源IP地址
  • Options:一般来说,这部分都为空

4.小结

本文主要通过一个简单的网络通信示例,描述了IP地址、MAC地址在通信中各自作用,分析了IPv4的数据结构,算是对网络层有一个初步印象。


http://www.kler.cn/a/382303.html

相关文章:

  • AI笔筒操作说明及应用场景
  • 国际版JAVA同城打车源码同城服务线下结账系统源码适配PAD支持Android+IOS+H5
  • 拒绝事后背锅:测试项目中的风险管理一定要知道
  • 【dvwa靶场:XSS系列】XSS (Stored)低-中-高级别,通关啦
  • CSS的配色
  • Git使用指南
  • 核心概念解析Caffeine 缓存模型与策略
  • 在函数 \( f(x+1) = x^2 + 1 \) 中,\( x \) 和 \( x+1 \) 代表不同的概念
  • ElasticSearch认识
  • HFSS学习笔记(五)金属过孔、复制模型带激励等问题(持续更新...)
  • 【大数据学习 | kafka】kafka的偏移量管理
  • 黄山谷捷:以创新为翼,领航新能源汽车散热基板行业
  • kotlin android Handler removeCallbacks runnable不生效的一种可能
  • 033_Structure_Static_In_Matlab求解结构静力学问题两套方法
  • Oracle 第24章:云数据库服务
  • 基于Python的智能旅游推荐系统设计与实现
  • C++练习题(2)
  • VSCode 与 HBuilderX 介绍
  • 新一代Webshell管理器
  • 告别复杂协作:Adobe XD的简化替代方案
  • PLC单键启停控制的多种写法
  • kafka客户端消费者吞吐量优化
  • Spring Boot框架:大学城水电管理自动化
  • Java项目实战II基于Spring Boot的智慧生活商城系统的设计与实现(开发文档+数据库+源码)
  • 【SQL实战进阶】——视图的定义、使用
  • 外包干了6年,技术退步明显.......