chapter02_傳輸層_TCP_UDP_SCTP

chapter_02 傳輸層:TCP、UDP和SCTP

這篇文章是我自己看的,整理自己的思路,僅放在網上便於保存&&分享。

相對於書而言,內容沒有什麼價值。書上的內容全面可靠。

PS:文章是建立在我的知識體系之上。因而,文中也不會有多餘解釋。


一、內容

1、概述

UDP是一個簡單的、 不可靠的數據報協議, 而TCP是一個複雜、 可靠的字節流協議。 SCTP與TCP類似之處在於它也是一個可靠的傳輸協議, 但它還提供消息邊界、 傳輸級別多宿(multihoming) 支持以及將頭端阻塞(head-of-line blocking) 減少到最小的一種方法。我們必須瞭解由這些傳輸層協議提供給應用進程的服務, 這樣才能弄清這些協議處理什麼, 應用進程中又需要處理什麼。

本章將闡述以下相關主題: TCP的三路握手、 TCP的連接終止序列和TCP的TIME_WAIT狀態, SCTP的四路握手和SCTP的連接終止, 加上由套接字層提供的TCP、 UDP和SCTP緩衝機制, 等等。

2、總圖

在這裏插入圖片描述

2.1 總圖解釋 ⭐️

TCP 傳輸控制協議(Transmission Control Protocol) 。 TCP是一個面向連接的協議, 爲用戶進程提供可靠的全雙工字節流。 TCP套接字是一種流套接字(stream socket) 。 TCP關心確認、 超時和重傳之類的細節。 大多數
因特網應用程序使用TCP。 注意, TCP既可以使用IPv4, 也可以使用IPv6。UDP 用戶數據報協議(User Datagram Protocol) 。

UDP是一個無連接協議。 UDP套接字是一種數據報套接字(datagram socket) 。 UDP數據報不能保證最終到達它們的目的地。 與TCP一樣, UDP既可以使用IPv4, 也可以使用IPv6。

SCTP 流控制傳輸協議(Stream Control Transmission Protocol) 。 SCTP是一個提供可靠全雙工關聯的面向連接的協議, 我們使用“關聯”一詞來指稱SCTP中的連接, 因爲SCTP是多宿的, 從而每個關聯的兩端均涉及一組IP地址和一個端口號。 SCTP提供消息服務, 也就是維護來自應用層的記錄邊界。 與TCP和UDP一樣, SCTP既可以使用IPv4, 也可以使用IPv6, 而且能夠在同一個關聯中同時使用它們。

ICMP 網際控制消息協議(Internet Control Message Protocol) 。 ICMP處理在路由器和主機之間流通的錯誤和控制消息。 這些消息通常由TCP/IP網絡支持軟件本身(而不是用戶進程) 產生和處理。不過圖中展示的ping和traceroute程序同樣使用ICMP。 有時我們稱這個協議爲ICMPv4, 以便與ICMPv6相區別

IGMP 網際組管理協議(Internet Group Management Protocol) 。 IGMP用於多播。

ARP 地址解析協議(Address Resolution Protocol) 。 ARP把一個IPv4地址映射成一個硬件地址(如以太網地址) 。 ARP通常用於諸如以太網、令牌環網和FDDI等廣播網絡, 在點到點網絡上並不需要。

RARP 反向地址解析協議(Reverse Address Resolution Protocol) 。RARP把一個硬件地址映射成一個IPv4地址。 它有時用於無盤節點的引導。

ICMPv6 網際控制消息協議版本6(Internet Control Message Protocol version 6) 。 ICMPv6綜合了ICMPv4、 IGMP和ARP的功能。

BPF BSD分組過濾器(BSD packet filter) 。 該接口提供對於數據鏈路層的訪問能力, 通常可以在源自Berkeley的內核中找到。

DLPI 數據鏈路提供者接口(datalink provider interface) 。 該接口也提供對於數據鏈路層的訪問能力, 通常隨SVR4內核提供。

我們使用術語“IPv4/IPv6主機”或“雙棧主機”表示同時支持IPv4和IPv6的主機。(至於主機如何支持兩種協議的。《計算機網絡》謝希仁 書中有挺詳細的介紹。)

2.2 一件“往事”

從書上覆制的似乎有點多。因爲這些概念還是挺重要的。

