注:本文基于《網路是怎樣連接的》一書,
背景:畢業4年了,很多當初在學校學的計算機網路知識都忘了,此文為作業幾年后的一次再回顧、思考和梳理,以供后續查閱,
一、IP 地址
注意:IP 跟 IP 地址不是一個概念,IP 是 Internet Protocol,是一個協議,而 IP 地址 Internet Protocol Address,是 IP 中的一個概念,
但有時候有些場景,會習慣直接說 IP,其實指的是 IP 地址,知道就好,(網路這個領域很多名詞都是使用混亂的)
1、IP 地址的表示
IP地址(Internet Protocol Address)是由32位二進制位組成的 xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx,
如果按每8位為一組,轉換成十進制的話,可以寫成由三個句點分隔的4位數字的形式,即點分十進制表示法:例如192.168.0.1,
所以,IP地址只有32位,滿打滿算42.9億個地址,
2、IP 地址的作用
IP地址有兩個主要功能:
- 標識設備(IP 地址是網路設備的邏輯地址,以此來屏蔽物理地址(即 MAC 地址))
- 網路尋址
3、查看我的 IP 地址
(1)私網 IP
① 命令列
以 linux(CentOS)為例:
- 方法一:
ifconfig - 方法二:
ip addr
linux的ip命令和ifconfig命令類似,但前者功能更強大,并旨在取代后者,
ifconfig是net-tools中已被廢棄使用的一個命令,許多年前就已經沒有維護了,

② OS GUI
以 MAC 為例,打開 設定 -> 網路:

(2)公網 IP
上面看到的 IP 其實都是私網 IP(跟現實中大量使用 NAT 有關,下面會介紹),公網 IP 則需要通過別的方法:
- 百度直接搜 ”ip“ 關鍵詞
- 去專門的第三方網站查看,例如 https://whatismyipaddress.com/
[拓展]
問:如何用公網 IP 查到用戶對應的地理位置?
答:可以用上面的方法,但如果要追求精確度和準確度,可以用 https://www.ipip.net/(收費)
4、IP 地址的編址方式
(1)最早
一開始,32位的IPv4地址只由8位的網路地址和“剩下的”24位的主機位,
這種格式用在局域網出現之前,在那時,只有一些很少很大的的網路,例如 ARPANET,
即 IP地址 = 網路地址 + 主機地址
問:為什么要分網路地址和主機地址?
是因為網關(路由設備)當中有一張路由表,該路由表記錄了所有ip地址的位置,這樣就可以進行包的轉發了,如果我們不區分網路地址,那么這張路由表當中就要保存有所有IP地址的方向,這張路由表就會很大,而有了網路地址,就可以限定擁有相同網路地址的終端都在同一個范圍內,那么路由表只需要維護這個網路地址的方向,就可以找到相應的終端了,
所以,我們把網路號相同的主機稱之為本地網路主機,網路號不相同的主機稱之為遠程網路主機,本地網路中的主機可以直接相互通信;遠程網路中的主機要相互通信必須通過本地網關來傳遞轉發資料,
(2)[拓展] 網關
網關(Gateway)在網路層以上實作網路互連,是復雜的網路互連設備,
網關地址實質上是一個網路通向其他網路的IP地址,
網關設備有:
- 路由器(在消費領域,日常用的路由器=網關)
- 啟用了路由協議的服務器(實質上相當于一臺路由器)
- 代理服務器(也相當于一臺路由器)
(3)分類劃分(有類網路)
① A類IP地址 —— 非常大的網路
一個A類IP地址是指,在IP地址的四段號碼中,第一段號碼為網路號碼,剩下的三段號碼為本地計算機的號碼,
只有 126 個組織可以分配 A 類網路地址,每個組織都可以為 16,000,000 臺主機提供地址,
A 類地址適合那些特大型的公司/組織或政府部門,例如,通用電氣公司擁有 3.0.0.0/8,蘋果電腦公司擁有 17.0.0.0/8,美國郵政總局擁有 56.0.0.0/8,(幾乎現在所有的A類地址都在美國)
② B類IP地址 —— 數量較多規模中等的網路
一個B類IP地址是指,在IP地址的四段號碼中,前兩段號碼為網路號碼,剩下的兩段號碼為本地計算機的號碼,
最多 16,384 個組織可以分配 B 類網路地址,每個網路可以支持 65,534 臺主機,
③ C類IP地址 —— 為數眾多的小網路
一個C類IP地址是指,在IP地址的四段號碼中,前三段號碼為網路號碼,剩下的一段號碼為本地計算機的號碼,
C類網路地址數量較多,有200多萬個,適用于小規模的局域網路,每個網路最多只能包含254臺計算機,
④ D類IP地址 —— 用于組播
D類地址不分網路地址和主機地址,其IP地址前8位以“1110”開始,它是一個專門保留的地址,
⑤ E類IP地址 —— 用于研究和實驗之用
E類地址不分網路地址和主機地址,其IP地址前8位以“1111”開始,它是一個專門保留的地址,
⑥ 總結
區分的ABCDE類的IP地址的辦法就是根據第一個8位組來判斷:
- A類網路的IP地址范圍為:1.0.0.1~127.255.255.254
- B類網路的IP地址范圍為:128.0.0.1~191.255.255.254
- C類網路的IP地址范圍為:192.0.0.1~223.255.255.254
- D類網路的IP地址范圍為:224.0.0.0~239.255.255.255
- E類網路的IP地址范圍為:240.0.0.0~247.255.255.255
可以看到 ABCDE 類的 IP 地址范圍并不是完全覆寫 0.0.0.0 ~ 255.255.255.255,因為被保留 IP 地址占用了,
⑦ 保留地址
保留地址有很多,下面只列出一些常見的:
- 全零(“0.0.0.0”),嚴格說來,已經不是一個真正意義上的IP地址了,它表示的是這樣一個集合:所有不清楚的主機和目的網路,這里的“不清楚”是指在本機的路由表里沒有特定條目指明如何到達,對本機來說,它就是一個“收容所”,所有不認識的“三無”人員,一律送進去,
- 全“1”的IP地址(“255.255.255.255”),是當前子網的廣播地址,不能被路由器轉發,
- A 類中的 127.0.0.1,本機地址,主要用于測驗,用漢語表示,就是“我自己”,還有一個別名“Localhost”,無論什么程式,一旦使用回送地址發送資料,協議軟體立即回傳之,不進行任何網路傳輸,
- B 類中的 169.254.X.X,如果你的IP地址是自動獲取IP地址,而你在網路上又沒有找到可用的DHCP服務器,就會得到其中一個IP,
- 私有地址:在本地局域網上的IP,不會被Internet(公網)分配的:
- A類中:10.0.0.0~10.255.255.255
- B類中:172.16.0.0~172.31.255.255
- C類中:192.168.0.0~192.168.255.255
更多保留地址可參考:https://zh.m.wikipedia.org/zh-hans/保留IP地址
⑩ 缺點
分類劃分的主要缺點是,不能靈活隨意的劃分網路號和主機號,這會導致幾個問題:
- 1、IP地址分配上的“貧富不均”
對于主機地址有很多的 A 類地址,自然是搶手貨,但因為 IP 地址的分配機構掌握在美國手里,這樣,像麻省理工學院、AT&T等機構,一下子就把A類地址瓜分殆盡,而當因特網在全世界發展起來以后,其他國家只能申請 B類、C類地址,現在(聽說)整個中國連一個A類地址都沒有,B類地址估計也只有十多個,
- 2、浪費和不夠用
”富人“得到了,卻有很多主機地址用不完;”窮人“得到了,但主機地址卻不夠用,旱的旱死,澇的澇死,
所以,分類劃分是一個歷史概念, 在現在已經失去了意義,(接下來會介紹改進他的新辦法)
問:如何解決有類網路的不靈活 —— 子網掩碼
① 作用
上面提到 分類劃分 的缺點是,不能靈活隨意的劃分網路號和主機號,而子網掩碼正是要解決這個問題,
即子網掩碼只有一個作用,就是將某個IP地址劃分出網路地址和主機地址兩部分,
子網掩碼需要搭配 IP 地址一起出現才有意義,
② 原理

注意:子網掩碼是一串與 IP 地址長度相同的 32 位元數字,其左邊一部分都是 1,右邊一部分都是0,
③ 有類網路 結合 子網掩碼
即每類地址都具有默認的子網掩碼:
- 對于A類為255.0.0.0
- 對于B類為255.255.0.0
- 對于C類為255.255.255.0
(4) 無分類劃分(無類網路) —— CIDR/VLSM
① VLSM 與 CIDR 對比
1、介紹
VLSM(Variable Length Subnet Mask,可變長子網掩碼)CIDR (Classless Inter-Domain Routing,無類別域間路由)
2、原理
采用借位的方法,
- 在使用VLSM劃分子網時,即分成幾個小型網路(
子網),是將原來有類IP地址中的主機位按照需要劃出一部分作為網路位使用,即:
IP 地址= 網路號 + 子網號 + 主機號, - 在使用CIDR聚合地址時,即合成一個大的網路(
超網),是將原來有類IP地址中的網路位劃出一部分作為主機位使用,
在某種程度上來說,VLSM 和 CIDR 之間可以看做是逆程序,
3、無類網路 結合 子網掩碼
- VLSM:子網掩碼往右邊移,掩碼增長了,
- CIDR:子網掩碼往左邊移,掩碼縮短了,
[拓展] 斜線記法
又稱 “CIDR 記法”,即在IP地址后面加上一個斜線“/”,然后寫上網路前綴所占的位元數,即子網掩碼二進制表示法中,連續的 1 的 個數,
如 192.168.0.0/24,24 表示子網掩碼為:11111111·11111111·11111111·00000000,即 255.255.255.0,
這樣的寫法比直接寫子網掩碼要簡潔,
推薦一個已知 CIDR 記法 ,算出可用 IP 范圍的計算器:https://www.ipaddressguide.com/cidr

