理解TCP/IP底層的結構和傳輸

0.前言

計算機網絡是大學計算機系的核心基礎課,可能大部分人上完課也就忘得差很少了,工做以後,若不是和運維相關,就丟得更遠了。
做爲一名程序員,對於TCP/IP協議的應用層或運輸層的協議仍是比較熟悉的,下面兩層的協議可能就不太關注了。而鏈路層和網絡層,正是構成目前全球互聯網的基石。
運輸層及應用層協議,是高度抽象的,幾乎把全部網絡底層的傳輸機制屏蔽了。做爲一個畢業了好幾年的程序員,我很好奇網絡底層的結構和傳輸,因此結合原來的課程以及工做中的理解,整理了這篇文章。
計算機網絡是一個很複雜的東西,一篇文章不可能把全部問題涵蓋。本文主要從工做的網絡環境出發,一層層介紹整個互聯網是怎麼運做起來的。程序員

1.協議的分層

TCP/IP協議棧分爲四層,每層及其做用以下:安全

  • 鏈路層:在局域網中,如何解決兩個節點之間的通訊問題。
  • 網絡層:在任意網絡連成的網絡中,如何解決兩個節點之間通訊的問題。(IP、ICMP、ARP)
  • 運輸層:如何按可靠性要求來通訊。(TCP、UDP)
  • 應用層:適合具體應用場景的通訊。(HTTP、SMTP、FTP)

協議的分層,是網絡設計先驅們最大的成就。他讓每層專一一件事,整個協議棧也很是靈活。這樣的劃分造成了生態和標準,讓硬件廠商、軟件公司、科研機構等都能參與其中,作本身擅長的那部分,構建整個全球互聯網。服務器

2.全局概覽

按照協議分層去介紹會很枯燥也很難理解。我的以爲從一個具體場景出發,把先後左右融匯貫通,串連起來說可能更易於理解。本文的全部內容都在下面這張圖。
首先介紹在一個辦公室的局域網如何通訊;其次介紹辦公室,家,鏈接同一個ISP(互聯網服務提供商,好比中國電信、中國鐵通)構成的AS(自治系統)內如何通訊;而後介紹由ISP連成的主幹網絡內部如何通訊;最後介紹一個公司,不一樣辦公地點,不一樣機房之間如何構造專用網通訊。網絡

clipboard.png

3.局域網內部如何通訊

主機經過集線器/交換機鏈接到一塊兒,通常就能夠構成一個局域網,好比公司、家庭就是典型的局域網。局域網的通訊相對比較簡單,鏈路層就主要幹這個事情。運維

3.1標識系統——mac地址

任何通訊系統,都會涉及到標識和識別問題。mac地址是鏈路層通訊的標識。mac地址是固化在設備上的,好比網卡、路由器,由全球專門的組織統一分配,不會衝突。mac地址有48位,徹底夠用。分佈式

3.2通訊載體mac幀

兩個節點通訊用什麼載體很重要,就像送快遞的車同樣。鏈路層的通訊載體是mac幀,結構以下:學習

clipboard.png

核心理解4個字段。目標地址和源地址,就是通訊雙方的mac地址,能夠類比快遞的收貨和發貨地址。數據,就是mac幀傳輸的內容,載荷。FCS是個校驗和,用來檢查數據有沒有損壞,固然鏈路層不作可靠性保證,損壞就直接丟棄了。雲計算

3.3集線器鏈接的局域網

集線器鏈接的局域網已經基本淘汰了,咱們也能夠拿出來看一下局域網原始的樣子。以下圖:加密

clipboard.png

主機經過集線器鏈接到一塊兒,構成一個星形網絡。集線器結構簡單,工做在物理層,它的做用是將一個端口的數據廣播到其它端口。
兩點通訊怎麼實現呢?好比小A要給小C發一個mac幀。是這樣子的,集線器收到小A的mac幀時,會同時發送給小B和小C,小B一看不是給個人,遂丟棄,而小C發現是給本身的,即收下。集線器經過這樣的方式,實現了點對點的通訊。這種方式最大的缺陷在於,網絡中的節點無法同時通訊,不然就碰撞亂套了。這種鏈接方式有一個碰撞檢測技術,即檢測到其它端口再發數據,則暫停一會再發送。也就是整個網絡是串行的,信道的通訊效率是很低的。spa