我這裏補充下,我以前因爲概念不清楚幹過的事。

使用proxychains,在終端進行代理。操作可以參考:利用proxychains在終端使用socks5代理

配置完之後,我檢測下是否成功。

#正確操作
proxychains wget www.google.com
#錯誤操作
proxychains ping www.google.com

原因解釋:

  • GNU Wget(常簡稱爲Wget)是一個在網絡上進行下載的簡單而強大的自由軟件,其本身也是GNU計劃的一部分。它的名字是“World Wide Web”和“Get”的結合,同時也隱含了軟件的主要功能。當前它支持通過HTTPHTTPS,以及FTP這三個最常見的TCP/IP協議協議下載。(來自wiki–Wget)

  • 上面所示:ping 使用的是ICMP協議

  • This program forces any tcp connection made by any given tcp client to follow through proxy (or proxy chain). It is a kind of proxifier. (來自man proxychains)。This version (v4) supports SOCKS4, SOCKS5 and HTTP CONNECT proxy servers.

  • SOCKS是一種網絡傳輸協議,主要用於客戶端與外網服務器之間通訊的中間傳遞。SOCKS是"SOCKetS"的縮寫[1]

    防火牆後的客戶端要訪問外部的服務器時,就跟SOCKS代理服務器連接。這個代理服務器控制客戶端訪問外網的資格,允許的話,就將客戶端的請求發往外部的服務器。

    這個協議最初由David Koblas開發,而後由NEC的Ying-Da Lee將其擴展到SOCKS4。最新協議是SOCKS5,與前一版本相比,增加支持UDP、驗證,以及IPv6。 (來自 wiki —SOCKS

  • 所以上面錯誤操作的原因是proxychains不支持ICMP協議。而關於proxychians的細節/原理,我不清楚。

3、UDP

應用進程往一個UDP套接字寫入一個消息, 該消息隨後被封裝(encapsulating) 到一個UDP數據報, 該UDP數據報進而又被封裝到一個IP數據報, 然後發送到目的地。 UDP不保證UDP數據報會到達其最終目的地, 不保證各個數據報的先後順序跨網絡後保持不變, 也不保證每個數據報只到達一次。

每個UDP數據報都有一個長度。 如果一個數據報正確地到達其目的地, 那麼該數據報的長度將隨數據一道傳遞給接收端應用進程。 我們已經提到過TCP是一個字節流(byte-stream) 協議, 沒有任何記錄邊界(見1.2節) , 這一點不同於UDP。

4、TCP ⭐️

其次, TCP還提供了可靠性(reliability) 。 當TCP向另一端發送數據時, 它要求對端返回一個確認。 如果沒有收到確認, TCP就自動重傳數據並等待更長時間。 在數次重傳失敗後, TCP才放棄。

TCP含有用於動態估算客戶和服務器之間的往返時間(round-trip time, RTT) 的算法, 以便它知道等待一個確認需要多少時間。

TCP提供流量控制(flow control) 。 TCP總是告知對端在任何時刻它一次能夠從對端接收多少字節的數據, 這稱爲通告窗口(advertised window) 。

4.1、TCP的連接的建立和終止(詳細內容見書上)

TCP連接建立:TCP的三路握手。
在這裏插入圖片描述

TCP連接終止:TCP連接關閉時的分組交換.

在這裏插入圖片描述

狀態轉換圖

在這裏插入圖片描述

5、SCTP

一個連接只涉及兩個IP地址之間的通信。 一個關聯指代兩個系統之間的一次通信。

SCTP能夠在所連接的端點之間提供多個流, 每個流各自可靠地按序遞送消息。 一個流上某個消息的丟失不會阻塞同一關聯其他流上消息的投遞。

SCTP還提供多宿特性, 使得單個SCTP端點能夠支持多個IP地址。 該特性可以增強應對網絡故障的健壯性。

附錄

1、套接字對

一個TCP連接的套接字對(socket pair) 是一個定義該連接的兩個端點的四元組: 本地IP地址、 本地TCP端口號、 外地IP地址、 外地TCP端口號。套接字對唯一標識一個網絡上的每個TCP連接。

標識每個端點的兩個值(IP地址和端口號) 通常稱爲一個套接字。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章