匯總:Android小白成長之路_知識體系匯總【持續更新中…】
目錄
- 運輸層概述
- 用戶資料報協議UDP
- 傳輸控制協議TCP
- 可靠傳輸原理
- 停止等待協議
- 連續ARQ協議
- TCP報文段的首部格式
- TCP的運輸連接管理
運輸層概述
-
運輸層向上面的應用層提供通信服務,從運輸層的角度看,通信的端點是行程而不是主機
-
運輸層的兩個主要協議:
- TCP:傳輸控制協議,提供可靠的、面向連接的運輸服務
- UDP:用戶資料報協議,提供高效的、無連接的運輸服務
-
行程在運輸層通過復用傳送到網路層,網路層通過分用發送給各個應用行程
-
軟體埠:應用層的各種協議行程與運輸物體進行層間互動的一種地址
-
埠號:TCP/IP的運輸層用一個16位埠號來標識一個埠,埠號只有本地意義,是為了標志本計算機應用層中的各個行程和運輸層互動時的層間介面
-
服務端使用的埠號:
-
熟知埠號(系統埠號):數值為
0~1023,一般用于TCP/IP最重要的一些應用程式,讓所有用戶都知道,常見的有以下這些應用程式 FTP TELNET SMTP DNS TFTP HTTP SNMP SNMP(trap) HTTPS 熟知埠號 21 23 25 53 69 80 161 162 443 -
登記埠號:數值為
1024~49151,為沒有熟知埠號的應用程式使用,這類埠號必須在IANA按照規定的手續登記,以防重復
-
-
客戶端使用的埠號:數值為
49152~65535,由于這類埠號僅在客戶端行程運行時才動態選擇,因此又叫做短暫埠號
用戶資料報協議UDP
-
UDP只在IP的資料報服務上增加了很少的功能,例如復用、分用功能和差錯檢測功能
-
UDP的主要特點:
- 無連接:發送資料前不需要建立連接,因此減少了開銷和發送資料之間的時延
- 使用盡最大努力交付:不保證可靠交付,因此主機不需要維持復雜的連接狀態表
- 面向報文:UDP對應用層交下來的報文,不合并也不拆分,而是保留報文的邊界,添加首部后就交付給IP層,UDP一次交付一個完整的報文,因此應用程式應該選擇合適長度的報文,使得IP層的效率達到最佳
- 沒有擁塞控制:因此網路出現擁塞也不會使源主機的發送速率降低,但會造成資料丟失
- 支持一對一、一對多、多對一和多對多的互動通信
- UDP的首部開銷小
-
UDP的首部格式:UDP的首部欄位很簡單,只有8個位元組,由四個欄位組成

- 源埠:源埠號,需要對方回復時選用,不需要時可全0
- 目的埠:目的埠號,在終點交付報文時必須使用
- 長度:UDP用戶資料報的長度,最小值為8,即只有首部
- 檢驗和:檢測UDP用戶資料報在傳輸中是否有錯,錯則丟棄
- 偽首部:用于計算校驗和,并不是真正的首部
傳輸控制協議TCP
-
TCP的主要特點:
- 面向連接:使用TCP協議之前必須先建立連接,并且在使用結束后需要釋放已建立的連接
- 點對點:每一條TCP連接只能有兩個端點,也就是只能一對一通信
- 提供可靠交付服務:通過TCP連接傳送的資料,無差錯、不丟失、不重復,并且按序到底
- 全雙工通信:TCP允許通信雙方在任何時候都能互相發送資料,TCP連接的兩端都設有發送快取和接收快取,用來臨時存放雙向通信的資料
- 面向位元組流:TCP中的流指的是流入到行程或從行程流出的位元組序列

-
套接字:每一條TCP連接都有兩個端點,這兩個端點就叫做套接字
套 接 字 s o c k e t = ( I P 地 址 : 端 口 號 ) 套接字socket = (IP地址:埠號) 套接字socket=(IP地址:端口號)
可靠傳輸原理
停止等待協議

-
停止等待:每發送完一個分組就停止發送,等待對方的確認,收到確認后再發送下一個分組
-
超時重傳:在傳輸程序中出現差錯,B丟棄了報文,A在一段時間內沒收到確認,就重傳前面的分組
- A在發送完一個分組后,必須暫時保留已發送的分組的副本,收到確認后才清除該副本
- 分組和確認分組必須進行編號,以便于分組的收到確認
- 超時計時器設定的重傳時間應當比資料在分組傳輸的平均往返時間更長一些
-
確認丟失:假設B發送的確認丟失了,A沒收到確認,重傳了分組,B再次收到該分組,這時應采取兩個行動

- 丟棄這個重復的分組
- 向A發送確認,告知已收到分組
-
確認遲到:傳輸程序沒差錯,但B對分組的確認遲到了,A重傳了分組后收到確認,然后再次收到確認,A收到后丟棄第二次確認,B收到重復的分組也丟棄,并重傳確認分組
-
上述可靠傳輸協議常稱為自動重傳請求ARQ
連續ARQ協議

