车载以太网中,传输层和实际用的互联网相差无几。本篇文章对传输层中的IP进行介绍
目录
[1.1 组播的 "组" 概念](#1.1 组播的 “组” 概念)
[二、组播在 OSI 模型中的位置](#二、组播在 OSI 模型中的位置)
[3.1 IPv4 组播地址范围](#3.1 IPv4 组播地址范围)
[3.2 IPv6 组播](#3.2 IPv6 组播)
什么是IP?
IP(Internet Protocol,互联网协议)是 网络通信的核心协议 ,用于标识设备并确保数据包能够正确地在网络中传输 。如果具象化的说就是住处的地址。MAC就相当于身份证。IP地址可能会变,MAC由网卡决定短期内一般不会更变。IP位于OSI7层模型中的的网络层,⽹络层的主要作⽤是:实现主机与主机之间的通信,也叫点对点通信。
IP和MAC的关系
正如我们上一篇文章中介绍的,IP是整个全球路径(跨网络传输)的规划者,MAC(这里是指数据链路层里面的mac子层不是mac地址)仅仅用于局域网(LAN)内一跳和下一跳之间的联系,通过ARP协议与MASK子网掩码,如果目的IP地址位于子网内,那么他将会通过ARP协议获取对应IP地址的MAC地址从而建立连接,但是如果不在子网则只能获取网关(路由器)的地址,前往下一跳了。他们的关系由下图所示:
![](https://i-blog.csdnimg.cn/direct/d33190c08de94c02adb314e08f687345.png)
IP地址分类
IP地址分为5类如下图所示
![](https://i-blog.csdnimg.cn/direct/a95889d3f70b4de4ae3d19292b2faeb2.png)
也就是
![](https://i-blog.csdnimg.cn/direct/ed3c73a6c49e4558a153cf3136239973.png)
私有IP
其中192这个开头的也就是我们说的内网,他是私有IP。你的设备(电脑、手机、打印机等)在局域网内通信时,使用的是私有 IP (如 192.168.xxx.xxx)。
私有 IP 不能直接访问互联网。
NAT
在访问外网时,防火墙或路由器会通过 NAT(网络地址转换)把内网 IP 映射成一个公网 IP ,然后再通过路由器发送到互联网。对于路由器,路由器维护一个 NAT 映射表 ,记录哪个内网 IP 发出了哪个请求,以便返回时能够正确转发。而防火墙的作用是防止外部恶意攻击,只有内部发起的请求可以收到响应,外部设备不能直接访问内网设备。从而NAT可以做到内网设备共享公网 IP,也就是说你的家里可能有很多设备(手机、电脑),但在公网看来,它们都是同一个 IP(路由器的公网 IP)。因此也节约了公网 IP 资源。但是这就会出一个问题,手动分配 IP 容易出错,一旦 IP 重复,网络会出现冲突。
DHCP
那么就需要DHCP这个应用层协议来帮助帮助分配IP了。DHCP(Dynamic Host Configuration Protocol,动态主机配置协议) 是一种 自动给网络中的设备分配 IP 地址、子网掩码、网关以及 DNS 等网络参数 的协议。它能让我们在局域网中实现即插即用的网络连接,大大简化了网络管理和配置工作。他能实现1.自动分配 IP 地址:无需人工手动给每台设备配置 IP 地址,设备开机后会自动从 DHCP 服务器获取到自己的 IP。2.分配其他网络参数比如默认网关,子网掩码,DNS 服务器地址以及其他设置。
来插叙回顾刚刚的arp,arp协议是在内网中询问的,那么他在跳转中,其实是每个路由器组成的内网,这个路由器又对应内部一大堆192.168的设备.说到这,我们知道一般如果跨域通信我们是要做防火墙穿透的。
为什么要防火墙穿透?
防火墙(Firewall) 是用于保护内网设备免受外部网络攻击 的安全机制,它会阻止未经授权的访问,导致外部设备无法直接访问内网资源。他可以过滤非法访问(限制某些端口的访问),防止 DDoS 攻击(限制大量异常流量).但是http的80或者https的443端口他不会拦截。所以可以用http来穿透防火墙。但是像dds这种他本来就是局域网里面用的,就无所谓了。
广播
很多人会把广播和组播弄混。其实广播是 "一对所有" 的通信 ,即数据会发给 同一子网内的所有设备 ,而不是特定的组。并且广播不会跨路由器 ,所以数据只能局限在 192.168.0.0/24 这个子网内(这个/24其实是CIDR,也就是说前24位表示网络部分,后面8位表示主机部分,相当于子网掩码255.255.255.0)。组播(224.x.x.x) :数据包只会被订阅了该组的设备 接收,并且可以跨子网传播。
它分为本地广播和直接广播
本地广播
使用255.255.255.255。这样所有设备都会接收数据包 ,但路由器不会转发。适用于DHCP 发现啊,ARP请求啊之类。
直接广播
直接广播使用子网地址 +255,注意这里的 +255
不是指"在原来的 IP 地址上直接加 255"。它的真正含义是:把主机部分的所有位都变成 1
,得到广播地址(Broadcast Address)。举个例子192.168.1.0/24 +255就是把最后8位全部设为1.这样192.168.1这个子网内的所有设备都能1收到广播了。直接广播让子网内的所有设备都收到消息,但不会跨路由器传播。而本地广播是所有设备都会收到消息。
本地广播VS直接广播
有人就会发出疑问,那本地广播感觉和直接广播差不多啊,本地广播说是所有设备都会接受数据包,但是由于有防火墙和nat,本地设备就只有子网内设备啊,那不是和直接广播通知子网内设备差不多嘛?默认情况下是这样的,但是如果你想实现远程开机这种操作。本地广播无法被 NAT 设备(如路由器)转发到互联网,但是直接广播如果路由器启用了"直接广播转发",数据包可以传播到其他子网 。且由于防火墙的影响,如果你需要让广播通过防火墙,必须手动配置防火墙规则,允许特定端口(如 Wake-on-LAN 的 UDP 9 端口)。这样就可以实现远程开机了。
组播
一、什么是组播(Multicast)?
组播(Multicast) 是一种 "一对多" 或 "多对多" 的网络传输方式,允许发送方(Source)只发送 一份数据包 ,而网络设备(路由器、交换机)根据 组播路由协议 将这份数据复制并分发给多个接收方(Receivers)。
- 相比 广播(Broadcast) ,组播的接收方是加入了组(Group)的节点,并不是子网内所有节点。
- 相比 单播(Unicast) ,组播在多用户同时接收相同内容时可极大减少网络带宽消耗。
1.1 组播的 "组" 概念
- 每个组播组会对应一个 组播 IP 地址 (例如
224.1.1.1
)。 - 只有 订阅(Join)了该组播组 的主机才能接收该组的流量。
- 没有订阅的主机不会接收,也就不会浪费带宽。
二、组播在 OSI 模型中的位置
- 网络层(IP 层) :使用 组播 IP 地址 (范围
224.0.0.0 - 239.255.255.255
for IPv4)来标识组。 - 传输层 :通常用 UDP(User Datagram Protocol)来传输组播数据,也可以使用其他协议。
- 链路层(以太网层) :使用 特殊的组播 MAC 地址 (以
01:00:5E
开头)来标识组播帧。
三、组播地址和范围
3.1 IPv4 组播地址范围
224.0.0.0 ~ 239.255.255.255
- 224.0.0.x:保留地址,用于本地链路组播(路由器不转发)。
- 224.0.1.x - 238.x.x.x:可路由组播地址,用于互联网或大规模网络组播。
- 239.0.0.0 - 239.255.255.255:组织范围(Administratively Scoped)地址,用于私有组播(类似私有 IP),只在组织内部使用。
3.2 IPv6 组播
在 IPv6 中,组播地址以 ff00::/8
开头,例如 ff02::1
(所有节点),ff02::2
(所有路由器)等。
四、组播核心原理
- 发送方只发一次数据
不像单播要为每个接收者发送多份,组播只在网络中保留一份数据流,在需要的节点或路由节点才复制分发。 - 接收方主动加入(Join)或退出(Leave)组播组
- 局域网内:使用 IGMP(Internet Group Management Protocol) 通知组播路由器:"我要接收这个组播组地址的数据"。
- 路由器根据组播路由协议(如 PIM、MOSPF)在网络间构建 组播分发树(Multicast Distribution Tree)。
- 网络设备(路由器/交换机) 根据 组播路由协议 动态维护哪些接口下有接收组播数据的主机,实现数据精准分发。
五、常见组播协议
-
IGMP(Internet Group Management Protocol)
- 工作在主机与局域网内的组播路由器之间,主机通过 IGMP 向路由器声明要加入或离开某个组播组。
- 常见版本:IGMPv1、IGMPv2、IGMPv3(v3 支持源过滤,能指定接收来自哪几个源的组播)。
-
PIM(Protocol Independent Multicast)
- 工作在路由器之间 ,用于在多路由环境中建立并维护组播分发树。
- 常见模式:PIM-SM(稀疏模式) 、PIM-DM(密集模式)。
- 稀疏模式(SM)常用于大多数互联网或企业网场景;密集模式(DM)现在用得较少。
-
MLD(Multicast Listener Discovery)
- IPv6 下的"IGMP"对应协议,用于管理 IPv6 组播。
六、组播带来的好处
-
节省带宽
- 只发送一次数据,然后在必要的节点进行复制。若有大量用户同时收看相同视频或订阅相同数据流,可极大降低网络压力。
-
降低服务器负载
- 无需为每个接收者维护独立的连接,大量用户共享同一个数据流。
-
实时性好,适合大规模分发
- 适用于 视频直播、股票行情、在线会议、在线教育 等实时业务场景。
七、常见应用场景
-
IPTV / 视频直播
- 机顶盒或播放器加入特定组播组,网络运营商通过组播方式发送视频流给所有收看用户。
-
在线会议 / 语音广播
- 多人语音或视频会议,使用组播减少流量。
-
实时信息分发(股票行情、竞价系统等)
- 证券公司实时推送行情给交易终端,组播可极大减轻服务器和网络负担。
-
大型局域网广播(代替纯广播,减少网络风暴)
- 例如主机发现、服务发布,可以使用组播,只有订阅者才会接收。
八、网络配置要点
-
局域网内要启用 IGMP
- 交换机需支持 IGMP Snooping,路由器需支持 IGMP Proxy 或 PIM 路由,才能正确转发组播流。
-
跨网段要启用 PIM(稀疏模式或密集模式)
- 路由器间通过 PIM 维护路由信息,让组播数据可以在不同子网间传播。
-
安全和 QoS
- 防止组播被滥用造成网络攻击(如伪造源 IP)、网络风暴。
- 对组播流量进行 QoS(服务质量) 配置,保证实时业务优先级。
-
使用私有组播地址
- 如果只在组织内部使用组播,最好用 239.x.x.x 段,避免与互联网组播地址冲突。
九、组播与其他通信方式的对比
模式 | 地址/协议 | 适用场景 | 带宽利用 | 扩展性 |
---|---|---|---|---|
单播 | 普通 IP 地址 | 点对点通信、请求-响应 | 一对一,带宽消耗大 | 大规模"一对多"非常不划算 |
广播 | 255.255.255.255 、192.168.x.255 |
局域网内的一对所有设备 | 一对所有,浪费较大 | 不能跨路由器,覆盖面有限 |
组播 | 224.0.0.0 - 239.255.255.255 |
一对多/多对多,只有订阅设备 | 只复制给加入组的设备,效率高 | 可跨子网,但需组播路由协议 |
任播 | Anycast(IPv6 Anycast) | 最近节点服务(CDN、DNS) | 面向全局路由,路由到最近节点 | 配置复杂,多用于服务器分布式 |
十、总结
-
组播是网络层的 "一对多" 传输方式
- 通过 组播 IP 地址 标识组,用 IGMP 来管理主机加入/离开组,路由器用 PIM 等协议维护跨网段的组播路由。
-
优势在于大幅节省带宽和服务器负载
- 对于 视频直播、在线会议、实时行情 等场景是非常理想的技术。
-
需要网络设备支持组播路由和 IGMP Snooping
- 企业网络或运营商网络中,需要合理规划、开启相关协议,否则组播可能无法跨网段,或发生网络风暴。
-
安全和 QoS 同样重要
- 在大规模组播应用中,要做好 鉴权、限速、ACL 等。
IP分⽚与重组
每种数据链路的最⼤传输单元 MTU 都是不相同的, 以太⽹的 MTU 是 1500 字节 等.每种数据链路的 MTU 之所以不同,是因为每个不同类型的数据链路的使⽤⽬的不同。使⽤⽬的不同,可承载的 MTU 也就不同。 其中,我们最常⻅ 数据链路是以太⽹,它的 MTU 是 1500 字节。 那么当 IP 数据包⼤⼩⼤于 MTU 时, IP 数据包就 会被分⽚。 经过分⽚之后的 IP 数据报在被重组的时候,只能由⽬标主机进⾏,路由器是不会进⾏重组的。 在分⽚传输中,⼀旦某个分⽚丢失,则会造成整个 IP 数据报作废,所以 TCP 引⼊了 MSS 也就是在 TCP 层进⾏分 ⽚不由 IP 层分⽚,那么对于 UDP 我们尽量不要发送⼀个⼤于 MTU 的数据报⽂。
IPv4首部
![](https://i-blog.csdnimg.cn/direct/7f78dad6a91e4298a6a4fb4a048b4a3d.png)
这里面version 指定 IP 协议版本,IPv4 对应4,ipv6对应6
IHL(首部长度):IP 头部的长度,他的单位是4字节,用他的值x4就是实际首部长度。比如IPv4 头部最小长度 = 20 字节(IHL=5)。IPv4 头部最大长度 = 60 字节(IHL=15),最大是使用了option选项字段。
TOS:用于 区分不同优先级 (如 QoS),影响路由和流量管理。他由3位的优先权子字段(现在没用了).4位的tos子字段以及最后一个无用位(必须置0)组成。他是早期用于区分数据包的优先级,但是现在 主要用于 **QoS(服务质量控制)**影响数据包的处理方式了。现在一般是用DiffServ是取代了TOS。他由DSCP(6bit)+ECN(2bit)组成。DSCP用于标记优先级,ECN用于显式拥塞通知。常见的 DSCP 代码点包括:
DSCP 值 | 二进制 | 类别 | 用途示例 |
---|---|---|---|
0 | 000000 |
Default | 普通流量(标准优先级) |
EF(Expedited Forwarding) | 101110 |
高优先级 | 语音(VoIP)、视频会议 |
AF11 | 001010 |
Assured Forwarding | 低优先级流量 |
AF31 | 011010 |
Assured Forwarding | 高优先级流量 |
CS6 | 110000 |
Critical Services | 网络控制流量(BGP、OSPF) |
Total Length(总长度):IP 数据包的总长度 (首部 + 负载),单位是 字节 (最大 65535
)。但是最大数据长度受 MTU 限制 ,以太网典型 MTU = 1500
,意味着最大数据长度通常是 1480 字节(IP 头部 20 字节 + 数据 1480)。
Identification:发送方给每个 IP 数据包分配一个唯一 ID ,用于分片重组.如果数据包被拆分成多个片段 ,所有片段都会有相同的 Identification 值,接收方用它来重组数据包.但是我们之前有提到说为了避免让ip来分片所以通过mss让tcp进行分片了.
Flags(标志位):DF(位 1) :1
表示 禁止分片 ,如果数据包超过 MTU,必须丢弃。MF(位 2) :1
表示 还有更多片段 ,如果是 0
,表示这是最后一个片段。
Fragment Offset(片偏移):指明当前片段在原始数据包中的位置 ,单位是 8 字节。举个例子 偏移 0
:第一个片段。那么第二段偏移 1480/8=185。
TTL(Time to Live,生存时间):控制数据包在网络中存活的时间,防止死循环 。每经过一个路由器,TTL - 1,如果 TTL=0,数据包被丢弃。linux是64,windows是128.
Protocol(协议):指定IP 负载是什么协议 (用于解析数据部分)。1
= ICMP(ping)6
= TCP
17
= UDP。
Header Checksum(头部校验和):检查 IP 头部 是否出错,若出错则丢弃数据包。需要注意到是每经过一个路由器都会重新计算这个校验和(因为 TTL 变了)。
Source Address(源地址):记录数据包发送方的 IPv4 地址(4 字节)。
Destination Address(目标地址):记录数据包接收方的 IPv4 地址。
Options(可选字段,最大 40 字节):可以存储 时间戳、安全信息、路由指示等。但是现在已经很少使用了。
Padding(填充):确保 IP 头部的总长度是 4 的倍数,防止数据对齐问题。
之前的图标注了长度但是没有具体的英文名,这里补一张英文名对应的头部图。
![](https://i-blog.csdnimg.cn/direct/48492241c9474932b556c5fafedef71e.png)