天天看點

【面試】計算機網絡——傳輸層

參考自B站王道考研視訊

UDP

僅在IP資料報服務之上增加了複用分用和差錯檢測功能。

UDP特點
  1. UDP是無連接配接的,減少開銷和發送資料之前的時延。
  2. UDP使用最大努力傳遞,即不保證可靠傳遞。
  3. UDP是面向封包的,适合一次性傳輸少量資料的網絡應用,比如QQ和微信 (傳輸大檔案時除外)。
  4. UDP無擁塞控制,适合很多實時應用,比如線上直播,視訊會議。
  5. UDP首部開銷小,隻有8B,而TCP的首部有20B。
UDP首部格式
【面試】計算機網絡——傳輸層

UDP首部包含四個部分,其中源端口不是必須的,而目的端口是必須的,長度為首部加資料的總長度,校驗和用于檢測整個UDP資料報是否有錯。僞首部隻有在計算校驗和時才出現,不向下傳送也不向上遞交,它是僞IP首部。

UDP校驗

發送端:

  1. 填上僞首部
  2. 全0填充校驗和字段
  3. 全0填充資料部分,要保證長度為4B的整數倍,但是隻是計算時填充
  4. 僞首部+首部+資料部分采用二進制反碼求和,溢出部分進位到最低位。
  5. 把和求反碼填入校驗和字段(0變1,1變0,即相加後全為1)
  6. 去掉僞首部,發送

接收端:

  1. 填上僞首部
  2. 僞首部+首部+資料部分采用二進制反碼求和
  3. 結果全為1則無差錯,否則丢棄資料報/交給應用層并附上出差錯的警告。

TCP

TCP特點
  1. TCP是面向連接配接(虛連接配接)的傳輸層協定。
  2. 每一條TCP連接配接隻有兩個端點,隻能是點對點的。
  3. TCP提供可靠傳遞的服務,無差錯、不丢失、不重複、按序到達。可靠有序,不丢不重。
  4. TCP提供全雙工通信。發送緩存儲存的是準備發送的資料和已發送但尚未收到确認的資料,接收緩存儲存的是按序到達但尚未被接受應用程式讀取的資料和不按序到達的資料。
  5. TCP面向位元組流。TCP把應用程式交下來的資料看成僅僅是一連串的無結構的位元組流。(流:流入到程序或從程序流出的位元組序列)
TCP首部格式
【面試】計算機網絡——傳輸層

序号:在一個TCP連接配接中傳送的位元組流中的每一個位元組都按順序編号,本字段表示本封包段所發送資料的第一個位元組的序号。占4個位元組,最大表示4GB,若溢出則從0開始。

确認号:期望收到對方下一個封包段的第一個資料位元組的序号。若确認号為N,則說明到序号N-1為止的所有資料都已正确收到。

資料偏移:TCP封包段的資料起始處距離TCP封包段的起始處的長度,其實就是表示首部長度,因為首部長度不固定,是以需要這樣一個字段,因為4bit最多表示15,是以TCP首部最長為15x4即60位元組。

URG:緊急位,URG=1時,表明此封包段中有緊急資料,是高優先級的資料,應盡快傳送,不用在緩存裡排隊,配合緊急指針字段使用。

ACK:确認位,ACK=1時确認号才有效,在連接配接建立後所有傳送的封包段都必須把ACK置為1。

PSH:推送位,PSH=1時,接收方應盡快傳遞應用程式,不再等到緩存填滿再向上傳遞。

RST:複位,RST=1時,表明TCP連接配接中出現嚴重差錯,必須釋放連接配接,然後再重建立立傳輸連接配接。可以用來拒絕非法封包段或者拒絕打開連接配接。

SYN:同步位,SYN=1時,表明是一個連接配接請求/連接配接接收封包。

FIN:終止位,FIN=1時,表明此封包段發送方的資料已發送完,要求釋放連接配接。

視窗:指的是發送本封包段的一方的接收視窗,即現在允許對方發送的資料量。

檢驗和:檢驗首部+資料,檢驗時要加上12B的僞IP首部,第四個字段為6。(UDP為17)

