朝花夕拾——《網絡是怎樣鏈接的》

注:本文基於《網絡是怎樣鏈接的》一書。python

背景:畢業4年了,不少當初在學校學的計算機網絡知識都忘了,此文爲工做幾年後的一次再回顧、思考和梳理,以供後續查閱。linux

1、IP 地址


注意:IP 跟 IP 地址不是一個概念,IP 是 Internet Protocol,是一個協議,而 IP 地址 Internet Protocol Address,是 IP 中的一個概念。git

但有時候有些場景,會習慣直接說 IP,其實指的是 IP 地址。知道就好。(網絡這個領域不少名詞都是使用混亂的)web

一、IP 地址的表示

IP地址(Internet Protocol Address)是由32位二進制位組成的 xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx。算法

若是按每8位爲一組,轉換成十進制的話,能夠寫成由三個句點分隔的4位數字的形式,即點分十進制表示法:例如192.168.0.1。數據庫

因此,IP地址只有32位,滿打滿算42.9億個地址瀏覽器

二、IP 地址的做用

IP地址有兩個主要功能:緩存

  • 標識設備(IP 地址是網絡設備的邏輯地址,以此來屏蔽物理地址(即 MAC 地址))
  • 網絡尋址

三、查看個人 IP 地址

(1)私網 IP

① 命令行安全

以 linux(CentOS)爲例:服務器

  • 方法一:ifconfig
  • 方法二:ip addr

linux的ip命令和ifconfig命令相似,但前者功能更強大,並旨在取代後者。

ifconfig是net-tools中已被廢棄使用的一個命令,許多年前就已經沒有維護了。


② OS GUI

以 MAC 爲例,打開 設置 -> 網絡:

(2)公網 IP

上面看到的 IP 其實都是私網 IP(跟現實中大量使用 NAT 有關,下面會介紹),公網 IP 則須要經過別的方法:

四、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地址


⑩ 缺點

分類劃分的主要缺點是,不能靈活隨意的劃分網絡號和主機號,這會致使幾個問題:

  • 一、IP地址分配上的「貧富不均」

對於主機地址有不少的 A 類地址,天然是搶手貨,但由於 IP 地址的分配機構掌握在美國手裏,這樣,像麻省理工學院、AT&T等機構,一會兒就把A類地址瓜分殆盡,而當因特網在全世界發展起來之後,其餘國家只能申請 B類、C類地址。如今(據說)整個中國連一個A類地址都沒有,B類地址估計也只有十多個。

  • 二、浪費和不夠用

」富人「獲得了,卻有不少主機地址用不完;」窮人「獲得了,但主機地址卻不夠用。旱的旱死,澇的澇死。


因此,分類劃分是一個歷史概念, 在如今已經失去了意義。(接下來會介紹改進他的新辦法)

問:如何解決有類網絡的不靈活 —— 子網掩碼

① 做用

上面提到 分類劃分 的缺點是,不能靈活隨意的劃分網絡號和主機號,而子網掩碼正是要解決這個問題。

即子網掩碼只有一個做用,就是將某個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 對比

一、介紹

  • VLSM(Variable Length Subnet Mask,可變長子網掩碼)
  • CIDR (Classless Inter-Domain Routing,無類別域間路由)

二、原理

採用借位的方法。

  • 在使用VLSM劃分子網時,即分紅幾個小型網絡(子網),是將原來有類IP地址中的主機位按照須要劃出一部分做爲網絡位使用。

    即:IP 地址= 網絡號 + 子網號 + 主機號

  • 在使用CIDR聚合地址時,即合成一個大的網絡(超網),是將原來有類IP地址中的網絡位劃出一部分做爲主機位使用。

在某種程度上來講,VLSM 和 CIDR 之間能夠看作是逆過程


三、無類網絡 結合 子網掩碼

  • 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


四、好處

  • VLSM:解決了有類網絡不能靈活隨意的劃分網絡號和主機號的問題。
  • CIDR:讓路由器的路由條目獲得有效的減小,下降路由器負擔。
(5)[拓展] DHCP

