計算機網路——深入理解TCP/IP

it_was發表於2020-10-02

1.1 TCP首部:squirrel:

計算機網路——深入理解TCP/IP

  • src port:源埠占16bit,範圍為0-65535。

  • dst port:目的埠占16bit,指明接收者所用的埠號

  • Sequence number:序列號佔32bit,用來標識從 TCP 源端向 TCP 目的端傳送的資料位元組流,它表示在這個報文段中的第一個資料位元組的順序號。如果將位元組流看作在兩個應用程式間的單向流動,則 TCP 用順序號對每個位元組進行計數。序號是 32bit 的無符號數,序號到達 (2^32) - 1 後又從 0 開始。當建立一個新的連線時, SYN 標誌變 1 ,順序號欄位包含由這個主機選擇的該連線的初始順序號 ISN ( Initial Sequence Number )

  • Acknowledgement number:確認號佔32bit,即傳送確認的一端所期望收到的下一個順序號。因此,確認序號應當是上次已成功收到資料位元組順序號加 1 。只有 ACK 標誌為 1 時確認序號欄位才有效

    面試題:確認號為什麼是上次成功收到資料位元組順序號加1呢?:fire: :fire::fire:
    其實確認號本身定義也能說明問題,即傳送確認的一端所期望收到的下一個序列號,說明本次接收的資料位元組沒問題,並且指明下一個期望收到的序列號!還有就是用在超時重傳機制中,比如傳送方傳送了5個資料包:1,2,3,4,5,但是2丟了,此時接收方並不會對3確認,而是立馬進行對1資料包ack 的重傳,即期望收到資料包2!

  • Offset:報頭長度佔4位,給出報頭中 32bit 字的數目。需要這個值是因為任選欄位的長度是可變的。即TCP 最多有 60(15 * 4) 位元組的首部

  • Resrvd:保留區域,6位,保留給將來使用,目前必須置為 0

  • Control Flags(6位)控制位包括:

    URG:為 1 表示緊急指標有效,為 0 則忽略緊急指標值
    ACK:為 1 表示確認號有效,為 0 表示報文中不包含確認資訊,忽略確認號欄位
    PSH:為 1 表示是帶有 PUSH 標誌的資料,指示接收方應該儘快將這個報文段交給應用層而不用等待緩衝區裝滿
    RST:用於復位由於主機崩潰或其他原因而出現錯誤的連線。它還可以用於拒絕非法的報文段和拒絕連線請求。一般情況下,如果收到一個 RST 為 1 的報文,那麼一定發生了某些問題
    SYN:同步序號,為 1 表示連線請求,用於建立連線和使順序號同步( synchronize )
    FIN:用於釋放連線,為 1 表示傳送方已經沒有資料傳送了,即關閉本方資料流

  • Window Size:視窗大小佔16bit,表示從確認號開始,本報文的接收方可以接收的位元組數,即接收方接收視窗大小。視窗大小是一個 16bit 欄位,因而視窗大小最大為 65535(2^16 - 1)

  • Checksum:校驗和佔16bit,對整個的 TCP 報文段(包括 TCP 頭部和 TCP 資料),以 16 位字進行計算所得。這是一個強制性的欄位,要求由傳送端計算和儲存,並由接收端進行驗證可靠性:boom::boom::boom:

    計算機網路——深入理解TCP/IPTCP校驗和覆蓋TCP首部和TCP資料,而IP首部中的校驗和只覆蓋IP的首部,不覆蓋IP資料包中的任何資料。
    TCP的校驗和是必需的,而UDP的校驗和是可選的。
    TCP和UDP計算校驗和時,都要加上一個12位元組的偽首部。
    偽首部共有12位元組,包含如下資訊:源IP地址、目的IP地址、保留位元組(置0)、傳輸層協議號(TCP是6)、TCP報文長度(報頭+資料)。
    偽首部是為了增加TCP校驗和的檢錯能力:如檢查TCP報文是否收錯了(目的IP地址)、傳輸層協議是否選對了(傳輸層協議號)等。

  • Urgent Pointer:緊急指標佔16bit,是一個正的偏移量,和順序號欄位中的值相加表示緊急資料最後一個位元組的序號。 TCP 的緊急方式是傳送端向另一端傳送緊急資料的一種方式。 只有當URG 標誌置 1 時緊急指標才有效

  • Option and Pad:選項和填充,最多佔40位元組。
    計算機網路——深入理解TCP/IP
    選項的第一個欄位kind說明選項的型別。有的TCP選項沒有後面兩個欄位,僅包含1位元組的kind欄位。第二個欄位length(如果有的的話)指定該選項的總長度,該長度包括kind欄位和length欄位佔據的2位元組。第三個欄位info(如果有的話)是選項的具體資訊。常見的TCP選項有7中,如下圖