緊急指針:URG=1時才有意義,指出本封包段中緊急資料的位元組數,因為緊急資料位于資料部分的開頭。

選項:最大封包段長度MSS(資料字段)、視窗擴大、時間戳、選擇确認

填充:填充0保證首部為4B的整數倍。

TCP連接配接建立
【面試】計算機網絡——傳輸層

Round 1:用戶端發送連接配接請求封包段,無應用層資料。

SYN=1,seq=x(随機)

Round 2:伺服器為該TCP連接配接配置設定緩存和變量,并向用戶端傳回确認封包段,允許連接配接,無應用層資料。

SYN=1,ACK=1,seq=y(随機),ack=x+1 Round 3:用戶端為該TCP連接配接**配置設定緩存和變量**,并向伺服器端傳回确認的确認,可以攜帶資料。 SYN=0,ACK=1,seq=x+1,ack=y+1

TCP的連接配接釋放
【面試】計算機網絡——傳輸層

Round 1:用戶端發送連接配接釋放封包段,停止發送資料,主動關閉TCP連接配接。

FIN=1,seq=u

Round 2:伺服器端回送一個确認封包段,客戶到伺服器這個方向的連接配接就釋放了——半關閉狀态。

ACK=1,seq=v,ack=u+1

Round 3:伺服器端發完資料,就發出連接配接釋放封包段,主動關閉TCP連接配接。

FIN=1,ACK=1,seq=w,ack=u+1

Round 4:用戶端回送一個确認封包段,再等到時間等待計時器設定的2MSL(最長封包段壽命)後,連接配接徹底關閉。

ACK=1,seq=u+1,ack=w+1

TCP可靠傳輸

網絡層提供最大努力傳遞,為不可靠傳輸,而傳輸層使用TCP實作可靠傳輸。

可靠:保證接收方程序從緩存區讀出的位元組流與發送方發出的位元組流是完全一樣的。

TCP實作可靠傳輸的機制:校驗,序号,确認,重傳

TCP預設使用累計确認,即不會來一個封包段就發送确認,而是要等到目前收到位元組前面所有的部分都已到達再發送确認,否則一直發送上一個确認 。

逾時重傳:TCP的發送方在規定的時間内(重傳時間)沒有收到确認就要重傳已發送的封包段。

TCP采用自适應算法,動态改變重傳時間RTTs(權重平均往返時間)。

備援ACK(備援确認):每當比期望序号大的失序封包段到達時,發送一個備援ACK,指明期待的下一個位元組的序号。

快速重傳:當發送方收到3個備援封包段則認為封包段丢失,重傳丢失封包段,不需要等待重傳時間耗盡再重傳。

TCP流量控制

TCP利用滑動視窗機制實作流量控制。

在通信過程中,接收方根據自己接受緩存的大小,動态地調整發送方的發送視窗大小,即接收視窗rwnd(接收方設定确認封包段的視窗字段來将rwnd通知給發送方),發送方的發送視窗大小取接收視窗rwnd和擁塞視窗cwnd的最小值。

為了防止出現“死鎖”(即發送方收到0視窗值封包段後一直等待,而接收方新發出的非0視窗值封包段丢失導緻它們互相等待),TCP為每一個連接配接設有一個持續計時器,隻要TCP連接配接的一方收到對方的零視窗通知,就啟動持續計時器。若持續計時器設定的時間到期,就發送一個零視窗探測封包段,接收方收到探測封包段時給出現在的視窗值。若視窗仍然是0,那麼發送方就重新設定持續計時器。

TCP擁塞控制

流量控制:點到點

擁塞控制:全局,防止過多的資料注入到網絡中。

擁塞控制的四種算法:

慢開始+擁塞避免

快重傳+快恢複

發送視窗 = Min{接收視窗rwnd,擁塞視窗cwnd}

接收視窗:接收方根據接收緩存設定的值,并告知給發送方,反映接收方容量。

擁塞視窗:發送方根據自己估算的網絡擁塞程度而設定的視窗值,反映網絡目前容量。

【面試】計算機網絡——傳輸層
【面試】計算機網絡——傳輸層

繼續閱讀