? ? ? ? 車載以太網中,傳輸層和實際用的互聯網相差無幾。本篇文章對傳輸層中的IP進行介紹
目錄
什么是IP?
IP和MAC的關系
IP地址分類
私有IP? ? ? ?
NAT
DHCP
為什么要防火墻穿透?
廣播
本地廣播
直接廣播
本地廣播VS直接廣播
組播? ? ? ?
一、什么是組播(Multicast)?
1.1 組播的 “組” 概念
二、組播在 OSI 模型中的位置
三、組播地址和范圍
3.1 IPv4 組播地址范圍
3.2 IPv6 組播
四、組播核心原理
五、常見組播協議
六、組播帶來的好處
七、常見應用場景
八、網絡配置要點
九、組播與其他通信方式的對比
十、總結
IP分?與重組
IPv4首部
什么是IP?
????????IP(Internet Protocol,互聯網協議)是 網絡通信的核心協議,用于標識設備并確保數據包能夠正確地在網絡中傳輸。如果具象化的說就是住處的地址。MAC就相當于身份證。IP地址可能會變,MAC由網卡決定短期內一般不會更變。IP位于OSI7層模型中的的網絡層,?絡層的主要作?是:實現主機與主機之間的通信,也叫點對點通信。
IP和MAC的關系
? ? ? ? 正如我們上一篇文章中介紹的,IP是整個全球路徑(跨網絡傳輸)的規劃者,MAC(這里是指數據鏈路層里面的mac子層不是mac地址)僅僅用于局域網(LAN)內一跳和下一跳之間的聯系,通過ARP協議與MASK子網掩碼,如果目的IP地址位于子網內,那么他將會通過ARP協議獲取對應IP地址的MAC地址從而建立連接,但是如果不在子網則只能獲取網關(路由器)的地址,前往下一跳了。他們的關系由下圖所示:
????????
IP地址分類
? ? ? ? IP地址分為5類如下圖所示
????????
也就是
????????
私有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分?與重組
IPv4首部
這里面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 的倍數,防止數據對齊問題。
之前的圖標注了長度但是沒有具體的英文名,這里補一張英文名對應的頭部圖。