計算機網路——深入理解TCP/IP

 kind 為 2:最大報文段長度MSS(Maximum Segment Size)**
指明自己期望對方傳送TCP報文段時資料欄位的長度。資料欄位的長度加上TCP首部的長度才等於整個TCP報文段的長度。MSS不宜設的太大也不宜設的太小。若選擇太小,極端情況下,TCP報文段只含有1位元組資料,在IP層傳輸的資料包的開銷至少有40位元組(包括TCP報文段的首部和IP資料包的首部)。若TCP報文段非常長,那麼在IP層傳輸時就有可能要分解成多個短資料片。在終點要把收到的各個短資料片裝配成原來的TCP報文段。當傳輸出錯時還要進行重傳,這些也都會使開銷增大。因此MSS應儘可能大,只要儘量在IP層傳輸時不需要再分片就行。對乙太網而言,MSS值是14601500-40)位元組。在連線建立過程中,雙方都把自己能夠支援的MSS寫入這一欄位。MSS只出現在SYN報文中。即:MSS出現在SYN=1的報文段中

計算機網路——深入理解TCP/IP

1.2 TCP 流協議

傳送端執行的寫操作次數和接收端執行的讀操作次數之間沒有任何數量關係,這就是位元組流的概念,應用程式對資料的傳送和接收是沒有邊界限制的。UDP則相反,傳送端應用程式每執行一次寫操作,UDP模組就將其封裝成一個UDP資料包併傳送。接收端必須及時針對每一個UDP資料包執行讀操作(透過recvfrom系統呼叫),否則就會丟包(這經常發生在較慢的伺服器上)。
推薦閱讀 TCP位元組流與UDP資料包

1.3 TCP 可靠傳輸的機制:squirrel:

1.序列號

2.校驗和

3.流量控制 和 擁塞控制 :boom: :boom: :boom:

:one:流量控制

在網路傳輸中,傳送方傳送資料的速度很快,接收方來不及讀取其緩衝區就很快overflow了。Flow control的目的就是在於避免這一情況的出現,是一種同步傳送方傳送速度和接收方讀取速度的方式,即傳送方傳送資料應避免使得接收方的緩衝區溢位(overflow),而造成接收方對資料的丟棄。簡單來說,flow control提供一個速度匹配(speed-matching)機制,即令傳送方傳送資料的速度和接收方讀取資料的速度匹配。

  1. sender維護一個變數,這個變數叫做receive window,即rwnd,記錄receive buffer的剩餘空間,注意這個值是接收方報文段中的Window size欄位,另外在TCP的首部中的40位元組選項中還包含了一個視窗擴大因子M,實際的視窗大小是視窗欄位的值左移M位。
  2. sender還會維護另外兩個變數,分別叫做LastByteSentLastByteAcked
  3. receiver維護兩個變數,叫做LastByteReadLastByteRcvd
    計算機網路——深入理解TCP/IP

本質上講,flow control的實現就是,receiver把自己的buffer還剩下多少空間以值rwnd(tcp首部中Window size欄位)的形式發回給sender,然後sender透過比較三個值:rwnd, LastByteSent和LastByteAcked之間的關係來控制自己傳送資料的速度。即要滿足以下關係:


