基本概念
- 子網和局域網是一個概念
- 主機: 配有 IP 地址, 也能進行路由控制的設備;
- 路由器: 即配有 IP 地址, 又能進行路由控制;
- 節點: 路由器和主機的統稱。
背景
- 兩主機并不是直接連接的,路徑選擇問題?為什么? 由網絡層(IP)解決
- 怎么把數據交給路由器,怎么辦? 這是局域網通信的問題,兩主機是直連的,在同一個子網中,由數據鏈路層解決
深入理解IP
- 公網IP在全球具有唯一性。
- IP,比如 192.168.72.1,這是點分十進制的
- IP地址 = 目的網絡 + 目的主機號
重談TCP和UDP
- IP解決的核心問題是主機距離變長
網絡層報頭
- 4位首部長度:跟TCP報頭中的一樣
- 16位總長度:報文的大小
-
如何解包?封包?
解包:固定的20字節,然后根據4位首部長度+16為總長度來解包
封包:根據格式封包就可以了 -
8位協議:表示上層協議類型(UDP,TCP…)
-
如何分用?
根據8位協議,就可以知道交給上層的哪個協議。
- TTL(生存時間):報文的生存時間,每經過一個路由器都會 - -,可以防止報文在環路中一直滯留,占用資源的情況。
網段劃分
- 是什么?為什么?怎么辦?
是什么?
- 有了目的IP是不夠的,網路是被** 精心設計 (子網劃分)**的
被誰設計的? 網路服務提供商
- 路由器有兩個IP,路由器的主機號大都為1
- 子網是有網絡號的(比如xxx.xxx.xxx.0)
- 子網內的IP地址,都是從哪里來的?誰給的?
路由器有構建子網的能力 - IP = 目標網絡號+目標主機號
- IP報文被轉發:
- 根據目標網絡,將報文轉發到目標網絡
- 轉發到目標網絡后,將報文在內網進行轉發
為什么?
- 主機A將數據發送給主機B,但如何找到主機B?
- 線性遍歷全球的主機,效率很低
- 主機A知道主機B的IP,將主機B的IP與主機A的網絡號進行比較不相等,將數據交給路由器,路由器根據報文中目的IP查路由表,確定了主機B的網絡,將報文交給相應的路由器,最后進行內網轉發交給主機B。
- 第二種方式效率高—>本質是查找—>本質是淘汰(淘汰效率高)
- 在進入目標子網之前,不關心主機號—>報文在進行轉發過程中,在進入目標網絡之前,路由器只關心網絡號,之后就是內網轉發
- 在進行路上路由時,路由的基本單位是網絡
- 總結,根據上面知道了為什么? 支持網絡建設,提高了淘汰率。
怎么辦?
- 以前劃分網絡號和主機號的方式
子網掩碼
- 新的劃分方案CIDR(Classless Interdomain Routing)
IP 地址和子網掩碼還有一種更簡潔的表示方法,例如 140.252.20.68/24,
表示 IP 地址為140.252.20.68, 子網掩碼的高 24 位是 1,也就是
255.255.255.0
特殊IP
- 將 IP 地址中的主機地址全部設為 0, 就成為了網絡號, 代表這個局域網;
- 將 IP 地址中的主機地址全部設為 1, 就成為了廣播地址, 用于給同一個鏈路中
相互連接的所有主機發送數據包; - 127.*的 IP 地址用于本機環回(loop back)測試,通常是 127.0.0.1
IP地址不夠用
- 隨著網絡的發展,更多的設備需要入網,IP不夠用:
- 動態分配 IP 地址: 只給接入網絡的設備分配 IP 地址. 因此同一個 MAC 地址的設備, 每次接入互聯網中, 得到的 IP 地址不一定是相同的;
- NAT 技術(后面會重點介紹);
- IPv6: IPv6 并不是 IPv4 的簡單升級版. 這是互不相干的兩個協議, 彼此并不兼容; IPv6 用 16 字節 128 位來表示一個 IP 地址; 但是目前 IPv6 還沒有普及;
公網IP和私有IP
-
網絡可以分為局域網和公網
-
私有IP(只能用來組建局域網,私有IP不能出現在公網中)
- 10.*,前 8 位是網絡號,共 16,777,216 個地址
- 172.16.到 172.31.,前 12 位是網絡號,共 1,048,576 個地址
- 192.168.*,前 16 位是網絡號,共 65,536 個地址
-
公網IP不能重復
-
在網絡架設時,在內網,公網,在統一采用各自的子網掩碼的方式,進行網絡建設。
運營商
基本網絡情況
-
申請IP,無論公網,內網,網絡建設工作—>由運營商來做
-
家庭路由器有構建子網的功能
-
局域網—>不僅我們自己在做,運營商也在做
-
路由器:有家庭的,也有企業的
-
路由器有兩個IP:LAN口IP(對內),WAN口IP(對外)
-
家庭路由器出去的報文到想到達公網,需要先到運營商構建的一個更大的子網中。
-
為什么交錢給運營商?
我們的報文必須經過運營商的轉發才能到達公網。
運營商可以因為你欠費不讓你入公網
訪問非法目標地址,會被攔截 -
科技上網的本質就是騙過運營商,不讓運營商識別出來。
內網–>公網
- 如果目的IP不在該子網中,會向上交付(交付給更大的子網)。
公網–>內網?(數據鏈路層會講)
NAT技術
- NAT技術為什么緩解了IP不足的問題?
單獨切分了一部分IP,只用它來做內網,這樣IP地址就可以重復利用了。
全球網絡
- 公網就是對全球公網IP進行劃分的過程
- 在路由表條目中找不到目的網路號時,就會將報文交給缺省路由
路由
- 路由器,一定盡可能幫助我們
- 配置默認路由
- 怎么走
- 到達入口路由器—>之后就是根據目標主機進行內網轉發
以上都是根據目標網絡進行路由
- 路由表信息,查看路由表信息的指令是 route
- 路由表的信息有路由表生成算法來維護
- IP報文的轉發過程本質就是進行各個子網之間的轉發
- IP解決的核心問題:路徑選擇,淘汰其他子網
- 根據目的網絡進行路由
- 內網轉發
分片和組裝
-
為什么不把滑動窗口的數據打成一個報文呢?而是一個又一個的段報文?
規定:數據鏈路層單次發送的數據幀不能超過MTU(1500)
-
IP報文太長,IP報文會分片—>網絡層自己和對方分別進行分片和組裝
-
分片好不好?
- 分片和組裝,上層傳輸層不關心
- 分片為更多的報文,任意一個丟包,組裝就是不完整的—>分片之后丟包的概率增加,所以分片不能作為網絡發送的主流
-
如何不分片?
傳輸層不能發過大的報文,所以滑動窗口的數據會被分為一段一段的數據
如果分片,如何分片?
16 位標識(id): 唯一的標識主機發送的報文. 如果 IP 報文在數據鏈路層被分片
了, 那么每一個片里面的這個 id 都是相同的.
3 位標志字段: 第一位保留(保留的意思是現在不用, 但是還沒想好說不定以后要
用到). 第二位置為 1 表示禁止分片, 這時候如果報文長度超過 MTU, IP 模塊就會丟棄報文. 第三位表示**“更多分片”**, 如果分片了的話, 最后一個分片置為 0, 其他是 1. 類
似于一個結束標記.
13 位分片偏移(framegament offset): 是分片相對于原始 IP 報文開始處的偏移. 其實就是在表示當前分片在原報文中處在哪個位置. 實際偏移的字節數是這個值 除以 8 得到的. 因此, 除了最后一個報文之外(之前如果都是 8 的整數倍,最后一片的偏移量也一定是 8 的整數倍), 其他報文的長度必須是 8 的整數倍(否則報文就不連續了).
注意:片偏移(13 位)表示本片數據在它所屬的原始數據報數據區中的偏移量**(以 8 字節為單位)**
- 如何判斷是否是分片
- 是否將分片收全?
- 如何組裝?
組裝,就說明了已經收全了,根據片偏移量就可以了。
- 如何分片?
- 對IP報文的有效載荷進行分片
- 片偏移量(必須是8的整數倍)是數據相對于有效載荷的偏移量
- 分片之后,每一片就是一個IP報文
- 分片和組裝不一定只有在通信兩端才會進行,在網絡中也有可能進行