- 發送視窗:位于發送視窗內的分組可以連續發送出去,不需要等待對方確認,這樣就可以提高信道利用率,分組發送是按照分組序號從小到大發送的
- 連續ARQ協議:發送方沒收到一個確認,就把發送視窗向前滑動一個分組的位置,接收方一般是累積確認的,不會對每一個收到的分組逐個確認,而是收到多個分組后,對最后一個分組發送確認,表示逐個分組為止的所有分組都已經正確收到
- Go-back-N:如果發送了前5個分組,而后面3個分組丟失了,接收方只能對前2個分組發出確認,發送方無法知道后三個分組的下落,只能把后三個分組重傳一次,這就叫回退N,表示需要再退回來重傳已發送的N個分組
TCP報文段的首部格式

- 源埠和目的埠:分別寫入源埠號和目的埠號,用來實作分用功能
- 序號:TCP面向位元組流,每一個位元組都按順序編號,超過最大序號時從0開始重新編號,序號欄位的值指的是本報文段所發送的資料的第一個位元組的序號,例如本次序號是101,而攜帶的資料共有100位元組,那么下一個報文段的序號就從201開始
- 確認號:期望收到對方下一個報文段的第一個資料位元組的序號,也就是上面舉例子中下一個報文段的序號
- 資料偏移:指出TCP報文段的資料起始處舉例TCP報文段的起始處有多遠,實際上就是首部長度
- 保留:保留為今后使用,目前應置為0
- 緊急URG:當值為1時,表明緊急指標有效,告訴系統該報文段有緊急資料,應盡快傳送,相當于高優先級資料,不按照原來的排隊順序來傳送,例如發送終端命令,需要盡快結束
- 確認ACK:TCP規定,在建立連接后所有傳送的報文段都必須把ACK置為1
- 推送PSH:接收方收到
PSH=1的報文段,不再等到快取填滿后再向上交付,而是盡快地將資料交付到應用行程 - 復位RST:當
RST=1時,表明TCP連接中出現嚴重差錯,如主機崩潰或其他原因,必須釋放連接,然后再重新建立運輸連接 - 同步SYN:用來同步序號,當
SYN=1而ACK=0時,表明這是一個連接請求報文段,對方若同意連接,則應在回應的報文段中使用SYN=1和ACK=1,因此SYN置1表示這是一個連接請求或連接接受報文 - 終止FIN:用來釋放一個連接,當
FIN=1時,表明此報文段的發送方的資料已全部發送完畢,并要求釋放運輸連接 - 視窗:指發送本報文段的一方的接收視窗值,而不是發送視窗,視窗值告訴對方,從本報文段首部中的確認號算起,接收方目前允許對方發送的資料量,之所以有這個限制,是因為接收方的資料快取空間有限,視窗值作為接收方讓發送方設定其發送視窗的依據
- 檢驗和:檢驗和欄位檢驗的范圍包括首部和資料這兩部分,和UDP一樣,也要加上偽首部
- 緊急指標:僅在
URG=1時才有意義,指出本報文段中的緊急資料的位元組數,緊急資料之后是普通資料 - 選項:長度可變,例如最大報文長度MSS(資料段的最大長度)、視窗擴大選項、時間戳選項、選擇確認選項等
TCP的運輸連接管理
-
TCP的連接三個階段:連接建立、資料傳送和連接釋放
-
連接建立:三次握手程序,A需要知道B正常收發資料,B也需要知道A正常收發資料,所以需要三次握手

- A向B發送連接請求報文段,此時
SYN=1,并且選擇一個初始序號seq=x, - B收到連接請求報文段后,向A發送確認,此時
SYN=1,并且ACK=1,自己選擇一個初始序號為y,確認號為x+1 - A收到B的確認后,也向B發送確認,此時
ACK=1,初始序號為x+1,確認號為y+1,至此,連接建立
- A向B發送連接請求報文段,此時
-
連接釋放:四次揮手,雙方都需要知道對方已經發送完資料了才結束連接,因此需要互相確認結束

- A發送終止控制,此時
FIN=1,序號為前面已發送的資料最后一個位元組的序號加1,假設為u,A等待B確認 - B收到釋放報文段后發出確認,確認號為
u+1,序號為自己前面已發送的資料最后一個位元組的序號加1,假設為v,B開始進入等待,此時A到B這個方向的連接已釋放,TCP處于半關閉狀態,即A已經沒有資料要發送了,但B若發送資料,A仍要接收,A收到B的確認后,開始等待B發出連接釋放報文段 - 若B沒有資料需要發送給A了,B發出
FIN=1的報文段,假設B目前序號為w,B還必須重復上次已發送過的確認號ack=u+1,這時B開始等待A的確認
即A已經沒有資料要發送了,但B若發送資料,A仍要接收,A收到B的確認后,開始等待B發出連接釋放報文段 - 若B沒有資料需要發送給A了,B發出
FIN=1的報文段,假設B目前序號為w,B還必須重復上次已發送過的確認號ack=u+1,這時B開始等待A的確認 - A收到B的連接釋放報文段后,對B發出確認,把ACK置1確認號
ack=w+1,而自己的序號是seq=u+1,然后進入到時間等待狀態,等待最后的釋放,B收到確認后也開始等待最后的釋放,這個釋放時間通過時間等待計時器來設定
- A發送終止控制,此時
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/302476.html
標籤:其他
上一篇:HTTP與TCP的關系