4、好處
- VLSM:解決了有類網路不能靈活隨意的劃分網路號和主機號的問題,
- CIDR:讓路由器的路由條目得到有效的減少,降低路由器負擔,
(5)[拓展] DHCP
DHCP(Dynamic Host Configuration Protocol, 動態主機配置協議)指的是由服務器控制一段IP地址范圍,客戶機登錄服務器時就可以自動獲得服務器分配的IP地址和子網掩碼,同時服務器會自動配置網關和 DNS 服務器地址,
DHCP(協議)采用的是C/S模型,
好處:如果我們手動分配IP地址,電腦多了,很多可能會分到重復的IP地址,改起來就麻煩了,但 DHCP 服務器可以集中管理,還能動態分配,保證網路的穩定性,
實際生活:在路由器設定中,有專門 DHCP 服務器的設定,默認是開啟的,

5、ip 地址枯竭
(1)IP 如何分配
IP地址是由互聯網號碼分配局(英語:Internet Assigned Numbers Authority,簡稱:IANA)以及其他5個區域互聯網注冊管理機構(英語:Regional Internet Registry,簡稱:RIR)在其指定區域內分配給本地Internet注冊表,例如網路服務提供商(英語:Internet Service Providers,簡稱:ISP)和其他最終用戶,
(2)IP 是怎樣的稀缺

(3)如何解決? —— NAT
除了 IPv4 本身在最初設計的時候,總量就是偏少的以外,雖然后來無類網路的誕生,部分緩解了 IPv4 地址稀缺的問題,但是還不夠,于是,我們需要更好的解決方案……
NAT(Network Address Translation,網路地址轉換)是一種在IP資料包通過路由器或防火墻時重寫來源IP地址或目的IP地址的技術,
原理:
通過映射表,如果是一對一轉換,那壓根節省不了IPv4地址空間;所以一般NAT都是一對多的,即一個公網IPv4映射多個私網IPv4,
好處:
- 解決了IP地址不足
- 避免來自網路外部的攻擊,隱藏并保護網路內部的計算機
- 寬帶分享
壞處:
- 讓主機之間的通信變得復雜,導致了通信效率的降低,
- 沒有公網 IP(因國內公網 IP 很稀缺,所以普遍使用 NAT 技術,導致個人用戶是沒有公網 IP 的,且私網 IP 是動態的)
(4)如何解決? —— IPv6
NAT 是一個非常好的解決方案,但 IPv6 明顯是一個更加擁抱未來的辦法,
① 介紹
IPv6 形如:2001:0db8:85a3:08d3:1319:8a2e:0370:7344
由兩個邏輯部分組成:一個64位的網路前綴和一個64位的主機地址,
② 好處
1、主要就是數量多
- IPv4 有2的32次方,也就是約42.9億個,
- IPV6 有2的128次方(可以給地球上每一顆沙子都分配一個IP),
應用場景:
- 物聯網
- 實作真正的網路實名制
2、IPv6具有更高的安全性通過IPv6協議的安全機制
3、IPV6傳輸速度更快IPv6的地址分配一開始就遵循聚類的原則,這大大減小了路由器中路由表的長度
4、IPv6加入了對自動配置的支持這是對DHCP協議的改進和擴展
5、IPv6擁有更好的頭部格式IPV6使用新的頭部格式,其選項與基本頭部分開,這簡化和加速了路由選擇程序,提高了效率
③ 發展情況
國外:
在2019年12月,通過IPv6使用Google服務的用戶百分率首次超過30%,
國內:
工信部發布了《工業和資訊化部關于開展2020年IPv6端到端貫通能力提升專項行動的通知》,通知中明確了2020年IPv6發展的三大目標、七項任務和四項保障措施,
……
發展基于IPv6的下一代互聯網,也為5G、資料中心等新型基礎設施建設奠定基礎,更為未來發展大規模的物聯網、工業互聯網開拓網路空間,搭建基礎環境,
④ 阻礙
- 對運營商和ISP來說,也意味著很大的資金投入(例如更新老設備)
- 影響某些公司賣公網 IP 的業務
- NAT的普及,讓人產生路徑依賴,避免投入太大的成本
二、DNS
1、什么是 DNS
DNS: Domain Name System,域名服務系統,是將域名和IP地址相互映射的資料庫,
DNS 的功能并不僅限于此,它還可以將郵件地址和郵件服務器進行關聯,以及為各種資訊關聯相應的名稱,
有域名,通過 DNS 查詢對應 IP 地址的操作,稱為域名決議,
2、客戶端 —— DNS 決議器
客戶端通過 DNS 決議器(DNS resolver)向DNS服務器發出查詢,
決議器實際上是一段程式,它包含在作業系統的 Socket 庫中,
(1)[拓展] Socket 庫
Socket 庫可以讓其他的應用程式呼叫作業系統的網路功能,用于呼叫網路功能的程式組件集合,而 DNS 決議器就是這個庫中的其中一種程式組件,
(2)發送查詢訊息
來自客戶端的查詢訊息包含以下 3 種資訊,
(a)域名
服務器、郵件服務器(郵件地址中 @ 后面的部分)的名稱
如 www.baidu.com
(b)Class
在最早設計 DNS 方案時,DNS 在互聯網以外的其他網路中的應用也被考慮到了,而 Class 就是用來識別網路的資訊,不過,如今除了互聯網并沒有其他的網路了,因此 Class 的值永遠是代表互聯網的 IN ,
(c)記錄型別
表示域名對應何種型別的記錄,
例如,當型別為 A 時,表示域名對應的是 IP 地址(A 是 Address 的縮寫);當型別為 MX 時,表示域名對應的是郵件服務器,
就像 gmail.com 的 A 和 MX 對應的肯定不是同一個 IP 地址,
3、DNS 服務器
DNS 服務器會接受客戶端發來的查詢訊息,然后從 域名與 IP 地址的對照表中查找相應的記錄,并回傳 IP 地址,
(1)怎么存? —— 域名的層次結構
問題:互聯網中的域名太多了,將這些資訊全部保存在一臺 DNS 服務器中是不可能的,
解決方案:將資訊分布保存在多臺 DNS 服務器中,這些 DNS 服務器相互接力配合,從而查找出要查詢的資訊,
問題:怎么分布保存?
解決方案:
第 ① 步:使用域名的層次結構,域名都是用句點來分隔的,越靠右的位置表示其層級越高,
比如 www.nikkeibp.co.jp 這個域名, 最上層的 jp 代表分配給日本這個國家的域;下一層的 co 是日本國內進行分類的域,代表公司;再下層的 nikkeibp 就是分配給某個公司的域;最下層的 www 就是服務器的名稱,
注意:jp 的上面還有一級域,稱為根域,根域不像 jp 那樣有自己的名字,因此在一般書寫域名時經常被省略,如果要明確表示根域,應該像 www.nikkeibp.co.jp. ,
WWW是 World Wide Web的簡稱,譯為萬維網或全球網,它是 Web 的提出者最早開發的瀏覽器兼 HTML 編輯器的名字,現在已經成為慣例,
第 ② 步:每一層級(域)都由不同的 DNS 服務器去存盤,
實際上, 一臺 DNS 服務器可以存放多個域的資訊,(這里為了交代清楚,不考慮這種情況了)
第 ③ 步:
首先,將負責管理下級域的 DNS 服務器的 IP 地址注冊到它們的上級 DNS 服務器中,然后上級 DNS 服務器的 IP 地址再注冊到 更上一級的 DNS 服務器中,以此類推,
這樣,我們就可以通過上級 DNS 服務器查詢出下級 DNS 服務器的 IP 地址,也就可以向下級 DNS 服務器發送查詢請求了,
其次,將根域的 DNS 服務器資訊保存在互聯網中所有的 DNS 服務器中,這樣一來,任何 DNS 服務器就都可以找到并訪問根域 DNS 服務器了, 因此,客戶端只要能夠找到任意一臺 DNS 服務器, 就可以通過它找到根域 DNS 服務器, 然后再一路順藤摸瓜,找到位于下層的某臺目標 DNS 服務器,
分配給根域 DNS 服務器 的 IP 地址在全世界僅有 13 個,而且這些地址幾乎不發生變化,因此將這些地址保存在所有的 DNS 服務器中也并不是一件難事,實際上, 根域 DNS 服務器的相關資訊已經包含在 DNS 服務器程式的組態檔中了,因 此只要安裝了 DNS 服務器程式,這些資訊也就被自動配置好了,
根域 DNS 服務器在運營上使用多臺服務器來對應一個 IP 地址,因此盡管 IP 地址只有 13 個,但其實服務器的數量是很多的,
(2)[拓展] 為什么根域名 DNS 服務器只有 13 臺 ?
①
IPv4中DNS協議使用的UDP資料包限制了最多只能有13臺根服務器;(即:當時一個udp包是512位元組,為了把13個都放進去,限制了13個而不是130個)
分布情況:美國擁有1臺主根服務器,在其余的12臺輔根服務器中,其中9臺部署在美國,2臺在歐洲(英國和瑞典),1臺在亞洲(日本),
隱患:
目前美國掌握著全球互聯網13臺域名根服務器中的10臺,理論上,只要在根服務器上屏蔽該國家域名,就能讓這個國家的國家頂級域名網站在網路上瞬間“消失”,在這個意義上,美國具有全球獨一無二的制網權,有能力威懾他國的網路邊疆和網路主權,譬如,伊拉克戰爭期間,在美國政府授意下,伊拉克頂級域名“.iq”的申請和決議作業被終止,所有網址以“.iq”為后綴的網站從互聯網蒸發,
中國的防治措施:
CNNIC(中國互聯網路資訊中心)作為中國的域名管理機構,采取了以下的應對措施:
- 1.CNNIC成立前,將.CN域名服務器從德國搬回中國,這是掌握國家域名主導權的前提,
- 2.2003年,CNNIC開始推廣 .CN域名,
- 3.2006年,CNNIC開通五大頂級節點,實行備災管理;對于.CN域名的網站就算全部國際線路中斷,CNNIC也有應急措施保障其能夠被正常訪問,
- 4.2006月12月,中國開通“根域名中國鏡像服務器”,這意味著今后中國網民在訪問任何以.COM和.NET為后綴的網站時不必再繞道美國,在本土即可完成訪問請求,
②
到了IPv6,根服務器的數量終于可以突破13個的限制,
2017年11月28日,由下一代互聯網國家工程中心牽頭發起的“雪人計劃”,已在全球完成25臺IPv6 DNS根服務器架設,中國部署了其中的4臺,由1臺主根服務器和3臺輔根服務器組成,
據說(只是據說),以前中國也是有DNS根服務器的,因為某墻的污染可能會導致其他國家的人無法正常的訪問被中國封殺的網站,所以后續中國的根服務器被踢出了DNS服務器的信任名單,
③
再之后,根域名 DNS 服務器只有 13 臺這個說法并不成立了,因為 DNS 根服務器利用任播技術,拓展到了更多節點,
至今(2020.2.15)在全球已經有1089個根域名服務器節點了,當前由12個組織負責運營,我們可以在https://root-servers.org/看到部署情況,(其中我國有26個根域名服務器節點)
(3)怎么找? —— 回應查詢訊息