3.4交換機鏈接的局域網

交換機是目前主流的局域網鏈接方式。以下圖:

clipboard.png

交換機工做在鏈路層,相對於集線器,交換機則具有「學習」和更加精確轉發的能力。
交換機的學習方法是這樣的。仍是假設小A給小C發送數據,交換機在第一次收到這個數據時,也是懵逼的,不知道轉到哪一個端口,因此它須要像集線器同樣,作一次廣播。可是有心機的交換機同時作了另外一件事情,把小A的mac地址和對應的轉發端口給記下來了,這樣下次再收到給小A的請求,就能夠準確轉發了。這樣的請求來回幾回後,交換機就學到了全部的請求如何轉發。
交換機鏈接的網絡是能夠並行的,效率很高。交換機還有個好處是還能夠和其它交換機相連,把局域網擴展成更大的一個局域網,甚至能夠突破小範圍的地理限制。

3.5局域網嗅探

局域網嗅探就是經過技術手段,獲取其它主機的網絡流量。大體有下面幾種:
集線器嗅探,這種嗅探方式很是簡單,由於集線器是靠廣播工做,嗅探主機無論包是否是給本身的,統統收下就行了。
管理員嗅探,對於交換機鏈接的網絡,通常能夠設置將交換機的全部流量,統統抄送給某個接口,從而達到網絡管理的目的。
交換機嗅探,能夠利用洪泛(產生大量的垃圾幀)技術把交換機的轉發表搞亂,根據交換機的特性,查詢不到對應的轉發規則,就只能傻傻的廣播了,從而截獲到整個局域網的流量。
因此,連陌生wifi時要特別當心,當心合租的技術男。頂層使用https也很重要,即便截獲了,也不知道傳輸內容,黑客必須結合其它攻擊方式才能作壞事。

4.局域網之間的通訊

局域網之間的通訊,包括下一節要講的主幹網之間的通訊,是網絡層要主要解決的問題。仍是按照以前的套路,先把標識和載體搞清楚。

4.1網絡層的標識系統——IP地址

和mac地址不同,IP地址是邏輯地址與硬件無關。IP地址也是國際組織統一分配,全球惟一。目前用得最多的ipv4地址只有32位,不是很夠用(後面會講如何解決不夠用的問題)。IP通常用點分十進制表示,像這樣:113.118.186.179。IP地址在分配的時候,通常分爲兩部分,網絡號和主機號。網絡號通常爲前若干位,分配給一個機構,機構本身再分配到主機。

4.2網絡層的傳輸載體——IP數據包

clipboard.png

IP數據包核心也是要理解4個字段。目標地址和源地址,即通訊雙方的IP地址。生存時間表示這個數據包還能走多遠,每過一條路由器會減一,這個設計是防止網絡上產生大量的垃圾數據包消耗資源。數據部分呢就是IP數據報要傳輸的內容了。

4.3自治系統(AS)

下面就開始介紹本節的重點,這張圖的原理:

clipboard.png

多個局域網,經過路由器鏈接構成的更大網絡,通常叫作自治系統(AS),自治系統使用內部網關協議,保證系統可以獨立運行。真實的場景多是對應某個本地ISP,將附近的家庭或辦公室構成的局域網鏈接而成的網絡。
抽象一下,AS大體就是下面這張圖的結構。

clipboard.png

這裏多了一種硬件設備——路由器。路由器的做用是把IP數據報轉發給下一跳地址,從而達到跨網絡的通訊的目的。
AS內部的通訊,核心是路由的選擇協議,這裏以RIP協議爲例來介紹基本原理。
RIP也是一種自學習的協議,即在沒有人爲干擾的狀況下,可以學習如何轉發數據包。
協議經過跳數來表示路由的代價,即隔了多少個路由器,不考慮帶寬和網絡狀態。
相鄰的路由器,定時交換路由表,收到路由表後,將目標網絡的下一跳地址改爲路由器的地址,同時將距離加一。
路由器一開始只知道相鄰網絡的路由(管理員配置),進過一段時間的傳播、交換後,最終收斂。
按照上圖的結構,一開始R1的路由表爲。