下圖只是個極端情況,即接收方傳送報文段的window size欄位為0,傳送方需要定期的傳送一個試探視窗,目的是為了取探測接收端的視窗大小:
計算機網路——深入理解TCP/IP

:two:擁塞控制

官方定義:控制sender向connection傳輸資料的速率,使這個速率為網路擁堵狀況的函式。 即擁塞控制更是一種網路全域性的控制,不僅要考慮接收方的緩衝區大小,還要考慮整個網路的擁塞狀況!sender端要維護一個擁塞視窗,即cwnd

擁塞控制演算法如下 :eyes::eyes::eyes:
計算機網路——深入理解TCP/IP

計算機網路——深入理解TCP/IP

總結一下:

  • 流量控制和擁塞控制兩者是相輔相成的。即sender的傳送速率要滿足:
  • 流量控制是一種端到端的控制,而擁塞控制更是對整個網路情況的一種全域性的控制!

4.ARQ協議

5.超時重傳

2.1 IP協議主要功能:squirrel:

l. 定址與路由:boom:

  • 用IP地址來標識Internet的主機:在每個IP資料包中,都會攜帶源IP地址和目標IP地址來標識該IP資料包的源和目的主機。IP資料包在傳輸過程中,每個中間節點(IP 閘道器)還需要為其選擇從源主機到目的主機的合適的轉發路徑(即路由)。IP協議可以根據路由選擇協議提供的路由資訊對IP資料包進行轉發,直至抵達目的主機。
  • IP地址和MAC地址的匹配,ARP協議。資料鏈路層使用MAC地址來傳送資料幀,因此在實際傳送IP報文時,還需要進行IP地址和MAC地址的匹配,由TCP/IP協議簇中的ARP(地址解析協議)完成。

2.分片與重組

  • IP資料包透過不同型別的通訊網路傳送,IP資料包的大小會受到這些網路所規定的最大傳輸單元(MTU)的限制。

  • 將IP資料包拆分成一個個能夠適合下層技術傳輸的小資料包,被分段後的IP資料包可以獨立地在網路中進行轉發,在到達目的主機後被重組,恢復成原來的IP資料包。

2.2 IP首部:squirrel:

計算機網路——深入理解TCP/IP

  • Version: 版本欄位佔4 bit(0100表示使用的 IPv4協議)對等層之間要使用同一種IP協議

  • Header Length: 頭部長度欄位佔4 bit ,可表示最大數值1111,即最大為60位元組,也就是說明IP資料包頭部長度為20-60位元組,而且有固定的20位元組!

  • Type of Service:服務型別欄位佔8 bit ,定義IP封包在傳送過程中要求的服務型別,TOS包括共8位,包括3 bit的優先權欄位(取值可以從000-111所有值),4 bit的TOS子欄位和1 bit未用位但必須置0。具體如下

分類 作用
開頭3位
111–Network Control(網路控制);
110–Internetwork Control(網間控制);
101–Critic(關鍵);
100–Flash Override(疾速);
011–Flash(閃速);
010–Immediate(快速);
001–Priority(優先);
000–Routine(普通);
優先順序6和7一般保留給網路控制資料使用,如路由。
優先順序5推薦給語音資料使用。
優先順序4由視訊會議和影片流使用。
優先順序3給語音控制資料使用。

優先順序1和2給資料業務使用。
優先順序0為預設標記值。
中間4位 1000
0100
0010
0001
0000