問:最近 DNS 服務器本身的查找也很耗時,怎么辦?
解決方案:通過快取加快回應,
DNS 服務器中保存的資訊都設定有一個有效期(TTL),當快取中的資訊超過有效期后,資料就會從快取中洗掉,而且,在對查詢進行回應時,DNS 服務器也會告知客戶端這一回應的結果是來自快取中還是來自負責管理該域名的 DNS 服務器,
(4)本機配置 DNS 服務器
解決方案:盡量選大型的、離你近的 DNS 服務器,
實際生活(以 MAC 為例):

- 首選:8.8.8.8(google 的)
- 次選:114.114.114.114(國內最大的)
4、DNS 服務器 容易出現的問題
(1)DDoS 攻擊
例如:
2010年1月12日,由于美國負責百度域名決議的根服務器遭到了DDoS 攻擊,百度首頁出現大面積的訪問故障,全國絕大多數地區均無法訪問百度網站,
(2)DNS 劫持
DNS劫持 就是通過劫持了 DNS 服務器,通過某些手段取得某域名的決議記錄控制權,進而修改此域名的決議結果,導致對該域名的訪問由原 IP 地址轉入到修改后的指定 IP,其結果就是對特定的網址不能訪問或訪問的是假網址,
例如:
輸入一個錯誤或不存在的 URL 后,本應該出現404頁面,而我們看到的卻都是電信、聯通等運營商的網址導航頁面,
或者上面提到的 114.114.114.114 DNS 服務器,就提供無劫持和劫持兩者型別:
-
純凈 無劫持
服務ip為:114.114.114.114 和 114.114.115.115 -
攔截 釣魚病毒木馬網站 增強網銀、證券、購物、游戲、隱私資訊安全
服務ip為:114.114.114.119 和 114.114.115.119 -
學校或家長可選攔截 色情網站 保護少年兒童免受網路色情內容的毒害
服務ip為:114.114.114.110 和 114.114.115.110
(3)DNS 污染
DNS污染是一種讓一般用戶由于得到虛假目標主機 IP 而不能與其通信的方法,是一種 DNS 快取投毒攻擊(DNS cache poisoning),其作業方式是:由于通常的 DNS 查詢沒有任何認證機制,而且 DNS 查詢通常基于的 UDP 是無連接不可靠的協議,因此 DNS 的查詢非常容易被篡改,通過對 UDP 埠 53 上的 DNS 查詢進行入侵檢測,一經發現與關鍵詞相匹配的請求則立即偽裝成目標域名的決議服務器(NS,Name Server)給查詢者回傳虛假結果,
例如:
2014年1月21日,由于決議中國所有通用頂級域的根服務器出現DNS污染事件,百度、新浪、騰訊、京東等許多網站的在此次事件中均被劫持到65.49.2.178這個位于美國IP地址上,一度無法訪問,
5、Hosts 檔案
(1)什么是 Hosts 檔案
在沒有 DNS 的時代,是靠本地的 Hosts 檔案 來維護 主機名(域名) 和 IP 地址 的對應關系,
后來有了 DNS,但 Hosts 檔案依然還有作用:
- 1、加快域名決議
- 2、方便記憶,例如你有個遠程服務器有 ip 卻沒買域名的、或者局域網內某個主機設備,
- 3、自定義屏蔽或者中轉某個網站
(2)怎么用?
以 mac 為例:
sudo vi /etc/hosts
內容如下(只寫前三行,剩下的省略):
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
可以看到我們常用的 localhost 其實就是對應的 127.0.0.1,
三、TCP
TCP:傳輸控制協議(Transmission Control Protocol)
1、協議
(1)TCP 頭

注意:
- 僅當控制位 ACK=1 時 ACK號 才有效,
問:為什么需要源埠和目標埠?
答:即使你按照 ip 送達到了目的設備,但是同一臺計算機上還跑著多個網路程式,每一個網路程式都對應著不同的埠,(例如你是給瀏覽器還是給QQ?)
(2)連接 —— 三次握手
注:A 為發起連接的客戶端,B 為接收連接請求的服務器端,(下同)
步驟1、A 給 B 傳
- SYN = 1
- 序號(隨機,如1000)
步驟2、B 給 A 傳
- SYN = 1
- ACK = 1
- ACK號 = 1001(1000+1)
- 序號(隨機,如2000)
步驟3、A 給 B 傳
- ACK = 1
- ACK號 = 2001(2000+1)
- 序號(1001)
- 可以攜帶要傳的資料了
注:
- 序號 為 發送方告知接收方該網路包發送的資料相當于所有發送資料的第幾個位元組
- 為什么序號要隨機,而不是 A 和 B 都從 1 開始?為了安全,
- ACK號 為 接收方告知發送方接收方已經收到了所有資料的第幾個位元組,其中,ACK 是 acknowledge 的縮寫
- 控制位的 SYN(synchronize)是同步(序號)的意思,ACK(acknowledgement)是我已確認收到的意思,
問:為什么要三次握手才可以?
答:為了確認 A 和 B 雙方同時具有發送和接受能力,即:
- A 知道 B 的發送能力 —— 通過步驟2
- A 知道 B 的接收能力 —— 通過步驟2
- B 知道 A 的發送能力 —— 通過步驟1
- B 知道 A 的接收能力 —— 通過步驟1
(3)收發資料
假設:A 給 B 發兩次長度為 1000 的資料,且 A 序號從 40000 開始,B 序號 從 70000 開始,
步驟1、A 給 B 傳
- ACK = 1
- ACK號 = 70000
- 序號(40000)
- 攜帶 1000 的資料
步驟2、B 給 A 傳
- ACK = 1
- ACK號 = 41000(40000 + 1000)
- 序號(70000)
步驟3、A 給 B 傳
- ACK = 1
- ACK號 = 70001(70000+1)
- 序號(41000)
- 攜帶 1000 的資料
步驟4、B 給 A 傳
- ACK = 1
- ACK號 = 42000(41000 + 1000)
- 序號(70001)
注:
- 即使 B 給 A 傳的只是 ACK 包(不含資料),序號也是要 +1 的,
- TCP 是
全雙工的,即 A 可以給 B 傳,B 也可以給 A 傳, - 發送方不需要告訴接收方資料的長度,接收方會自己算:網路包的長度減去頭部的長度就等于資料的長度
(4)斷開連接 —— 四次揮手
假設:A 給 B 主動發出斷開連接的請求,且 A 序號從 80000 開始,B 序號 從 90000 開始,
步驟1、A 給 B 傳
- FIN = 1
- ACK = 1
- ACK號 = 90000
- 序號(80000)
步驟2、B 給 A 傳
- ACK = 1
- ACK號 = 80001(80000 + 1)
- 序號(90000)
步驟3、假設 B 還有沒發完的資料,需要再給 A 發 3 次,每次 1000
略
步驟4、B 給 A 傳(B 發送完成,也要斷開連接了)
- FIN = 1
- ACK = 1
- ACK號 = 80004(80001 + 1 * 3)
- 序號(93000)
步驟5、A 給 B 傳
- ACK = 1
- ACK號 = 93001(90001 + 1000 * 3)
- 序號(80004)
步驟6、B 收到 A 的 ACK 后 CLOSE,但是 A 得等到 2 倍的 MSL 時間才 CLOSE
A 給 B 發了 ACK 后,面臨兩種可能:
- 1、B 收到了,但是 B 不會回應我,已經 close 了
- 2、B 沒收到,于是會重新給我發 FIN
于是 A 需要考慮這兩種情況的總時間,即 發去的 ACK 時間和 發來的 FIN 時間,恰好等于 2 倍的 MSL(Maximum Segment Lifetime,報文最大生存時間)時間,(他是任何報文在網路上存在的最長時間,超過這個時間報文將被丟棄),
例如,這種方式可以防止 A close 后,又向 B 發起新的 TCP 連接,但是 B 沒有關閉之前的舊連接,產生了臟連接,
圖示(具體還是以上面的文字版為準(A 為 client,B 為 Server),這個圖是網上找到,方便快速查閱):

TIME_WAIT因為時間比較久,所以是一個熱門優化的點(尤其在大并發的情況下),
問:為什么握手是三次,揮手是四次?
答:因為揮手得考慮 B 的資料有沒有發完,所以多預留了一次,
問:必須是客戶端主動斷開連接嗎?服務器端可以嗎?
答:其實都可以,但一般都是資料發送完畢的一方會發起斷開程序,
以 Web 為例, 瀏覽器向 Web 服務器 發送請求訊息,Web 服務器再回傳回應訊息,這時收發資料的程序就全部結束了,服務器一方會發起斷開程序,
2、具體實作
(1)Socket
Socket 的英文單詞原意就是插座,翻譯到中文就是套接字,
Socket 可以指任何點對點的通信,例如:
- 最早,施樂(Xerox)公司在開發以太網技術的時候就設計過一個叫 XNS 的協議,那里面就用到socket這個詞了,
- WebSocket,一個應用層上實作客戶端-服務端全雙工的協議,
所以,用 Socket 這個詞的不僅僅只有 TCP/IP 協議,但,計算機網路的術語使用混亂和不嚴謹是有目共睹的,所以,還有另一種慣例,即 Sokcet 就是指 TCP/IP 協議堆疊(所提供的對外介面),
這個介面,最有名的當屬 Berkeley sockets,
而下面的敘述,都以更常見的 Python 的 socket 模塊為例,而 Python 的 socket 模塊就是基于 Berkeley sockets,
(2)創建套接字
服務器端 / 客戶端:
應用程式呼叫協議堆疊的 socket 方法創建套接字,
本來套接字就只是一個概念而已,并不存在物體,如果一定要賦予它一個物體,我們可以說,在協議堆疊內部有一塊記憶體空間,用于存放通信操作的控制資訊(例如存了通信物件的 IP 地址、埠號、通信操作的進行狀態等,便于協議堆疊根據這些資訊判斷下一步的行動),這些控制資訊就是套接字的物體,或者說存放控制資訊的記憶體空間就是套接字的物體,
對應的,作業系統的 netstat 命令支持顯示套接字內容,-ano 選項表示下面的意思:
- a 不僅顯示正在通信的套接字,還顯示包括尚未開始通信等狀態的所有套接字
- n 顯示 IP 地址和埠號
- o 顯示使用該套接字的程式 PID