目標網絡 下一跳 距離
LAN1 端口1 1
LAN2 端口2 1
LAN3 端口3 1

R2的路由表爲

LAN2 端口1 1
LAN3 端口2 1
LAN4 端口3 1

R1收到R2的路由表後,因爲LAN2,LAN3的最短距離是1,因此距離爲2的會捨棄掉。

目標網絡 下一跳 距離
LAN1 端口1 1
LAN2 端口2 1
LAN3 端口3 1
LAN2 R2 2
LAN3 R2 2
LAN4 R2 2

R2也是一樣的道理,最終R2會多一條到LAN1的路由,下一跳是R1,距離是2。至此已經收斂,任意兩個網絡之間都可以通訊了。

5.主幹網之間的通訊

AS鏈接的網絡數是有限的,由於網絡上的每一個路由器,都要存全部目標網絡的下一跳地址,對於主幹網,開銷是很是大的。還有就是AS鏈接的網絡是一個分佈式的網狀結構,不利於政治、安全方面的控制。好比在國內的通訊,數據包不須要到國外兜個圈子再回來。

5.1樹形結構的主幹網

下面開始介紹這張圖的原理。

clipboard.png
不一樣層級的ISP,造成了全球互聯網頂層的樹狀結構。這個結構的通訊,使用的是外部網關協議BGP。
咱們把外部網關的結構簡化成下面這張圖:

clipboard.png

可見是由不一樣層級AS構成的一個樹狀結構。AS與其它AS的鏈接處,會有一個路由器,做爲BGP發言人,做用是構建路由信息,並轉發數據報。
路由表創建的過程能夠總結爲:自底向上傳播,從上到下擴散。
具體的過程是這樣的,好比:
AS4會告訴AS2,到N一、N2能夠通過AS4。AS5會告訴AS2,到N三、N4可通過AS5。
AS2收到消息後,記錄,並繼續向上傳播。
AS2告訴AS1到N一、N二、N三、N4能夠通過AS2。
AS1繼續把這個消息向下擴散,告訴AS3,到N一、N二、N三、N4,能夠通過AS1。
AS3繼續向下擴散,告訴AS6,到N一、N二、N三、N4能夠通過AS3,從而網絡N5就能發送數據報給N一、N二、N三、N4了。
其它的節點是同樣的道理。

6.虛擬專用網絡

對於一個結構或組織,他的訴求是專網專用。跨地域構建專用局域網成本是很是高的,但能夠經過虛擬化的技術構建一個虛擬專用網。
虛擬專用網的場景以下面這張圖,某公司有甲已兩地的辦公室,還有云計算服務商的機房,構成了一個虛擬的專用網絡

clipboard.png

6.1專用IP地址

因爲IP地址是也有限的,對應專用網,很難分配全球惟一IP。因爲是專網,IP地址衝突了問題也不大,只要內部不衝突。因此IP地址有一部分是保留出來給專網用的,全球互聯網的路由器不會轉發專用IP地址的包。專用IP地址以下:

clipboard.png

6.2 IP隧道技術

下面是一個典型的虛擬專用網絡:

clipboard.png

隧道技術的核心是,經過隧道服務器,一邊連局域網,一邊連公網。隧道服務器在公網上構建一條加密的傳輸通道,讓不一樣局域網構成一個隧道鏈接,從而達到專網的效果。
大體的過程是,隧道服務器會攔截全部的專網IP的數據報。將其加密,包裝成新的IP數據報或者運輸層協議的報文,經過公網傳遞給下一個隧道服務器。隧道服務器收到這樣的數據報後,會解密和拆解,送到對應局域網。從而實現了跨網絡的通訊。
至此,各類網絡,不一樣層級如何通訊,基本介紹完畢。

7.結語

計算機網絡內容不少,還有不少細節。本文主要是介紹了總體的流程和原理。有些基本的思想和方法,是很是巧妙的,值得在解決問題時借鑑。

相關文章
相關標籤/搜索