DHCP(Dynamic Host Configuration Protocol, 動態主機配置協議)指的是由服務器控制一段IP地址範圍,客戶機登陸服務器時就能夠自動得到服務器分配的IP地址和子網掩碼。同時服務器會自動配置網關和 DNS 服務器地址。

DHCP(協議)採用的是C/S模型。

好處:若是咱們手動分配IP地址,電腦多了,不少可能會分到重複的IP地址,改起來就麻煩了。但 DHCP 服務器能夠集中管理,還能動態分配,保證網絡的穩定性。

實際生活:在路由器設置中,有專門 DHCP 服務器的設置,默認是開啓的。

五、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位的主機地址。

② 好處

一、主要就是數量多

  • IPv4 有2的32次方,也就是約42.9億個。
  • IPV6 有2的128次方(能夠給地球上每一顆沙子都分配一個IP)。

    應用場景:

    • 物聯網
    • 實現真正的網絡實名制

二、IPv6具備更高的安全性經過IPv6協議的安全機制
三、IPV6傳輸速度更快IPv6的地址分配一開始就遵循聚類的原則,這大大減少了路由器中路由表的長度
四、IPv6加入了對自動配置的支持這是對DHCP協議的改進和擴展
五、IPv6擁有更好的頭部格式IPV6使用新的頭部格式,其選項與基本頭部分開,這簡化和加速了路由選擇過程,提升了效率


③ 發展狀況

國外:

在2019年12月,經過IPv6使用Google服務的用戶百分率首次超過30%。

國內:
工信部發布了《工業和信息化部關於開展2020年IPv6端到端貫通能力提高專項行動的通知》,通知中明確了2020年IPv6發展的三大目標、七項任務和四項保障措施。
……
發展基於IPv6的下一代互聯網,也爲5G、數據中心等新型基礎設施建設奠基基礎,更爲將來發展大規模的物聯網、工業互聯網開拓網絡空間,搭建基礎環境。


④ 阻礙

  • 對運營商和ISP來講,也意味着很大的資金投入(例如更新老設備)
  • 影響某些公司賣公網 IP 的業務
  • NAT的普及,讓人產生路徑依賴,避免投入太大的成本

2、DNS


一、什麼是 DNS

DNS: Domain Name System,域名服務系統,是將域名和IP地址相互映射的數據庫。

DNS 的功能並不只限於此,它還能夠將郵件地址和郵件服務器進行關聯,以及爲各類信息關聯相應的名稱。

有域名,經過 DNS 查詢對應 IP 地址的操做,稱爲域名解析

二、客戶端 —— 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 地址。

三、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(國內最大的)

四、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地址上,一度沒法訪問。

五、Hosts 文件

(1)什麼是 Hosts 文件

在沒有 DNS 的時代,是靠本地的 Hosts 文件 來維護 主機名(域名) 和 IP 地址 的對應關係。

後來有了 DNS,但 Hosts 文件依然還有做用:

  • 一、加快域名解析
  • 二、方便記憶。例如你有個遠程服務器有 ip 卻沒買域名的、或者局域網內某個主機設備。
  • 三、自定義屏蔽或者中轉某個網站
(2)怎麼用?

以 mac 爲例:

sudo vi /etc/hosts

內容以下(只寫前三行,剩下的省略):

127.0.0.1	localhost
255.255.255.255	broadcasthost
::1             localhost

能夠看到咱們經常使用的 localhost 其實就是對應的 127.0.0.1。

3、TCP


TCP:傳輸控制協議(Transmission Control Protocol)

一、協議

(1)TCP 頭

注意:

  • 僅當控制位 ACK=1 時 ACK號 纔有效。

問:爲何須要源端口和目標端口?

答:即便你按照 ip 送達到了目的設備,可是同一臺計算機上還跑着多個網絡程序,每個網絡程序都對應着不一樣的端口。(例如你是給瀏覽器仍是給QQ?)

(2)鏈接 —— 三次握手

注:A 爲發起鏈接的客戶端,B 爲接收鏈接請求的服務器端。(下同)

步驟一、A 給 B 傳

  • SYN = 1
  • 序號(隨機,如1000)

步驟二、B 給 A 傳

  • SYN = 1
  • ACK = 1
  • ACK號 = 1001(1000+1)
  • 序號(隨機,如2000)