(3)連接階段
① 服務器端
- 應用程式呼叫協議堆疊的
bind方法,引數為 ip(域名) 和 埠號(80/443 埠) - 再呼叫
listen方法,引數即掛起的最大連接數量(用于TCP監聽,有點像資料庫連接池) - 再呼叫
accept來接受客戶端來的連接
listen 和 accept 的等待連接的機制如下:

問1:為什么多個客戶端可以連接服務器的同一個埠
socket 的唯一標識并不僅僅是 port,而是 server ip + server port + client ip + client port,
② 客戶端
應用程式呼叫協議堆疊的 connect 方法,引數為 ip(域名) 和 埠號,
問1:為什么客戶端的埠很隨意,但服務器的埠卻是固定的 80?
答:
本來,早期的互聯網存在過通過 DNS 服務器查詢埠號的機制,只能說并沒有廣泛普及,
現在的規則,即埠號的規則是全球統一的,由 IANA(Internet Assigned Number Authority,互聯網編號管理局)這一組織來統一管理的,規定了:
- 埠號小于 1024 的是Internet標準服務的埠,埠號大于 1024 的,可以任意使用,
但也要注意別跟常見的應用程式默認的埠重復,比如 Postgres 的埠是 5433,
- 埠號小于 1024 里面,規定了 Web 是 80 號埠(HTTP)和 443 埠(HTTPS),電子郵件是 25 號埠等,
所以用戶使用瀏覽器訪問一個 url ,雖然埠號是預設的,但瀏覽器底層是幫你默默加了 80/443 埠的,
問2:為什么叫連接(connect)而不是準備(ready)?
使用“連接”這個詞是有原因的, 通信技術的歷史已經有 100 多年,從通信技術誕生之初到幾年之前的很長一段時間內,電話技術一直都是主流,而電話的操作程序分為三個階段:
- 1、撥號與對方連接;
- 2、通話;
- 3、掛斷,
人們將電話的思路套用在現在的計算機網路中了,所以也就自然而然地將通信開始之前的準備操作稱為“連接”了, 如果沒有這段歷史的話,說不定現在我們就不叫“連接”而是叫“準備”了,畢竟通信開始前,網路就是連接好的,而以前的電話不是,
(4)收發資料
服務器端 / 客戶端:
- 應用程式呼叫協議堆疊的
write方法發資料, - 應用程式呼叫協議堆疊的
read方法收資料,
注意:這兩種都是先寫入緩沖區,再由 TCP 自行收發,
write 和 read 方法是很基礎的操作,因此 python 提供了 send 和 recv 方法,后者提供了更多引數,更加方便和常用,
問: 一次寫入的資料太多,協議堆疊要怎么發送資料?
對較大的資料進行拆分,

注意:對 HTTP 頭部 + 訊息體 視為一個整體進行拆分,
(5)斷開連接
服務器端 / 客戶端:
應用程式呼叫協議堆疊的 close 方法,
服務器端 / 客戶端誰都可以主動呼叫 close 方法,
會洗掉套接字,
3、流量控制 與 滑動視窗
TCP 通過滑動視窗(Sliding Window)來做流量控制(Flow Control),
也有其它種流量控制的方法,
滑動視窗分為:發送視窗 和 接受視窗,
原理:接收方告知發送方自己能接收多少資料,即視窗大小,從而控制發送方的發送速度,從而達到防止發送方發送速度過快而導致自己緩沖區溢位,
這個視窗大小是動態調整的,也是調優的一個重要引數,
注1:通過 TCP 頭部的 視窗 欄位傳遞視窗大小,
注2:TCP 是雙工的協議,會話的雙方都可以同時接收、發送資料,所以雙方都各自維護一個“發送視窗”和一個“接收視窗”,
發送方的資料分為:
- 1 已經發送并得到對方ACK的
- 2 已經發送但還未收到對方ACK的
- 3 未發送但準備發送
- 4 未發送且不準備發送
其中,2 + 3 這兩部分資料才稱之為發送視窗,

接收方的資料分為:
- 1 已接收
- 2 未接收準備接收
- 3 未接收并未準備接收
其中,2 這部分資料才稱之為接收視窗,


關于滑動視窗的滑動、超時、重傳等待寫,
4、糊涂視窗綜合癥
當發送端應用行程產生資料很慢、或接收端應用行程處理接識訓沖區資料很慢,或二者兼而有之;就會使傳的包的資料很小,即有效載荷(payload)很小, 極端情況下,有效載荷可能只有1個位元組;而傳輸開銷有40位元組(20位元組的IP頭+20位元組的TCP頭) ,這種現象就叫糊涂視窗綜合癥 SWS (Silly Window Syndrome),
(1)發送端
例子:如 telnet 應用,每一次擊鍵操作就會產生1個位元組的資料包發送,
① 解決方法1:Nagle 演算法
原理:要求一個 TCP 連接上最多只能有一個未被確認的包,在這個包確認到達之前不能發送其他的包,這樣,TCP 在等待的時候,可以盡量多的拼接資料,從而發送有效載荷大的下一個包,
特點:自適應,即網路環境越好,確認到達得越快,資料也就發送得越快(每個包的資料就少),回應就越快;反之,資料也就發送得越慢(每個包的資料就多),回應就越慢,
如何關閉:是 TCP_NODELAY 配置,
② 解決方法2: Cork 演算法
也有人把 Cork 演算法稱呼為 Super-Nagle,
原理:Cork 演算法功能類似于在發送資料的管道出口處插入一個"塞子",使得發送資料全部被阻塞,直到:
- 被阻塞的資料長度已超過每個包能容納的最大資料長度,即
MSS( Maximum Segment Size,最大分段大小) - 超過預設時間
- 主動拔去塞子(應用程式在發送資料時可以指定一些選項,例如“不等待填滿緩沖區直接發送”)
才將其發出,
[拓展]
MTU(Maximum Transmission Unit,最大傳輸單元)和MSS( Maximum Segment Size,最大分段大小)如下圖所示:
MTU 在以太網中一般是 1500 位元組,TCP 和 IP 的頭部加起來一般是 40 位元組, 所以 MSS 一般是 1460 位元組,
特點:可以看出 Cork 演算法 比 Nagle 演算法 更加激進,對解決包的有效載荷問題當然更有效,但是可能回應、及時性更加不好了,
如何關閉:在 unix 上是 TCP_NOPUSH,在 linux 上是 TCP_CORK 配置,
③ 總結
| N/A | Nagle 演算法 | Cork 演算法 | |
|---|---|---|---|
| 吞吐量 | 低 | 中 | 高 |
| 延遲 | 低 | 中 | 高 |
因為 Nagle 演算法誕生比較早,思路簡單,靈活度差,從表中的結果看處于一個尷尬的狀態,所以一般都是默認關閉的,
所以一般的使用場景是:
- 關閉 Nagle 演算法 —— 小資料,低延遲,對并發要求高的互動性應用
- 打開 Cork 演算法 —— 大檔案傳輸,例如 FTP 服務器
(2)接收端
例子:如一開始,接收端應用每次消耗一個位元組,而發送端發的較多,很快緩沖區越來越滿,視窗大小就會縮小,直到變成0,這時發送端停止,隨后接收端讀取一個位元組,其視窗大小又變為1位元組,發送端立馬也發送只包括一個位元組的包,這樣的程序一直繼續下去,就成了 SWS,
① 解決方法1:Clark 演算法
只要有資料到達就發送 ACK,但宣布的視窗大小為零,直到快取空間已能放入 MSS 的長度,或者快取空間的一半已經空了,
② 解決方法2:TCP 延遲確認
這表示當一個包到達時并不立即發送確認 ACK,而是等到快取有足夠的空間為止,
缺點:有可能迫使發送端重傳其未被 ACK 的包,(可以定義 ACK 的的延遲不能超過500毫秒,)
下面還會詳細介紹 TCP 延遲確認,(它還有更多用處)
(3)關于 ACK 的 等待 策略
① 發送資料方 等待 ACK 到來
這個等待時間叫超時時間,需要設為一個合適的值,不能太長也不能太短,
但因為網路情況復雜,波動大,所以將等待時間設定為一個固定值并不是一個好辦法, 因此,TCP 采用了動態調整等待時間的方法,這個等待時間是根據 ACK 號回傳所需的時間來判斷的, 具體來說, TCP 會在發送資料的程序中持續測量 ACK 號的回傳時間,如果 ACK 號回傳變慢,則相應延長等待時間;相對地,如果 ACK 號馬上就能回傳,則相應縮短等待時間,
如果超過了等待時間,則會觸發重發機制,這就是 TCP 可靠傳輸的保證,
因此,網卡、集線器、路由器都沒有錯誤補償機制,一旦檢測到錯誤就直接丟棄相應的包,應用程式也是一樣,
不過,如果發生網路中斷、服務器宕機等問題,那么無論 TCP 怎樣重傳都不管用, 因此 TCP 會在嘗試幾次重傳無效之后強制結束通信,并向應用程式報錯,
② 接收資料方 等待 ACK 發出
1、傳統方法
當然是來一個資料包立馬回復一個 ACK,
2、TCP 延遲確認 (TCP Delayed Acknoledgement)
TCP 在接收到資料時并不立即發送 ACK,相反,它推遲發送,以便:
- 累積 資料 一起發送
- 累積 ACK 號 一起發送
- 累積 視窗更新 號一起發送
- 解決 糊涂視窗綜合癥 SWS(上面有提到)
絕大多數實作采用的時延為 200 ms,
適用場景:不要在對延遲性要求很高的場合使用,
如何關閉:是 TCP_QUICKACK 配置,
拓展:如果一個 TCP 連接的一端啟用了 Nagle 演算法,而另一端啟用了 TCP Delayed ACK,而發送的資料包又比較小,則可能會出現這樣的情況:發送端在等待接收端對上一個包的 ACK 才發送當前的包,而接收端則正好延遲了此 ACK 的發送,那么發送端接下來正要被發送的包也同樣被延遲,如何解決?有超時機制,默認是 40ms,
四、UDP
用戶資料報協議(User Datagram Protocol)
1、UDP 跟 TCP 的區別
- 不需要三次握手和四次揮手
- 沒有 ACK 確認機制
- 沒有重發機制
- 不需要滑動視窗
- ……
UDP 就像一張白紙,但靈活度比 TCP 更高,
所以現在冒出一些新的協議基本上都是基于 UDP 而不是 TCP,
2、UDP 頭部