最小時延
最大吞吐量
最高可靠性
最小代價
一般服務
4 bit中只能置其中1 bit
最後1位 1 bit未用位但必須置0
  • Total Length :IP資料包總長度欄位佔 16 bit,即2^16 - 1 = 65535 位元組,值為首部和資料之和的長度,資料包的最大長度為65535位元組(MTU最大傳送單元);總長度欄位是IP首部中必要的內容,因為一些資料鏈路(如乙太網)需要填充一些資料以達到最小長度。儘管乙太網的最小幀長為46個位元組(將在本章後面介紹),但是IP資料可能會更短。如果沒有總長度欄位,那麼IP層就不知道46位元組中有多少是IP資料包的內容。

  • identifier:標識欄位佔16 bit。標識欄位唯一地標識主機傳送的每一份資料包。通常每傳送一份訊息它的值就會加1。同一個資料包的所有分片都具有相同的標識值。

  • flag: 標誌欄位佔3bit。位1保留,位2表禁止分片(DF),若設定了此位,IP模組將不對資料包進行分片,在此情況下若IP資料包超過MTU,IP模組將丟棄資料包並返回一個ICMP差錯報文;位3標識分片(MF),表示後面還有若干個資料包,除了資料包的最後一個分片,其他分片都要把它設定為1。

  • offset:片位移欄位佔13bit。分片相對原始IP資料包資料部分的偏移。實際的偏移值為該值左移3位後得到的,所以除了最後一個IP資料包分片外,每個IP分片的資料部分的長度都必須是8的整數倍。

identifier,flag和offset主要用於IP Package分片的


  • TTL:生存時間欄位佔8bit。資料包到達目的地之前允許經過的路由器跳數。TTL值被髮送端設定,常設定為64。資料包在轉發過程中每經過一個路由該值就被路由器減1.當TTL值為0時,路由器就將該資料包丟棄,並向源端傳送一個ICMP差錯報文。TTL可以防止資料包陷入路由迴圈。

    位元組面試題:一個IP資料包在網路節點中傳輸可能陷入死迴圈嘛?:fire: :fire::fire:
    不可能呀,因為由上面這個TTL欄位呀,就算極端情況下陷入死迴圈,也必因為IP資料包的TTL減到0而最終失效,所以不可能陷入死迴圈


  • protocol:協議欄位佔8bit。區分IP協議上的上層協議。在Linux系統的/etc/protocols檔案中定義了所有上層協議對應的協議欄位,ICMP為1,TCP為6,UDP為17。

  • checksum首部校驗和欄位佔16bit。由傳送端填充接收端對其使用CRC演算法校驗,檢查IP資料包頭部在傳輸過程中是否損壞。
    計算方式如下:在傳送端的時候,將校驗和全部設定為0,然後把資料包首段資料全部進行反碼相加,得到的值為校驗和,放入首部的校驗和欄位;然後在接收端的時候,將資料包首段資料和校驗和一起全部反碼相加,最後若是得到零,則保留,若不是零,則說明資料包在傳輸過程中發生了改變,則丟棄該資料包.

    IP/ICMP/IGMP/TCP/UDP等協議的校驗和演算法都是相同的,此處透過IP資料包校驗和來說明
    計算機網路——深入理解TCP/IP

2.3 IP地址詳解

  • IP地址:P地址就是給網際網路上的每一臺主機(或路由器)的每一個介面分配一個在全世界範圍內是唯一的 32 位的識別符號。注意,每個IP地址都是獨一無二的,就像人的身份證號碼一樣。IP資料包在網路中轉發過程

  • IP地址分類:

    分類 網路數量 範圍 特殊說明
    A類地址 126(2^7-2) 1.0.0.1-127.255.255.254 1.0.0.0127.255.255.255廣播地址
    B類地址 16384(2^14) 128.0.0.0-191.255.255.254
    C類地址 2097152(2^21) 192.0.0.0-223.255.255.254

D類地址是組播地址,E類地址是將來和實驗使用

