「多圖警告」重學 TCP/IP 協議

前端勸退師發表於2019-04-19

前言

最近剛看完電影「無敵破壞王2:大鬧網際網路」,覺得裡面有些動畫蠻有意思的,於是想起前不久看的《圖解HTTP》和TCP/IP相關的文章。嗯,是時候展示真正的技術了。

如果你還對各類協議歸屬、作用也都傻傻分不清,那麼你有必要詳盡瞭解下TCP/IP

1. TCP/IP協議族

「多圖警告」重學 TCP/IP 協議

網際網路協議套件(英語:Internet Protocol Suite,縮寫IPS)是一個網路通訊模型,以及一整個網路傳輸協議家族,為網際網路的基礎通訊架構。它常被通稱為TCP/IP協議族(英語:TCP/IP Protocol Suite,或TCP/IP Protocols),簡稱TCP/IP。因為該協定家族的兩個核心協定:TCP(傳輸控制協議)和IP(網際協議),為該家族中最早通過的標準。

敲重點:

  • TCP(傳輸控制協議)和IP(網際協議 是最先定義的兩個核心協議,所以才統稱為TCP/IP協議族

1.1 TCP/IP拆家分層

TCP/IP協議族中有一個很重要一點就是分層管理,依次為以下四層,應用層,傳輸層,網路層,資料鏈路層。

「多圖警告」重學 TCP/IP 協議
TCP/IP分層管理是有好處的,假如網際網路只有一個協議統籌,某一個地方改變設計時,就需要把所有部分都替換掉,而分層只需要把變動的層替換掉即可。

而且分層管理,設計也相對簡單,處於應用層的應用只需要考慮分派自己的任務而不需要考慮對方的傳輸線路是怎樣的,能否保證傳輸送達。

2. 應用層, Application Layer

應用層是大多數普通與網路相關的程式為了通過網路與其他程式通訊所使用的層。這個層的處理過程是應用特有的;資料從網路相關的程式以這種應用內部使用的格式進行傳送,然後被編碼成標準協議的格式。

應用層決定了向使用者提供的應用服務時的通訊活動:

  • HTTP(全球資訊網服務)
  • FTP(檔案傳輸)
  • SMTP(電子郵件)
  • SSH(安全遠端登陸)
  • DNS(名稱<-> IP地址尋找,域名系統)
  • 以及許多其他協議

一旦從應用程式來的資料被編碼成一個標準的應用層協議,它將被傳送到IP棧的下一層。

「多圖警告」重學 TCP/IP 協議

圖中用到HTTP和DNS

3. 傳輸層,Transport Layer

傳輸層位於應用層的下層,提供位於網路連線中的兩臺計算機之間的資料傳輸,傳輸層中有兩種性質不同的協議

敲重點:每一個應用層協議一般都會使用到兩個傳輸層協議之一

  • TCP:面向連線的Transmisson Control Protocol傳輸控制協議
  • UDP : 無連線的包傳輸User DataProtocol使用者資料包協議
UDP TCP
是否連線 無連線 面向連線
是否可靠 不可靠傳輸,不使用流量控制和擁塞控制 可靠傳輸,使用流量控制和擁塞控制
連線物件個數 支援一對一,一對多,多對一和多對多互動通訊 只能是一對一通訊
傳輸方式 面向報文 面向位元組流
首部開銷 首部開銷小,僅8位元組 首部最小20位元組,最大60位元組
場景 適用於實時應用(IP電話、視訊會議、直播等) 適用於要求可靠傳輸的應用,例如檔案傳輸

摘自:TCP和UDP比較

3.1 傳輸層的意義

網路層的功能使我們能夠將資料包從一臺機器傳送到網路上的另一臺機器,但這還不足以編寫網路應用程式,因為:

  • 機器可以執行多個應用程式,我們需要知道哪個應用程式應該接收資料包。
  • 網路層可以丟棄或重新排序資料包。另一方面,應用程式通常需要保證(即,無損耗)和按順序傳輸位元組。

3.2 何為“四元組”?

TCP通過定義埠號解決了第一個問題:

埠號本質上是識別符號,有助於TCP區分機器上執行的應用。

換句話說,計算機上的每個埠號都由該計算機上的應用擁有。

埠號是2位元組整數,埠0不可用。因此,我們可以在一臺機器上擁有多達65536個埠。

TCP通過埠號來定義“連線”。

TCP連線由源和目標IP地址(來自網路層)以及源和目標埠號標識。這也稱為四元組:

// 源IP地址、目的IP地址、源埠、目的埠
(src ip,dst ip,src port,dst port)
複製程式碼

3.3 SEQACK,序列號與確認號

TCP網路中,為了保障每個連線提供有保證和有序的位元組傳遞,使用了Sequence Number (,序列號)和 Acknowledgment Number (確認號),即SeqAck

TCP 每次傳送與接受的單位為: TCP頭部 + 資料, TCP資料段 (TCP Segment);

「多圖警告」重學 TCP/IP 協議

每個資料段的大小不盡相同,有可能數百~數萬。

SEQ,序列號,表示每次傳輸中位元組的偏移量 ACK,確認號,指出下一個期望接收的SEQ(接受完畢)

舉個例子:

  1. 序列號為#2000且長度為100的資料包,在此連線上包含第2000-2099個位元組。
  2. 當接收器接收到包括第2099位元組在內的所有位元組時,它傳送一個確認#2100
  3. 表示它已在第2100位元組之前接收到該位元組。

3.4 SYN,同步序列號

  • 為了避免與先前連線的資料段混淆,當次連線建立時,序列號 並非從 0 開始。
  • 兩端會使用 ISN產生器,產生各自的 初始序列號 (Initial Sequence Number, ISN), 通常兩者並不相等。
  • 連線建立時,透過 控制位元 (Control Bits) 中的 SYN,讓兩端的 TCP 必須進行 ISN的交換 (同步)。
    「多圖警告」重學 TCP/IP 協議

好吧,說人話。就是TCP三次握手

這就是 TCP連線的建立方式, 且 23,可以組合為單一訊息。

於是便有下圖:

「多圖警告」重學 TCP/IP 協議

且第三次握手中 (Client — — > Server), 其 SEQ為 第一段的值 + 1 (ISN + 1)。

4. 網路層, Network Layer

網路層用來處理在網路上流動的資料包(資料包:網路上傳輸的最小資料單位)。

網路層規定在眾多選項中通過怎樣的路徑(傳輸線路)到達對方的計算機,把資料包傳輸給對方。

「多圖警告」重學 TCP/IP 協議

流動中的資料包

該層中最突出的協議是Internet協議(IP),因此該層也稱為IP層。IP的核心是兩個主要功能:地址和路由

「多圖警告」重學 TCP/IP 協議
IP的原始版本是 IPV4,後來擴充套件了IPV6

  • IPv4中規定IP地址長度為32,即有2^32-1個節點(40億)。
  • 我們網路中已經有超過40億個節點,鑑於此,促成了IPV6發展。
  • IPv6IP地址的長度為128,即有2^128-1個節點(2125億)
  • 如果IPV6被廣泛應用以後,全世界的每一粒沙子都會有相對應的一個IP地址。

4.1 地址

今天,大多數機器都有IPv4IPv6地址。如果執行ifconfig,則可以看到計算機的IPv4IPv6地址。

 ~ ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
	options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
	inet 127.0.0.1 netmask 0xff000000
	inet6 ::1 prefixlen 128
	inet6 fe80::1809:1%lo0 prefixlen 64 scopeid 0x1
	nd6 options=201<PERFORMNUD,DAD>
	media: autoselect
	status: active
複製程式碼

4.2 路由

IP路由基於使用地址字首的規則構構建。 如果在計算機上執行 netstat -rn,則可以在計算機上看到路由表。

  • 例如,我的路由表說任何匹配10.31.10/24的IP資料包應該傳送到link#8
  • 如果仔細觀察,可以看到“預設”行。該行是一項特殊規則,表示任何與其他規則不匹配的資料包都應使用此規則進行路由定址。

它就像switch / case語句中的default

% netstat -rn
Routing tables
Internet:
Destination        Gateway            Flags        Refs      Use   Netif 
default            10.31.10.222       UGSc           54        0     en0
default            link#17            UCSI            0        0 bridge1      !
10.31.10/24        link#8             UCS             9        0     en8      !
Internet6:
Destination   Gateway       Flags         Netif Expire
fe80::%lo0/64 fe80::1%lo0   UcI           lo0
複製程式碼

網際網路上的所有節點都有這些路由表,這就是IP資料包路由到達目的地的方式。

「多圖警告」重學 TCP/IP 協議

如果您想了解如何在網路中將資料包路由到掘金juejin.im,請執行以下命令:

traceroute juejin.im
複製程式碼

就會得到下圖:

「多圖警告」重學 TCP/IP 協議

5.鏈路層,Link Layer

(又名資料鏈路層,網路介面層)

「多圖警告」重學 TCP/IP 協議

用來處理連線網路中的硬體部分,硬體上的範圍均在鏈路層中,包含

  • 作業系統
  • 硬體裝置驅動
  • NIC(Network interface Card 網路介面卡:網路卡 )
  • 光纖等物理可見部分

「多圖警告」重學 TCP/IP 協議

主機,線路,路由器

5.1 ifconfig: 檢視MAC地址

在任何網路中,每個節點都具有 “鄰居”。鏈路層協議提供通過鏈路直接連線的“鄰居”之間通訊所需的功能(例如,像CAT5電纜的物理鏈路,或WiFi中的無線電鏈路)。

最著名的鏈路層協議是乙太網。在乙太網中,每個介面都有一個唯一的48位(6位元組)地址,稱為媒體訪問控制(MAC)地址。

如果在計算機上執行ifconfig,您將看到網路介面的名稱及其MAC地址。

~  ifconfig
...
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
 ether 88:e9:fe:4c:83:5b
 inet6 fe80::1809:d41a:a9a:d664%en0 prefixlen 64 secured scopeid 0x8
 inet 192.168.1.8 netmask 0xffffff00 broadcast 192.168.1.255
 nd6 options=201<PERFORMNUD,DAD>
 media: autoselect
 status: active
複製程式碼

如你所見,MAC地址中的每個位元組都由十六進位制值表示,並以冒號分隔。

通過乙太網鏈路傳送的網路資料包具有源和目標MAC地址。為了發現它的鄰居,乙太網使用廣播查詢和通知。使用這些廣播機制,另一種稱為ARP的協議可以找到鄰居的MACIP地址之間的對映。如果在計算機上執行arp,則可以看到此對映。

~ arp -a -n 
? (10.31.xx.xx) at 98:28:xx:2a:cc:xx on en8 ifscope [ethernet]
? (10.31.xx.xx) at f4:8e:xx38:f5:b5:xx on en8 ifscope [ethernet]
? (10.31.xx.xx) at 54:ee:xx:e1:33:xx on en8 ifscope [ethernet]
....
複製程式碼

現在我們已經知道MAC和IP地址之間的對映關係。

6. TCP/IP 通訊傳輸流

「多圖警告」重學 TCP/IP 協議
TCP/IP 通過分層管理進行網路通訊,傳送端從應用層往下走,接收端則往應用層上層走。

然後便一層層包裹,解析。

「多圖警告」重學 TCP/IP 協議

  • 傳送端,每經過一層會打上該層所屬的首部資訊。
  • 接收端,每經過一層會把對應的首部資訊解析。

7. 擴充套件:執行在傳輸層中的 TCPUDP的協議

每一個應用層(TCP/IP參考模型的最高層)協議一般都會使用到兩個傳輸層協議之一:

執行在TCP協議上的協議:

  • HTTP(Hypertext Transfer Protocol,超文字傳輸協議),主要用於普通瀏覽。
  • HTTPS(HTTP over SSL,安全超文字傳輸協議),HTTP協議的安全版本。
  • FTP(File Transfer Protocol,檔案傳輸協議),用於檔案傳輸。
  • POP3(Post Office Protocol, version 3,郵局協議),收郵件用。
  • SMTP(Simple Mail Transfer Protocol,簡單郵件傳輸協議),用來傳送電子郵件。
  • TELNET(Teletype over the Network,網路電傳),通過一個終端(terminal)登陸到網路。
  • SSH(Secure Shell,用於替代安全性差的TELNET),用於加密安全登陸用。

執行在UDP協議上的協議:

  • BOOTP(Boot Protocol,啟動協議),應用於無盤裝置。
  • NTP(Network Time Protocol,網路時間協議),用於網路同步。
  • DHCP(Dynamic Host Configuration Protocol,動態主機配置協議),動態配置IP地址。

執行在TCPUDP協議上:

  • DNS(Domain Name Service,域名服務),用於完成地址查詢,郵件轉發等工作。

免責宣告

只是覺得好玩就簡單寫了一下,有說錯的地方多擔待。

「多圖警告」重學 TCP/IP 協議

意思就是寫得略粗糙,別噴我。。。

求一份深圳的內推

好了,又水完一篇,入正題:

「多圖警告」重學 TCP/IP 協議
目前本人在(又)準備跳槽,希望各位大佬和HR小姐姐可以內推一份靠譜的深圳前端崗位!996.ICU 就算了。

  • 微信:huab119
  • 郵箱:454274033@qq.com

作者掘金文章總集

公眾號

「多圖警告」重學 TCP/IP 協議
「多圖警告」重學 TCP/IP 協議

相關文章