3、UDP 適用場景
- 不需要重發的資料,例如直播
- 不能容忍延遲,如動作游戲
- 控制用的短資料:基本上都可以在一個包的大小范圍內解決,例如向 DNS 服務器查詢 IP 地址
4、UDP 優缺點
好處:
- 靈活(上面有提)
- 高效
缺點(除了跟 TCP 比):
- 容易會被防火墻阻止
5、實體 —— 微信是用 UDP 還是 TCP 還是?
微信用的比較綜合:
- HTTP(s),如登錄和獲取頭像
- TCP:如文字聊天、語音聊天
- UDP:如視頻聊天
而 QQ 由于歷史原因,基礎的聊天用的還是 UDP(但是上層做了可靠性的保證),
五、網路分類
1、按拓撲結構分類
- 總線型結構
- 環型結構
- 星型結構
- 樹型結構
- 網狀結構
- 等等
2、按照覆寫的地理范圍進行分類
簡單理解:一個小區就是個局域網(LAN),一個城市里由一個個小區構成,就構成了城域網(MAN),城與城連接起來就構成了一個非常大和遠的網,可以叫廣域網(WAN),全世界的連在一起的就是互聯網,
問:互聯網 和 因特網 的區別?
互聯網的英文是 internet,它的意思是“網路的網路”,是一個通用名詞,泛指有多個計算機網路互連而成的網路,這些網路之間的通信協議(即通信規則)是可以任意的,
因特網,即 Internet,記住它與 internet 之間絕對不能使用等于號,因為 Internet 是一個專有名詞,它是指當前全球最大的、開放的、有眾多網路互相連接而成的特定的計算機網路,
2002年起,有學者開始提議將“internet”一詞用小寫表示,理由是互聯網已經成為人類生活的一部分,失去了專有的意義;2016年,美聯社認為“互聯網”已和“電話”一樣成為一件一般的事物,不具有專屬商標的意義,于是開始在其格式手冊中規定“internet”和“web”一詞全部小寫,紐約時報也隨后跟進,但同時亦有媒體提出不同意見,
問:萬維網 和 互聯網 的區別?
互聯網上面已經說了,這里不贅述,
萬維網(World Wide Web)亦作 WWW、Web,是一個透過互聯網訪問的,由許多互相鏈接的超文本組成的系統,
萬維網的核心部分是由三個標準構成的:
- 統一資源識別符號(URI),這是一個統一的為資源定位的系統,
- 超文本傳送協議(HTTP),它負責規定客戶端和服務器怎樣互相交流,
- 超文本標記語言(HTML),作用是定義超文本檔案的結構和格式,
此外還需要網頁瀏覽器和網頁服務器,
此外 HTML 還需搭配 CSS 和 JavaScript 語言,
蒂姆·伯納斯-李是萬維網的創始者,現在是萬維網聯盟(W3C)的領匯入,2017年,他因“發明了萬維網、第一個瀏覽器和使得萬維網得以擴展的基礎協議及演算法”而獲得2016年度的圖靈獎,
六、網路的體系結構
1、垂直分層的參考模型
網路的體系結構是計算機網路各層次及其協議的集合,其層次結構一般以垂直分層模型來表示,分為:
OSI 的參考模型TCP/IP 的參考模型五層協議的參考模型
他們的關系如下圖所示:

一般采用折中的方法,采用五層協議的參考模型,自上而下分別為:
- [5] 應用層
- [4] 運輸層
- [3] 網路層
- [2] 資料鏈路層
- [1] 物理層
下面的敘述,如沒提,都默認以這個模型劃分為準,
2、協議
網路協議為計算機網路中進行資料交換而建立的規則、標準或約定的集合,
簡單理解就是不同的物體之間的通信,都需要一種規則,而我們就把這種規則稱為協議(protocol),
(1)五層參考模型下的協議劃分
- [5] 應用層 - 如 HTTP
- [4] 運輸層 - 如 TCP
- [3] 網路層 - 如 IP
- [2] 資料鏈路層 - 如 ARP
- [1] 物理層 - 如 IEEE802
上面各層中,可以換用任何一種與之層相對應的其他協議,
(2) TCP/IP 參考模型下的協議
互聯網協議套件(IPS:Internet Protocol Suite)是一個網路通信模型,以及一整個網路傳輸協議家族,為網際網路的基礎通信架構,它常被通稱為TCP/IP協議族(TCP/IP Protocol Suite),簡稱為TCP/IP,
注意:TCP/IP 不是指 TCP 協議 + IP 協議,這么稱呼只因為該協議家族的兩個核心協議:TCP(傳輸控制協議)和IP(網際協議),為該家族中最早通過的標準,(另一種說法:最早的 TCP/IP 原型設計相當于現在的 TCP 和 IP 合在一起的樣子,后來才拆分成為 TCP 和 IP 兩個協議,)
可以理解成:TCP/IP 是互聯網相關的各類協議族的總稱,
(3) 協議堆疊
首先,協議堆疊(Protocol stack),是計算機網路協議套件的一個具體的軟體實作,
其次,TCP/IP 協議堆疊 就是對 TCP/IP 協議的一個具體的軟體實作,

注:下文所說的協議堆疊,默認就指 TCP/IP 協議堆疊,不再贅述,
協議堆疊在不同的作業系統上,實作方式并不相同,但是大同小異,
七、局域網
上面我們提到了 廣域網、城域網、局域網的區別,前兩者的具體實作我們不涉獵了,但是局域網值得好好聊聊,
局域網屬于資料鏈路層+物理層,
1、以太網
要知道,最早的互聯網就是從局域網演變而來的,而局域網最早的實作又是以太網(Ethernet),
以太網最早是由Xerox(施樂)公司創建的,在1980年由DEC、Intel和Xerox三家公司聯合開發為一個標準,
2、其他的局域網實作
- 令牌環網(Token Ring)
- 異步傳輸模式網(ATM)
- 光纖分布式介面網路(FDDI)
- Wi-Fi —— 這個大家最常見
問:Wi-Fi 和 無線局域網 的區別?
Wi-Fi 是 無線局域網(WLAN)的一種技術實作,采用 IEEE 802.11 的標準,
3、局域網中運用最廣泛的是以太網
上面提到了 TCP/IP 是包含了很多網路傳輸協議的家族,所以 TCP/IP 在 網路介面層(即五層模型里的資料鏈路層 + 物理層)可以依托各種的局域網實作,但主流的還是以太網,稱為 TCP/IP over Ethernet,
而互聯網則是由大大小小的運營商、公司、機構、用戶連接起來網路的總稱,里面可就不止僅有以太網,還包含其他的局域網實作,
問:為什么以太網比其他的局域網實作更廣泛的普及?
答:1、配置簡單 2、組網靈活 3、價格低廉,
4、以太網的特征
IEEE 組織的 IEEE 802.3 制定了以太網的技術標準,
(1)物理層傳輸媒介
- 同軸電纜
- 雙絞線(常見)
- 光纜
雙絞線的極限距離是 100 米,但光纖的連接距離可以長達幾公里,
物理層傳輸媒介的不同,影響最大的是傳輸速率,在以太網的標準中,包括了:
- 標準以太網(10Mbps)
- 快速以太網(100Mbps)
- 千兆以太網(1000Mbps)
- 10G以太網(10000Mbps)
(2)CSMA/CD
以太網采用的是帶沖突檢測的載波幀聽多路訪問沖突檢測(CSMA/CD)機制,
- CS:載波偵聽(Carrier Sense),發送資料之前進行偵聽,確保線路空閑時再發送資料,減少沖突機會,
- MA:多路訪問(Multiple Access),每個站點發送的資料,可同時被多個站點接收,也即網路上所有的作業站共享資料信道,并且以廣播方式發送資料,
- CD:沖突檢測(Collision Detection),邊發送邊檢測,發現沖突就停止發送,然后延遲一個隨機時間之后繼續發送,
優點:原理比較簡單,技術上容易實作,網路中各作業站處于平等地位,不需集中控制,不提供優先級控制,
缺點:在網路負載增大時,會導致發送時間增長,發送效率急劇下降,
5、MAC 地址
MAC 地址(Media Access Control Address)是用于以太網標識,
也適用于基于以太網搞的其他型別的網路,比如 Wi-Fi 等,
每塊網卡的MAC 地址是全世界唯一的,
(1)MAC 地址格式
MAC 地址有 48 位元(6 位元組),
跟 IP 地址比,MAC 地址不是層次化的結構,即不分網路號主機號,
- 寫法一:用“-”分隔的寫法
00-80-C8-2D-82-EA - 寫法二:用“:“分隔的寫法
00:80:C8:2D:82:EA
它們的意思是一樣的,使用任何一種寫法都可以,
(2)常見問題
問:怎么查看 MAC 地址?
下面都以 MacOS 為例:
方法一:跟查看的 IP 的方法一樣,輸入 ifconfig 命令,ether 后面的即是:

方法二:直接看網路設定