步驟三、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 開始。

步驟一、A 給 B 傳

  • ACK = 1
  • ACK號 = 70000
  • 序號(40000)
  • 攜帶 1000 的數據

步驟二、B 給 A 傳

  • ACK = 1
  • ACK號 = 41000(40000 + 1000)
  • 序號(70000)

步驟三、A 給 B 傳

  • ACK = 1
  • ACK號 = 70001(70000+1)
  • 序號(41000)
  • 攜帶 1000 的數據

步驟四、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 開始。

步驟一、A 給 B 傳

  • FIN = 1
  • ACK = 1
  • ACK號 = 90000
  • 序號(80000)

步驟二、B 給 A 傳

  • ACK = 1
  • ACK號 = 80001(80000 + 1)
  • 序號(90000)

步驟三、假設 B 還有沒發完的數據,須要再給 A 發 3 次,每次 1000

步驟四、B 給 A 傳(B 發送完成,也要斷開鏈接了)

  • FIN = 1
  • ACK = 1
  • ACK號 = 80004(80001 + 1 * 3)
  • 序號(93000)

步驟五、A 給 B 傳

  • ACK = 1
  • ACK號 = 93001(90001 + 1000 * 3)
  • 序號(80004)

步驟六、B 收到 A 的 ACK 後 CLOSE,可是 A 得等到 2 倍的 MSL 時間才 CLOSE

A 給 B 發了 ACK 後,面臨兩種可能:

  • 一、B 收到了,可是 B 不會迴應我,已經 close 了
  • 二、B 沒收到,因而會從新給我發 FIN

因而 A 須要考慮這兩種狀況的總時間,即 發去的 ACK 時間和 發來的 FIN 時間,剛好等於 2 倍的 MSL(Maximum Segment Lifetime,報文最大生存時間)時間。(他是任何報文在網絡上存在的最長時間,超過這個時間報文將被丟棄)。

例如,這種方式能夠防止 A close 後,又向 B 發起新的 TCP 鏈接,可是 B 沒有關閉以前的舊鏈接,產生了髒鏈接。


問:爲何握手是三次,揮手是四次?

答:由於揮手得考慮 B 的數據有沒有發完,因此多預留了一次。


問:必須是客戶端主動斷開鏈接嗎?服務器端能夠嗎?

答:其實均可以。但通常都是數據發送完畢的一方會發起斷開過程。

以 Web 爲例, 瀏覽器向 Web 服務器 發送請求消息,Web 服務器再返回響應消息,這時收發數據的過程就所有結束了,服務器一方會發起斷開過程。

(5)補充 —— ACK 號的等待時間 和 重發機制

返回 ACK 號的等待時間(這個等待時間叫超時時間)須要設爲一個合適的值,不能太長也不能過短。

但由於網絡狀況複雜,波動大,因此將等待時間設置爲一個固定值並非一個好辦法。 所以,TCP 採用了動態調整等待時間的方法,這個等待時間是根據 ACK 號返回所需的時間來判斷的。 具體來講, TCP 會在發送數據的過程當中持續測量 ACK 號的返回時間,若是 ACK 號返回變慢,則相應延長等待時間;相對地,若是 ACK 號立刻就能返回,則相應縮短等待時間。

若是超過了等待時間,則會觸發重發機制。這就是 TCP 可靠傳輸的保證。

所以,網卡、集線器、路由器都沒有錯誤補償機制,一旦檢測到錯誤就直接丟棄相應的包。應用程序也是同樣。

不過,若是發生網絡中斷、服務器宕機等問題,那麼不管 TCP 怎樣重傳都無論用。 所以 TCP 會在嘗試幾回重傳無效以後強制結束通訊,並嚮應用程序報錯。

(6)補充 —— 滑動窗口

每發送一個包就等待一個 ACK 號的方式是最簡單也最容易理解的, 但在等待 ACK 號的這段時間中,若是什麼都不作那實在太浪費了。

所謂滑動窗口,就是在發送一個包以後,不等待 ACK 號返回,而是直接發送後續的一系列包。這樣一來,等待 ACK 號的這段時間就被有效利用起來了。