如果告訴你一個帶網路字首的IP地址,那麼你應該可以根據它推算出該地址的子網掩碼,預設閘道器地址,預設廣播地址,網路地址,受限廣播地址,本機網路地址,以及如何平均劃分子網空間。舉個例子,已知分配給創新實驗室的地址塊中的一個地址為193.6.7.0/24,請回答下列問題:
(1)該網路的網路字首是多少?
答案:24
解析:193.6.7.0/24 加粗部分就是網路字首
(2)該網路的子網掩碼是多少?
答案:255.255.255.0
解析:子網掩碼是根據網路字首推算的,255.255.255.0轉換成二進位制表示為11111111.11111111.11111111.00000000,網路字首代表的是該地址的網路位,前面說到一個IP地址是由32位二進位制數表示的,網路字首為24就表示從左往右數前24位為該網路的網路位,剩下的後8位為該網路的主機位。而子網掩碼就是網路位全為1,主機位全為0,比如說如果本題中給出的網路字首變成26,意思就是該網路的子網掩碼為11111111.11111111.11111111.11000000,換算成十進位制數就是255.255.255.192
(3)該網路的預設閘道器地址為多少?
答案:193.6.7.254/24
解析 :預設閘道器地址是主機位除最後一位全置1後得到的,根據網路字首24可知前24位為網路位,後8位為主機位,因此該網路的預設閘道器地址就是IP地址193.6.7.11111110(加粗的部分為主機位),換算成十進位制數即193.6.7.254/24(注意,但凡是跟IP地址格式一樣的都要加網路字首,跟子網掩碼格式一樣的就不用加),假如本題的網路字首變成26,那麼主機位就變成32-26=6位了,即預設閘道器地址為193.6.7.00 111110 =》193.6.7.62/26
(4)該網路的預設廣播地址是多少?
答案:193.6.7.255/24
解析:預設廣播地址和預設閘道器地址可以一起記,因為預設廣播地址就是主機位全為1,假如本題的網路字首變成26,預設廣播地址為193.6.7.00 111111 => 193.6.7.63/26
(5)該網路的網路地址是多少?
答案:193.6.7.0/24
解析:網路地址是IP地址與子網掩碼轉換成二進位制數再相與運算得來的結果

2.4. IP路由詳解

1. 什麼是路由?

百度百科中路由是指路由器從一個介面上收到資料包,根據資料包的目的地址進行定向並轉發到另一個介面的過程。

計算機網路——深入理解TCP/IP

從PC1去往PC2,中間經過路由器,路由器RTA根據目的IP指導資料包轉發的過程就稱為路由。路由器負責為資料包選擇一條最優路徑,並進行轉發。

2.什麼是路由器?

路由器實質上是一種將網路進行互聯的專用計算機,路由器是網路層的裝置,(交換機是資料鏈路層的裝置)用於指導IP報文轉發。路由器也可以稱之為閘道器裝置。路由器的每個介面對應不同的網段,可以隔離廣播域。當資料包需要在不同網段間轉發時需要透過路由器做轉發,路由器收到資料包後,會根據資料包中的目的IP地址選擇一條最優的路徑,並將資料包轉發到下一個路由器,路徑上最後的路由器負責將資料包送交目的主機。

3. 什麼是路由表?

計算機網路——深入理解TCP/IP
每個路由器中都儲存著一張路由表,表中每條路由項都指明瞭資料包要到達某網路或某主機應透過路由器的哪個物理介面傳送,以及可到達該路徑的哪個下一個路由器,或者不再經過別的路由器而直接可以到達目的地。

4. 路由器如何依據路由錶轉發資料包呢?——最長匹配原則

推薦閱讀 :www.360doc.com/content/17/1216/02/1...
路由器在轉發資料時,需要選擇路由表中的最優路由

當資料包文到達路由器時:

  • 路由器首先提取出報文的目的IP地址,然後查找路由表,將報文的目的IP地址與路由表中某表項的掩碼欄位做“與”操作,“與”操作後的結果跟路由表該表項的目的IP地址比較,相同則匹配上,否則就沒有匹配上。

  • 當與所有的路由表項都進行匹配後,路由器會選擇一個掩碼最長的匹配項

計算機網路——深入理解TCP/IP

如圖所示,路由表中有兩個表項到達目的網段10.1.1.0,下一跳地址都是20.1.1.2。如果要將報文轉發至網段10.1.1.1,則10.1.1.0/30符合最長匹配原則

5. 路由表生成原理

推薦閱讀:blog.csdn.net/sinat_36118270/artic...
四種方式:直連路由,靜態路由,動態路由,預設路由

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章