問:MAC 地址可以修改嗎?
sudo ifconfig en0 ether 20-7C-8F-73-B1-1E
注意1:上面的 en0 不是固定的,對應著用 ifconfig 命令看到的對應的網卡,
注意2:電腦重啟后,MAC 地址會恢復原樣,
八、包
這里的包,默認基于 TCP/IP + 以太網
包是由頭部和資料兩部分構成的,
高級研究計劃局網路(英語:Advanced Research Projects Agency Network),通稱阿帕網(英語:
ARPANET)是美國國防高級研究計劃局開發的世界上第一個運營的資料包交換網路,是全球互聯網的鼻祖,
RFC (Request for Comments,征求修正意見書),始于1969年,由當時就讀加州大學洛杉磯分校(UCLA)的斯蒂芬·克羅克(Stephen D. Crocker)用來記錄有關ARPANET開發的非正式檔案,他是第一份RFC檔案的撰寫者,最終演變為用來記錄互聯網規范、協議、程序等的標準檔案,基本的互聯網通信協議都有在RFC檔案內詳細說明,
1、參考模型下包的劃分
- [5] 應用層 - 報文(Message)
- [4] 運輸層 - 資料段(Segment)
- [3] 網路層 - 資料包(Packet)
- [2] 資料鏈路層 - 資料幀(Frame)
- [1] 物理層 - 無,就是位元
關于段、包、幀,雖是不同叫法,但都是一回事,
每一層都負責給包添加上自己獨屬的頭部:

2、協議堆疊對包的處理
TCP 模塊在執行連接、收發、斷開等各階段操作時,除了添加 TCP 頭部,其他都需要委托 IP 模塊將資料封裝成包發送給通信物件,
IP 模塊會添加 IP 頭部和 MAC 頭部這兩種頭部,
注意:IP 模塊不光添加 IP 頭部,還添加 MAC 頭部,(這是 ARP 的內容,下面會介紹)
3、分組交換 與 存盤轉發

- 傳統的電話機,必須經過”建立連接(分配通信資源)、通話(一直占用通信資源)、釋放連接(歸還通信資源)“三個步驟,這種交換方式稱為
電路交換, - 計算機網路通常采用
分組交換技術,即把要發送的整塊資料稱為一個報文(message),發送之前,先把較長的報文劃分成為一個個更小的等長資料段,在每一個資料段前面加上必要的控制資訊(如目的地址、源地址等)組成的首部(header),這樣就構成了一個分組(packet),分組又稱為“包”,而分組的首部也可稱為“包頭”,計算機將分組通過通信鏈路直接發送給分組交換機(如交換機、路由器),分組交換機收到一個分組則暫時存盤下來,先校驗錯誤,再檢查其首部,按照首部中的目的地址查找轉發表,找到合適的埠(就是分組交換機和外部連接的介面)轉發出去,把分組交給下一個分組交換機,這樣一步一步把分組轉發到最終的目的計算機,由于每個分組交換機都是將收到的分組先存盤下來再轉發出去,因此該方法被稱為存盤轉發方式(與之對應的是直通轉發方式),
① 分組交換比電路交換好的地方:
- 不存在建立時延
- 信道利用率高
- 當某條傳輸線路故障時可選擇其他傳輸線路,可靠性高,
不足:
- 存在轉發時延
- 比較復雜,例如處理頭部控制資訊的開銷
- 有出現失序的可能性
② 存盤轉發比直通轉發好的地方:
- 錯誤檢驗
- 自動快取
- 策略功能(ACL)
不足:
- 轉發慢
九、網路設備
下面的介紹都基于 以太網 + TCP/IP ,
1、網線
(1)雙絞線
例如局域網中,網線普遍使用的是雙絞線,其中“雙絞”的意思就是以兩根信號線為一組纏繞在一起,這種擰麻花一樣的設計是為了抑制噪聲的影響,
雙絞線的性能是以“類”來區分的,如下圖:

建議:家用六類或超六類,不建議用七類(此為工業所用)
2、網卡
(1)網卡的組成

網卡中的 PHY(MAU) 模塊負責包與電信號之間的轉換,電信號通過 RJ-45 介面進出網線(電信號的本質是正負變化的電壓),
- 現在 100 Mbit/s 以上的以太網中叫作
PHY(物理層裝置),以前低速方式中則叫作MAU(介質連接單元), - RJ-45,是以太網使用雙絞線連接時常用的一種連接器插頭,
- MAC 地址是在網卡生產時寫入 ROM 里,全世界唯一,
- 主要廠商的網卡驅動程式已經內置在作業系統中了,無需單獨安裝,
問:MAC 模塊是怎么知道自己的 MAC 地址的?
答:網卡的 ROM 寫入了出廠前寫入的 MAC 地址,在網卡初始化的時候,將這個值讀出并進行設定,MAC 模塊就知道自己對應的 MAC 地址了,但也有一些特殊的方法,比如從命令或者組態檔中讀取 MAC 地址并分配給 MAC 模塊,這種情況下,網卡會忽略 ROM 中的 MAC 地址,
(2)MAC 頭部

(3)網卡收包