接收方有必要告訴發送方本身最多能接收多少數據,而後發送方根據這個值對數據發送操做進行控制(不然接收緩衝區中的數據就會越堆越多,最後就會溢出),這稱爲窗口大小

窗口大小是 TCP 調優參數中很是有名的一個。


二、具體實現

(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 多年,從通訊技術誕生之初到幾年以前的很長一段時間內,電話技術一直都是主流。而電話的操做過程分爲三個階段:

  • 一、撥號與對方鏈接;
  • 二、通話;
  • 三、掛斷。

人們將電話的思路套用在如今的計算機網絡中了,因此也就天然而然地將通訊開始以前的準備操做稱爲「鏈接」了。 若是沒有這段歷史的話,說不定如今咱們就不叫「鏈接」而是叫「準備」了,畢竟通訊開始前,網絡就是鏈接好的,而之前的電話不是

(4)收發數據

服務器端 / 客戶端:

  • 應用程序調用協議棧的 write 方法發數據。
  • 應用程序調用協議棧的 read 方法收數據。

注意:這兩種都是先寫入緩衝區,再由 TCP 自行收發。


問1:在 write 後,協議棧發送數據的時機是?

答:

write 只是寫入緩衝區的意思,並不等於 send,那協議棧何時發送數據呢?

若是協議棧一收到數據就立刻發送出去,就可能會發送大量的小包,致使網絡效率降低,所以須要在數據積累到必定量時再發送出去。至於要積累多少數據才能發送,不一樣種類和版本的操做系統會有所不一樣,不能一律而論,但都是根據下面幾個要素來判斷的:

一、第一個判斷要素是每一個網絡包能容納的數據長度

協議棧會根據 MTU(Maximum Transmission Unit,最大傳輸單元)MSS( Maximum Segment Size,最大分段大小) 來進行判斷。當超過或者接近 MSS 時再發送出去。

MTU 在以太網中通常是 1500 字節,TCP 和 IP 的頭部加起來通常是 40 字節, 因此 MSS 通常是 1460 字節。

二、另外一個判斷要素是時間

當應用程序發送數據的頻率不高的時候,若是每次都等到長度接近 MSS 時再發送,可能會由於等待時間太長而形成發送延遲,這種狀況下,即使緩衝區中的數據長度沒有達到 MSS,也應該果斷髮送出去。

三、總結

判斷要素就是這兩個,但它們實際上是互相矛盾的。所以,在進行發送操做時須要綜合考慮這兩個要素以達到平衡。

這就跟旅遊景區的大巴同樣,等車上游客坐滿了再走,賺的錢更多,可是若是等了段時間尚未來新人,那越等損失越大,仍是走比較好。

但協議棧也給應用程序保留了控制發送時機的餘地。應用程序在發送數據時能夠指定一些選項,好比若是指定「不等待填滿緩衝區直接發送」,則協議棧就會按照要求直接發送數據。

四、拓展 —— ACK 與窗口的合併

協議棧不光會累計些數據一塊兒發,還會累計些包一塊兒發。

  • 當須要連續發送多個 ACK 號時, 能夠減小包的數量
  • 當須要連續發送多個 窗口更新 號時,能夠減小包的數量
  • 當須要連續發送多個 ACK 號 和 窗口更新 號時,也能夠減小包的數量

問2: 一次 write 太多,協議棧要怎麼發送數據?

對較大的數據進行拆分

注意:對 HTTP 頭部 + 消息體 視爲一個總體進行拆分。


注:read 的這方,其實也會碰到 問一、問2 的狀況該如何制定策略(涉及多久讀一次數據或者拼接傳來的拆分好的原始大數據)。這裏就不贅述了。


write 和 read 方法是很基礎的,所以 python 提供了更方便的 sendrecv 方法,後者更加經常使用。

(5)斷開鏈接

服務器端 / 客戶端:

應用程序調用協議棧的 close 方法。

服務器端 / 客戶端誰均可以主動調用 close 方法。

會刪除套接字。

4、UDP


用戶數據報協議(User Datagram Protocol)

一、UDP 跟 TCP 的區別

  • 不須要三次握手和四次揮手
  • 沒有 ACK 確認機制
  • 沒有重發機制
  • 不須要滑動窗口
  • ……

UDP 就像一張白紙,但靈活度比 TCP 更高。

因此如今冒出一些新的協議基本上都是基於 UDP 而不是 TCP。

二、UDP 頭部

三、UDP 適用場景

  • 不須要重發的數據,例如直播
  • 不能容忍延遲,如動做遊戲
  • 控制用的短數據:基本上均可以在一個包的大小範圍內解決,例如向 DNS 服務器查詢 IP 地址

四、UDP 優缺點

好處:

  • 靈活(上面有提)
  • 高效

缺點(除了跟 TCP 比):

  • 容易會被防火牆阻止

五、實例 —— 微信是用 UDP 仍是 TCP 仍是?

微信用的比較綜合:

  • HTTP(s),如登陸和獲取頭像
  • TCP:如文字聊天、語音聊天
  • UDP:如視頻聊天

而 QQ 因爲歷史緣由,基礎的聊天用的仍是 UDP(可是上層作了可靠性的保證)。

5、網絡分類


一、按拓撲結構分類

  • 總線型結構
  • 環型結構
  • 星型結構
  • 樹型結構
  • 網狀結構
  • 等等

二、按照覆蓋的地理範圍進行分類

簡單理解:一個小區就是個局域網(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年度的圖靈獎。

6、網絡的體系結構


一、垂直分層的參考模型

網絡的體系結構是計算機網絡各層次及其協議的集合,其層次結構通常以垂直分層模型來表示。分爲:

  • OSI 的參考模型
  • TCP/IP 的參考模型
  • 五層協議的參考模型

他們的關係以下圖所示:

通常採用折中的方法,採用五層協議的參考模型,自上而下分別爲:

  • [5] 應用層
  • [4] 運輸層
  • [3] 網絡層
  • [2] 數據鏈路層
  • [1] 物理層

下面的敘述,如沒提,都默認以這個模型劃分爲準。

二、協議

網絡協議爲計算機網絡中進行數據交換而創建的規則、標準或約定的集合。

簡單理解就是不一樣的實體之間的通訊,都須要一種規則,而咱們就把這種規則稱爲協議(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 協議棧。再也不贅述。

協議棧在不一樣的操做系統上,實現方式並不相同,可是大同小異。

7、局域網


上面咱們提到了 廣域網、城域網、局域網的區別,前二者的具體實現咱們不涉獵了,可是局域網值得好好聊聊。

局域網屬於數據鏈路層+物理層

一、以太網

要知道,最先的互聯網就是從局域網演變而來的。而局域網最先的實現又是以太網(Ethernet)

以太網最先是由Xerox(施樂)公司建立的,在1980年由DEC、Intel和Xerox三家公司聯合開發爲一個標準。

二、其餘的局域網實現

  • 令牌環網(Token Ring)
  • 異步傳輸模式網(ATM)
  • 光纖分佈式接口網絡(FDDI)
  • Wi-Fi —— 這個你們最多見

問:Wi-Fi 和 無線局域網 的區別?

Wi-Fi 是 無線局域網(WLAN)的一種技術實現,採用 IEEE 802.11 的標準。

三、局域網中運用最普遍的是以太網

上面提到了 TCP/IP 是包含了不少網絡傳輸協議的家族,因此 TCP/IP 在 網絡接口層(即五層模型裏的數據鏈路層 + 物理層)能夠依託各類的局域網實現。但主流的仍是以太網,稱爲 TCP/IP over Ethernet

而互聯網則是由大大小小的運營商、公司、機構、用戶鏈接起來網絡的總稱,裏面可就不止僅有以太網,還包含其餘的局域網實現。

問:爲何以太網比其餘的局域網實現更普遍的普及?

答:一、配置簡單 二、組網靈活 三、價格低廉。

四、以太網的特徵

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),邊發送邊檢測,發現衝突就中止發送,而後延遲一個隨機時間以後繼續發送。

優勢:原理比較簡單,技術上容易實現,網絡中各工做站處於平等地位,不需集中控制,不提供優先級控制。

缺點:在網絡負載增大時,會致使發送時間增加,發送效率急劇降低。

五、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 地址會恢復原樣。

8、包


這裏的包,默認基於 TCP/IP + 以太網

包是由頭部數據兩部分構成的。

高級研究計劃局網絡(英語:Advanced Research Projects Agency Network),通稱阿帕網(英語:ARPANET)是美國國防高級研究計劃局開發的世界上第一個運營的數據包交換網絡,是全球互聯網的鼻祖

一、參考模型下包的劃分

  • [5] 應用層 - 報文(Message)
  • [4] 運輸層 - 數據段(Segment)
  • [3] 網絡層 - 數據包(Packet)
  • [2] 數據鏈路層 - 數據幀(Frame)
  • [1] 物理層 - 無,就是比特

關於段、包、幀,雖是不一樣叫法,但都是一回事。

每一層都負責給包添加上本身獨屬的頭部:

二、協議棧對包的處理

TCP 模塊在執行鏈接、收發、斷開等各階段操做時,除了添加 TCP 頭部,其餘都須要委託 IP 模塊將數據封裝成包發送給通訊對象。

IP 模塊會添加 IP 頭部和 MAC 頭部這兩種頭部。

注意:IP 模塊不光添加 IP 頭部,還添加 MAC 頭部。(這是 ARP 的內容,下面會介紹)

三、分組交換 與 存儲轉發

  • 傳統的電話機,必須通過」創建鏈接(分配通訊資源)、通話(一直佔用通訊資源)、釋放鏈接(歸還通訊資源)「三個步驟,這種交換方式稱爲電路交換
  • 計算機網絡一般採用分組交換技術。即把要發送的整塊數據稱爲一個報文(message),發送以前,先把較長的報文劃分紅爲一個個更小的等長數據段。在每個數據段前面加上必要的控制信息(如目的地址、源地址等)組成的首部(header),這樣就構成了一個分組(packet)。分組又稱爲「包」,而分組的首部也可稱爲「包頭」。計算機將分組經過通訊鏈路直接發送給分組交換機(如交換機、路由器),分組交換機收到一個分組則暫時存儲下來,先校驗錯誤,再檢查其首部,按照首部中的目的地址查找轉發表,找到合適的端口(就是分組交換機和外部鏈接的接口)轉發出去,把分組交給下一個分組交換機,這樣一步一步把分組轉發到最終的目的計算機。因爲每一個分組交換機都是將收到的分組先存儲下來再轉發出去,所以該方法被稱爲存儲轉發方式(與之對應的是直通轉發方式)。

① 分組交換比電路交換好的地方:

  • 不存在創建時延
  • 信道利用率高
  • 當某條傳輸線路故障時可選擇其餘傳輸線路,可靠性高。

不足:

  • 存在轉發時延
  • 比較複雜,例如處理頭部控制信息的開銷
  • 有出現失序的可能性

② 存儲轉發比直通轉發好的地方:

  • 錯誤檢驗
  • 自動緩存
  • 策略功能(ACL)

不足:

  • 轉發慢

9、網絡設備


下面的介紹都基於 以太網 + TCP/IP 。

一、網線

(1)雙絞線

例如局域網中,網線廣泛使用的是雙絞線,其中「雙絞」的意思就是以兩根信號線爲一組纏繞在一塊兒,這種擰麻花同樣的設計是爲了抑制噪聲的影響。

雙絞線的性能是以「」來區分的,以下圖:

建議:家用六類或超六類,不建議用七類(此爲工業所用)

二、網卡

(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)網卡發包

這個是上面的反操做,就不贅述了。

三、中繼器

中繼器主要完成 [1] 物理層的功能。負責在兩個節點的物理層上按位傳遞信息,完成信號的複製、調整和放大功能,以此來延長網絡的長度。

四、集線器(Hub)

集線器工做在 [1] 物理層。集線器每一個端口至關於一箇中繼器。

(1)爲何要用集線器

最先期的局域網所用的拓撲結構爲總線型

這麼一種設計實際上是去中心化的思想,也是互聯網誕生的初衷,即美國軍方爲了戰備考慮(沒有中心設備,被摧毀任何一臺,其餘的照樣能夠繼續工做。

其實如今爲了容災,在重要的節點上會採用網狀拓撲結構。

但平常的局域網中,運用最普遍的仍是星形拓撲結構(比較簡單,方便管理),而星形拓撲的中心節點,即由集線器承擔。

當信號到達集線器後,會被廣播到整個網絡中,被全部鏈接在它上面的設備收到。(而後由設備根據接收方 MAC 地址來判斷是否應該接收。)

集線器能夠說是以太網思想的最好體現。

(2)集線器的結構

由於集線器要跟別的網卡鏈接,因此也具有:

  • PHY(MAU)
  • RJ-45

他們負責把電信號轉化成通用格式。

但有本身特殊的模塊:中繼電路,用於實現信號的廣播。

五、交換機(Switch)

交換機工做在 [2] 數據鏈路層。交換機每一個端口至關於一個網卡。

但跟網卡的區別是,交換機的端口不具備 MAC 地址。相對的,交換機的端口不覈對接收方 MAC 地址,而是直接接收全部的包並存放到緩衝區中。

(1)交換機的結構

我們平時所說的交換機,其實專業說法叫以太網交換機。也有支持其餘(局域網)協議的交換機。

(2)爲何要用交換機?

首先咱們看看集線器爲何被淘汰,由於集線器是廣播的形式,擁有以前咱們提到的以太網 CSMA/CD 機制的所有缺點,主要有:

  • 信號碰撞
  • 共享帶寬

這些都會形成:

  • 容易故障
  • 效率低下

而交換機是怎麼解決問題的呢?

交換機內部有一張 MAC 地址與網線端口的對應表,叫 MAC 地址表。而後根據地址表,用交換電路(內部交換矩陣)迅速將數據包傳送到目的端口,即轉發

若目的MAC在地址表裏找不到,交換機才廣播到全部的端口,接收端口迴應後交換機會「學習」新的地址,並把它添加入內部地址表中。(還有一種狀況會廣播,是接收方 MAC 地址是一個廣播地址。)

當交換機發現一個包要發回到原端口時,就會直接丟棄這個包。

優勢:

  • 不用廣播,即不會碰撞
  • 獨享帶寬(同時執行多個轉發操做)
(3)地址表的維護
  • 每次收到包,將發送方 MAC 地址以及其輸入端口的號碼寫入 MAC 地址表中。
  • 每隔一段時間(例如30s),就刪除地址表中某些記錄的操做,這是爲了防止設備移動時產生問題。

總之,交換機會自行更新或刪除地址表中的記錄,不須要手動維護。

當地址表的內容出現異常時,只要重啓一下交換機就能夠重置地址表,也不須要手動進行維護。

具有管理功能的高端交換機是提供手動維護地址表的功能的, 但通常的低端機型中沒有這個功能,想手動維護也不行。

(4)拓展:工做模式 —— 全雙工 與 半雙工

其實交換機比集線器還好在一個地方,即交換機支持全雙工,集線器只支持半雙工

問:什麼是全雙工 與 半雙工?

答:發送和接收同時並行的方式叫做「全雙工」 ,相對地,某一時刻只能進行發送或接收其中一種操做的叫做「半雙工」。


問:怎麼判斷兩個設備之間該用全雙工仍是半雙工?

這裏須要用到自動協商

首先,在以太網中,在沒有數據信號時就填充鏈接脈衝,這使得網絡中一直都有必定的信號流過,從而可以檢測對方是否在正常工做,以及網線有沒有正常鏈接。體如今以太網設備的網線接口周圍有一個綠色的 LED 指示燈。

難怪叫以太網叫以太,這個脈衝信號跟宇宙中的以太太像了。

自動協商功能就利用了這樣的脈衝信號,即經過這種信號將本身可以支持的工做模式和傳輸速率相互告知對方,並從中選擇一個最優的組合(參考下表)。

(5)拓展:三層交換機

因交換機工做於 OSI 模型的第 2 層(數據鏈路層),故而稱爲二層交換機

顧名思義,三層交換機就是也能夠工做在第 3 層(網絡層),具備部分路由器功能的交換機。

三層交換機能夠同時工做在三層和二層。

感興趣能夠戳:爲何三層交換機沒法替代路由器?

六、路由器(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 頭部的內容,按照 事先設置好的規則決定是轉發這個包,仍是丟棄這個包。

咱們一般說的防火牆設備或軟件,大多數都是利用這一機制來防止非法入侵的。

七、關於不一樣模塊對包的頭部的越權操做的思考

(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 做爲一個總體來看待,這樣能夠帶來更大的靈活性。

八、經常使用命令

(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

用法:nv -vz -w 2 baidu.com 80

(3)traceroute

traceroute 是用來偵測主機到目的主機之間所經路由狀況的重要工具,也是最便利的工具。

用法:traceroute baidu.com

原理:traceroute 的原理是很是很是的有意思,它收到到目的主機的IP後,首先給目的主機發送一個TTL=1的UDP數據包,而通過的第一個路由器收到這個數據包之後,就自動把TTL減1,而TTL變爲0之後,路由器就把這個包給拋棄了,並同時產生一個主機不可達的ICMP數據報給主機。主機收到這個數據報之後再發一個TTL=2的UDP數據報給目的主機,而後刺激第二個路由器給主機發ICMP數據報。如此往復直到到達目的主機。這樣,traceroute就拿到了途徑全部的路由器IP。

10、接入網


接入網用於鏈接網絡運營商(ISP)的線路,鏈接用戶與互聯網。

接入網這個詞表示的是通訊線路的用法,而並不表示通訊線路的結構。例如公司裏使用的專線,當它用來鏈接互聯網時就叫做接入網,而用來鏈接總公司和分公司時就不叫接入網。 此外,接入網這個詞也不只限於互聯網,當使用運營商提供的通訊服務時,通常都會將用戶與運營商之間的線路叫做接入網。

一、接入網種類

通常家用的接入網方式包括 ADSL、FTTH 、CATV、電話線、ISDN 等,公司則還可能使用專線。接入網的線路有不少種類,咱們沒法探索全部這些線路,下面值介紹兩種最經常使用的。

專線是固定鏈接線路,不須要進行身份認證,其實,這就是最古老的互聯網接入方式。

(1)ADSL 接入網

ADSL:Asymmetric Digital Subscriber Line,不對稱數字用戶線。它是一種利用架設在電線杆上的金屬電話線來進行高速通訊的技術,它的上行方向(用戶到互聯網)和下行方向(互聯網到用戶)的通訊速率是不對稱的。

用戶端所需設備:

  • 安裝一個將電話信號和 ADSL 信號分開的設備,這個設備叫分離器
  • ADSL ModemModem調制解調器,實際上是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 等光纖終端設備的統稱。

 

二、接入網中使用 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 包的頭部組成:

11、網絡運營商


互聯網的實體並非由一個組織運營管理的單一網絡,而是由多個運營商網絡相互鏈接組成的。

一、網絡運營商的設備

(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,邊界網關協議。且路由交換可分爲兩類:

  • 一類是將互聯網中的路由所有告知對方,稱爲轉接
  • 另外一種類型是兩個運營商之間僅將與各自網絡相關的路由信息告知對方。這樣,只有雙方之間的網絡能夠互相收發網絡包,這種方式稱爲非轉接,也叫對等

二、線路的鏈接

  • 室內:公司的機房通常使用雙絞線來鏈接設備
  • 室外:對於距離較遠的 NOC、POP 和 IX 來講,更多的使用光纖

拓展:租借光纖

只有有限的幾家大型運營商才擁有本身的光纖。那麼,其餘運營商怎麼辦呢?其實也不難,只要從其餘公司租借光纖就能夠了,擁有光纖的公司通常都會提供光纖租用服務,這個光纖租用不必定租用的就是光纖,可能也是將本身的光纖的一部分通訊能力租借給客戶。

這種服務就叫做通訊線路服務

三、機房建設

爲了保證在遇到停 電、火災等事故,以及地震等天然災害時,路由器等網絡設備還能繼續工做,IX 所在的大樓都裝有自主發電設備,並具備必定的抗震能力。其實這樣的要求也不只限於 IX,運營商的 NOC 也是同樣。

相關文章
相關標籤/搜索