步驟1:電信號轉成數字信號
- PHY(MAU)模塊將信號轉換成通用格式并發送給 MAC 模塊,
- MAC 模塊 通過
報頭的波形同步時鐘,然后遇到起始幀分界符時開始將后面的信號轉換成數字資訊,到達信號的末尾時,還需要檢查FCS,最后存放到緩沖區中,如果檢查 FCS 不正確,即當作錯誤包丟棄,
步驟2:檢查 MAC 地址
MAC 模塊需檢查緩沖區中已變成數字信號的包的內容,即檢查 MAC 頭部中 接收方 MAC 地址與網卡在初始化時分配給自己的 MAC 地址是否一致,以判斷這個包是不是發給自己的,如果是,繼續放在緩沖區,如果不是,則丟棄,
步驟3:網卡交付給協議堆疊
- 網卡向擴展總線中的中斷信號線發送信號,該信號線通過計算機中的中斷控制器連接到 CPU,當產生中斷信號時,CPU 會暫時掛起正在處理的任務,切換到作業系統中的中斷處理程式,然后,中斷處理程式會呼叫
網卡驅動,從網卡的緩沖區中取出收到的包, - 網卡驅動通過 MAC 頭部中的以太型別欄位判斷協議的型別,交給不同的協議堆疊,
如 0080(十六進制)代表 IP 協議,網卡驅動就會把這樣的包交給 TCP/IP 協議堆疊;如果是 809B 則表示 AppleTalk 協議,就把包交給 AppleTalk 協議堆疊,以此類推,
(4)網卡發包
這個是上面的反操作,就不贅述了,
3、中繼器
中繼器主要完成 [1] 物理層的功能,負責在兩個節點的物理層上按位傳遞資訊,完成信號的復制、調整和放大功能,以此來延長網路的長度,
4、集線器(Hub)
集線器作業在 [1] 物理層,集線器每個埠相當于一個中繼器,
(1)為什么要用集線器
最早期的局域網所用的拓撲結構為總線型,
這么一種設計其實是去中心化的思想,也是互聯網誕生的初衷,即美國軍方為了戰備考慮(沒有中心設備,被摧毀任何一臺,其他的照樣可以繼續作業,
其實作在為了容災,在重要的節點上會采用網狀拓撲結構,
但日常的局域網中,運用最廣泛的還是星形拓撲結構(比較簡單,方便管理),而星形拓撲的中心節點,即由集線器承擔,
當信號到達集線器后,會被廣播到整個網路中,被所有連接在它上面的設備收到,(然后由設備根據接收方 MAC 地址來判斷是否應該接收,)
集線器可以說是以太網思想的最好體現,
(2)集線器的結構

因為集線器要跟別的網卡連接,所以也具備:
- PHY(MAU)
- RJ-45
他們負責把電信號轉化成通用格式,
但有自己特殊的模塊:中繼電路,用于實作信號的廣播,
5、交換機(Switch)
交換機作業在 [2] 資料鏈路層,交換機每個埠相當于一個網卡,
但跟網卡的區別是,交換機的埠不具有 MAC 地址,相對的,交換機的埠不核對接收方 MAC 地址,而是直接接收所有的包并存放到緩沖區中,
(1)交換機的結構

咱們平時所說的交換機,其實專業說法叫以太網交換機,也有支持其他(局域網)協議的交換機,
(2)為什么要用交換機?
首先我們看看集線器為什么被淘汰,因為集線器是廣播的形式,擁有之前我們提到的以太網 CSMA/CD 機制的全部缺點,主要有:
- 信號碰撞
- 共享帶寬
這些都會造成:
- 容易故障
- 效率低下
而交換機是怎么解決問題的呢?
交換機內部有一張 MAC 地址與網線埠的對應表,叫 MAC 地址表,然后根據地址表,用交換電路(內部交換矩陣)迅速將資料包傳送到目的埠,即轉發,
若目的MAC在地址表里找不到,交換機才廣播到所有的埠,接收埠回應后交換機會“學習”新的地址,并把它添加入內部地址表中,(還有一種情況會廣播,是接收方 MAC 地址是一個廣播地址,)
當交換機發現一個包要發回到原埠時,就會直接丟棄這個包,
優點:
- 不用廣播,即不會碰撞
- 獨享帶寬(同時執行多個轉發操作)
(3)地址表的維護
- 每次收到包,將發送方 MAC 地址以及其輸入埠的號碼寫入 MAC 地址表中,
- 每隔一段時間(例如30s),就洗掉地址表中某些記錄的操作,這是為了防止設備移動時產生問題,
總之,交換機會自行更新或洗掉地址表中的記錄,不需要手動維護,
當地址表的內容出現例外時,只要重啟一下交換機就可以重置地址表,也不需要手動進行維護,
具備管理功能的高端交換機是提供手動維護地址表的功能的, 但一般的低端機型中沒有這個功能,想手動維護也不行,
(4)拓展:作業模式 —— 全雙工 與 半雙工
其實交換機比集線器還好在一個地方,即交換機支持全雙工,集線器只支持半雙工,
問:什么是全雙工 與 半雙工?
答:發送和接收同時并行的方式叫作“全雙工” ,相對地,某一時刻只能進行發送或接收其中一種操作的叫作“半雙工”,
問:怎么判斷兩個設備之間該用全雙工還是半雙工?
這里需要用到自動協商,
首先,在以太網中,在沒有資料信號時就填充連接脈沖,這使得網路中一直都有一定的信號流過,從而能夠檢測對方是否在正常作業,以及網線有沒有正常連接,體現在以太網設備的網線介面周圍有一個綠色的 LED 指示燈,
難怪叫以太網叫以太,這個脈沖信號跟宇宙中的以太太像了,
自動協商功能就利用了這樣的脈沖信號,即通過這種信號將自己能夠支持的作業模式和傳輸速率相互告知對方,并從中選擇一個最優的組合(參考下表),

(5)拓展:三層交換機
因交換機作業于 OSI 模型的第 2 層(資料鏈路層),故而稱為二層交換機,
顧名思義,三層交換機就是也可以作業在第 3 層(網路層),具有部分路由器功能的交換機,
三層交換機可以同時作業在三層和二層,
感興趣可以戳:為什么三層交換機無法替代路由器?
6、路由器(Router)
路由器作業在 [3] 網路層,路由器每個埠相當于一個網卡,
前面提到交換機埠雖然相當于網卡,但是埠本身不具有 MAC 地址,而路由器的埠具有 MAC 地址(還有 IP 地址),所以他更像網卡,
實際上,我們家里用的路由器已經集成了集線器和交換機的功能,像我們介紹的這種獨立設備的情況很少見,不過,把每個功能獨立出來更容易理解,
冷知識:交換機比路由器更加簡單,因此可能有人以為交換機應該比路由器出現得更早,其實是路由器先問世的,
(1)路由器的結構

埠模塊:不同的路由器埠模塊有所不同,例如支持 ADSL 的路由器,支持 FTTH 的路由器,支持專線等線路的路由器等,(就跟網卡一樣,也有支持不同協議的網卡)
(2)路由器接收包
步驟1:確認收包,去 MAC 頭部
跟網卡一樣,路由器的埠都具有 MAC 地址,只接收與自身 MAC 地址相匹配的包,否則丟棄,
完成包接收操作后,丟棄包開頭的 MAC 頭部,
步驟2:查詢路由表確定輸出介面
上面去掉包的 MAC 頭部后,獲取到 IP 頭部,然后查詢路由表判斷轉發目標,


查看路由表命令(以 MacOS 為例):netstat -r
① 匹配規則:
- find 目標地址(即 IP 地址)+ 子網掩碼,只判斷網路號而忽略主機號,找到后轉發到對應的介面,
- 如果匹配到多條候選記錄,那就優先選擇網路號位元數最長的一條記錄,這叫
“最長匹配”原則,網路號位元數越長,說明主機號位元數越短,也就意味著該子網內可分配的主機數量越少,即子網中可能存在的主機數量越少,這一規則的目的是盡量縮小范圍,所以根據這條記錄判斷的轉發目標就會更加準確,
- 如果還匹配到多條候選記錄,那就選擇躍點數最小的一條記錄,
躍點計數越小說明該路由越近,因此應選擇躍點計數較小的記錄,
- 如果最終無法找到匹配的記錄,路由器會丟棄這個包,并通過 ICMP 訊息告知發送方,
ICMP(Internet Control Message Protocol,Internet 控制報文協議),屬于網路層協議,提供可能發生在通信環境中的各種問題反饋,
問:交換機因為連接的設備相對少,姑且可以在 MAC 地址表中放入所有設備的資訊,但是路由器連接的設備那么多,路由表怎么放的下?
答:確實放不下,所以一般路由器都會配默認路由,即路由表最后一行(IP 地址 0.0.0.0,子網掩碼 0.0.0.0),那么任何地址都能匹配到這一條記錄,
這一行配置的網關地址被稱為默認網關,
② 確定轉發目標(介面):
- 如果路由表的網關列內容為 IP 地址, 則該地址就是下一個轉發目標,
這就是上面提到的默認路由,
- 如果路由表的網關列內容為空,則 IP 頭部中的接收方 IP 地址就是下一個轉發目標,
補充:對路由表進行維護的方法有幾種,大體上可分為以下兩類,
- 由人手動維護路由記錄
- 根據
路由協議機制, 通過路由器之間的資訊交換由路由器自行維護路由表的記錄路由協議有很多種,例如 RIP、OSPC、BGP 等都屬于路由協議,
步驟3:轉發前,確定 MAC 頭部填什么 —— ARP
路由器知道要從哪個介面轉發后,接下來需要組裝 MAC 頭部,這里使用 ARP(Address Resolution Protocol),即地址決議協議,它可以根據 IP 地址查詢 MAC 地址,ARP 會利用廣播對所有設備提問:“××× 這個 IP 地址是誰的?請把你的 MAC 地址告訴我,”然后就會有人回答:“這個 IP 地址是我的, 我的 MAC 地址是 ×××,” 路由器也有 ARP 快取表,因此首先會在 ARP 快取中查詢,如果找不到再發送 ARP 查詢請求,
- ARP 屬于 TCP/IP協議,作業在網路層,所以是實作在 TCP/IP 協議堆疊中的,
在 OSI 模型中 ARP 協議屬于資料鏈路層;而在 TCP/IP 模型中,ARP 協議屬于網路層,
- ARP 快取表跟之前介紹的交換機的 MAC 地址表一樣,也會(在幾分鐘左右)定時洗掉,
arp -a命令可以顯示 ARP 快取內容,
拓展:ARP 欺騙
ARP 是建立在網路中各個主機互相信任的基礎上的,局域網路上的主機可以自主發送ARP應答訊息,其他主機收到應答報文時不會檢測該報文的真實性就會將其記入本機ARP快取;由此攻擊者就可以向某一主機發送偽ARP應答報文,使其發送的資訊無法到達預期的主機或到達錯誤的主機,這就構成了一個ARP欺騙,
至于應對的方法有很多種,這里略,
步驟4:改寫 MAC 頭部,發包
- 加 MAC 頭前,需要對 IP 頭做一些修改:上面說到默認路由,它的想法是本網路找不到,就讓他去別的網路找把,但會有一個問題,如果一直找不到,會無休止的投遞,造成死回圈,解決方法就是在包的 IP 頭部加上包的有效期:
TTL(Time to Live, 生存時間),一般發送方在發送包時會將 TTL 設為 64 或 128,然后路由器在轉發包的時候,都要減 1,當這個值變成 0 時,就表示超過了有效期,這個包就會被丟棄,
現在的互聯網即便訪問一臺位于地球另一側的服務器,最多也只需要經過幾十個路由器,
- 將通過 ARP 獲取到的 MAC 頭部加在 IP 頭部的前面,整個包就完成了,發送,
MAC 頭部很容易被誤解為是由網卡來處理的,實際上它是由 TCP/IP 軟體來負責的,
(3)路由器跟交換機的區別
- 交換機是基于 MAC 地址的,路由器是基于 IP 地址的,
MAC 地址表示物理地址,IP 地址表示邏輯地址,
IP 地址本質上是終點地址,它在跳過路由器的時候不會改變,而 MAC 地址則是下一跳的地址,每跳過一次路由器都會改變, - 交換機的每個埠都沒有 MAC 地址,路由器的每個埠都有 MAC 地址和 IP 地址,
所以交換機只是將進來的包轉發出去而已,自己并不會成為發送方或者接收方,
- 交換機用 MAC 地址表,路由器用路由表,
- 交換機在地址表中只匹配完全一致的記錄,而路由器則會忽略主機號部分,只匹配網路號部分,
- 交換機中對 MAC 地址表的維護是包轉發操作中的一個步驟 ,而路由器中對路由表的維護是跟與包轉發操作相互獨立的,也就是說,在轉發包的程序中不需要對路由表的內容進行維護,
即 路由表管 IP 地址的轉發,ARP 管 MAC 地址的轉發,
也請注意,MAC 地址表、ARP 表、路由表 的區別,
(4)路由器的附加功能
① NAT
上面我們討論過 NAT(Network Address Translation,網路地址轉換) 來緩解 IPv4 地址稀缺的問題,那技術上是如何實作的呢?
早期的地址轉換機制是只改寫 IP 地址,不改寫埠號的(解決內網中的設備不能和互聯網直接收發網路包的問題),即映射表是一對一的關系(一個公網地址對應一個私網地址),但這節省不了IPv4地址空間,
后來,IPv4 地址稀缺,NAT 的作用來了,即,既改寫 IP 地址,也改寫埠號,而映射表是一對多的關系(一個公網地址對應多個私網地址,用埠號區分)
埠號是一個 16 位元 的數值,總共可以分配出幾萬個埠,
額外加成:
NAT 有防火墻的作用,即對于沒有在訪問互聯網的內網設備,是無法從互聯網向其發送網路包的,
但有時候我們希望能夠從互聯網訪問公司內網,這需要進行一些設定才能實作,之所以無法從互聯網訪問內網,是因為映射表里沒有相應的記錄,那么我們只要事先手動添加這樣的記錄就可以了,
② 路由器的包過濾功能
包過濾指的是,路由器在對包進行轉發時,根據 MAC 頭部、IP 頭部、TCP 頭部的內容,按照 事先設定好的規則決定是轉發這個包,還是丟棄這個包,
我們通常說的防火墻設備或軟體,大多數都是利用這一機制來防止非法入侵的,
7、關于不同模塊對包的頭部的越權操作的思考
(1)IP 模塊為什么越權去添加 MAC 頭部?
嚴格來說,IP 模塊和 MAC 模塊有各自的責任范圍,MAC 頭部應該由 MAC 模塊(例如網卡)去添加,而不是 IP 模塊,但從現實來看,讓 IP 負責是有利的, 如果在交給網卡之前,IP 模塊能夠完成打包作業,那么網卡只要將打好的包發送出去就可以了(至于接收操作也一樣),對于除 IP 以外的其他型別的包也是如此,這樣一來,同一塊網卡就可以支持各種型別的包,與其機械地設計模塊和設備之間的分工,導致網卡只能支持 IP 包,不如將分工設計得現實一些,讓網卡能夠靈活支持各種型別的包,
(2)TCP 模塊為什么越權去直接獲取 IP 頭部中的接收方和發送方 IP 地址?
嚴格來說,TCP 模塊和 IP 模塊有各自的責任范圍,TCP 頭部屬于 TCP 的 責任范圍,而 IP 頭部屬于 IP 模塊的責任范圍,而現實中是,當包交給 TCP 模塊之后,TCP 模塊需要查詢 IP 頭部中的接收方和發送方 IP 地址來查找相應的套接字,這個程序就顯得有點奇怪,因為 IP 頭部是 IP 模塊負責的,TCP 模塊去查詢它等于是越權了,
如果要避免越權,應該對兩者進行明確的劃分,IP 模塊只向 TCP 模塊傳遞 TCP 頭部以及它后面的資料,而對于 IP 頭部中的重要資訊,即接收方和發送方的 IP 地址,則由 IP 模塊以附加引數的形式告知 TCP 模塊,然而,如果根據這種嚴格的劃分來開發程式的話,IP 模塊和 TCP 模塊之間的互動程序必然會產生成本, 而且 IP 模塊和 TCP 模塊進行類似互動的場景其實非常多,總體的互動成本就會很高,程式的運行效率就會下降,因此,就像之前提過的一樣,不妨將責任范圍劃分得寬松一些,將 TCP 和 IP 作為一個整體來看待,這樣可以帶來更大的靈活性,
8、常用命令
(1)ping
ping 可以說是 ICMP 協議最著名的應用,利用“ping”命令可以檢查網路是否連通,可以很好地幫助我們分析和判定網路故障,
用法:ping baidu.com
原理:用型別碼為0的ICMP發請求,收到請求的主機則用型別碼為8的ICMP回應,
(2)如何 ping 埠?
ping 是 ICMP 協議,作業在網路層,所以肯定是 ping 不了埠的,
方法一:telnet
以 CentOS 為例,默認是沒有安裝 telnet 的,所以需要安裝下: yum install telnet,
用法:telnet baidu.com 80
方法二:nc( MacOS 下)
MacOS 下有自帶的 nc 命令,跟 telnet 命令一樣,他也可以操縱 TCP or UDP,
用法:nc -vz -w 2 baidu.com 80
注意:用上面的方法檢測埠,必須這個埠被使用,例如有應用程式監聽此埠(如 nginx listen),否則會顯示埠未開放,
(3)traceroute
traceroute 是用來偵測主機到目的主機之間所經路由情況的重要工具,也是最便利的工具,
用法:traceroute baidu.com
原理:traceroute 的原理是非常非常的有意思,它收到到目的主機的IP后,首先給目的主機發送一個TTL=1的UDP資料包,而經過的第一個路由器收到這個資料包以后,就自動把TTL減1,而TTL變為0以后,路由器就把這個包給拋棄了,并同時產生一個主機不可達的ICMP資料報給主機,主機收到這個資料報以后再發一個TTL=2的UDP資料報給目的主機,然后刺激第二個路由器給主機發ICMP資料報,如此往復直到到達目的主機,這樣,traceroute就拿到了途徑所有的路由器IP,
十、接入網
接入網用于連接網路運營商(ISP)的線路,連接用戶與互聯網,
接入網這個詞表示的是通信線路的用法,而并不表示通信線路的結構,例如公司里使用的專線,當它用來連接互聯網時就叫作接入網,而用來連接總公司和分公司時就不叫接入網, 此外,接入網這個詞也不僅限于互聯網,當使用運營商提供的通信服務時,一般都會將用戶與運營商之間的線路叫作接入網,
1、接入網種類
一般家用的接入網方式包括 ADSL、FTTH 、CATV、電話線、ISDN 等,公司則還可能使用專線,接入網的線路有很多種類,我們無法探索所有這些線路,下面值介紹兩種最常用的,
專線是固定連接線路,不需要進行身份認證,其實,這就是最古老的互聯網接入方式,
(1)ADSL 接入網

ADSL:Asymmetric Digital Subscriber Line,不對稱數字用戶線,它是一種利用架設在電線桿上的金屬電話線來進行高速通信的技術,它的上行方向(用戶到互聯網)和下行方向(互聯網到用戶)的通信速率是不對稱的,
用戶端所需設備:
- 安裝一個將電話信號和 ADSL 信號分開的設備,這個設備叫
分離器, ADSL Modem,Modem即調制解調器,其實是Modulator(調制器)與Demodulator(解調器)的簡稱,有些情況下會使用集成了互聯網接入路由器和 ADSL Modem 的多功能 ADSL Modem(也叫
路由型 ADSL Modem),其實就是把路由器和 ADSL Modem 裝到一個外殼里而已,
(2)光纖接入網(FTTH)
FTTH:Fiber To The Home,光纖到戶,指的是將光纖接入家庭的意思,

① 光纖
先將數字資訊轉換成電信號,然后再將電信號轉換成光信號,亮表示 1,暗表示 0,
發送端是光源,
接收端有可以感應光線的光敏元件,光敏元件可以根據光的亮度產生不同的電壓,當光信號照射到上面時,光亮的時候就產生高電壓,光暗的時候就產生低電壓,這樣就將光信號轉換成了電信號,
② 單模光纖和多模光纖
單模光纖和多模光纖在光的傳導方式上有所不同,這決定了它們的特性也有所不同,
- 多模光纖中可以傳導多條光線,這意味著能通過的光線較多,對光源和光敏元件的性能要求也就較低,從而可以降低光源和光敏元件的價格,
- 單模光纖的纖芯中只能傳導一條光線,能通過的光線較少,相應地對于光源和光敏元件的性能要求就較高,但信號的失真會比較小,
使用場景:單模光纖的失真小,可以比多模光纖更長,因此多模光纖主要用于一座建筑物里面的連接,單模光纖則用于距離較遠的建筑物之間的連接,
FTTH 主要使用單模光纖,
③ 直連和分路
一種光纖的接入方式是用一根光纖直接從用戶端連接到最近的電話局, 用戶端使用光纖收發器(即光 Modem),將電信號轉換成光信號的設備,
另一種光纖的接入方式是在用戶附近的電線桿上安裝一個名為分光器的設備,通過這個設備讓光纖分路,同時連接多個用戶,在這種方式下,用戶端不使用光纖收發器,而是使用一個叫作 ONU(Optical Network Unit, 光網路單元)的設備,它和光纖收發器一樣,可以將電信號轉換成光信號,
通過光纖分路連接多個用戶的光纖接入模式統稱為
PON(Passive Optical Network, 無源光網路), 可分為 GE-PON、WDM-PON、B-PON、G-PON 等多種方式,現在大多使用最高速率為 1 Gbit/s 的 GE-PON 方式,
終端盒可以當是對光纖收發器和 ONU 等光纖終端設備的統稱,
2、接入網中使用 PPPoE
(1)BAS
順著上面的內容,用戶發送的網路包會通過 ADSL 和 FTTH 等接入網到達運營商的 BAS(Broadband Access Server,寬帶接入服務器) ,
BAS 又稱 BRAS(Broadband Remote Access Servers),同樣是寬帶接入服務器,
問:BAS 也是一種路由器,那與一般的路由器有什么不同?
答:BAS 可以提供用戶認證和配置下發功能,例如 BAS 讓終端用戶需要先輸入用戶名和密碼,登錄之后才能訪問互聯網,
(2)PPPoE
BAS 通過 PPPoE(Point-to-Point Protocol over Ethernet,以太網的點對點協議) 來實作上面的功能,
PPPoE 是由傳統電話撥號上網上使用的 PPP 協議發展而來的,屬于資料鏈路層,
PPPoE 包的頭部組成:

十一、網路運營商
互聯網的物體并不是由一個組織運營管理的單一網路,而是由多個運營商網路相互連接組成的,
1、網路運營商的設備

(1)POP
POP: Point of Presense,中文一般叫作“接入點”
ADSL、FTTH 等接入網與用戶簽約的運營商相連的設備,稱為 POP,
互聯網的入口就位于這里,
(2)NOC
NOC: Network Operation Center,網路運行中心
NOC 是運營商的核心設備,從 POP 傳來的網路包都會集中到這里,并從這里被轉發到離目的地更近的 POP,或者是轉發到其他的運營商,
這里需要配備高性能的路由器,到底需要多高的性能才行呢?我們來看實際產品的引數,面向運營商的高性能路由器中有些產品的資料吞吐量超過 1 Tbit/s ,而一般面向個人的路由器的資料吞吐量也就 100 Mbit/s 左右,兩者相差 1 萬多倍,當然,路由器的性能不完全是由吞吐量決定的,但從這里可以看出規模和性能的差異,
(3)POP 和 NOC 的邊界
其實,NOC 和 POP 并沒有非常嚴格的界定,NOC 里面也可以配備連接接入網的路由器,很多情況下是和 POP 共用的,因此,大家可以簡單地認為,NOC 就是規模擴大后的 POP,
(4)IX
IX: Internet eXchange,互聯網交換中心
用于不同運營商之間的連接,
這里的路由器會使用到 BGP: Border Gateway Protocol,邊界網關協議,且路由交換可分為兩類:
- 一類是將互聯網中的路由全部告知對方,稱為
轉接, - 另一種型別是兩個運營商之間僅將與各自網路相關的路由資訊告知對方,這樣,只有雙方之間的網路可以互相收發網路包,這種方式稱為
非轉接,也叫對等,
2、線路的連接
- 室內:公司的機房一般使用雙絞線來連接設備
- 室外:對于距離較遠的 NOC、POP 和 IX 來說,更多的使用光纖
拓展:租借光纖
只有有限的幾家大型運營商才擁有自己的光纖,那么,其他運營商怎么辦呢?其實也不難,只要從其他公司租借光纖就可以了,擁有光纖的公司一般都會提供光纖租用服務,這個光纖租用不一定租用的就是光纖,可能也是將自己的光纖的一部分通信能力租借給客戶,
這種服務就叫作
通信線路服務,
3、機房建設
為了保證在遇到停 電、火災等事故,以及地震等自然災害時,路由器等網路設備還能繼續作業,IX 所在的大樓都裝有自主發電設備,并具有一定的抗震能力,其實這樣的要求也不僅限于 IX,運營商的 NOC 也是一樣,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/17683.html
標籤:其他

