(持續更新,記錄學習,有誤請一定告知)
運輸層在OSI七層協定中為第4層(在網路層的上層,對談層的下層),在TCP/IP協定中為第三層(網路層上層,應用層下層),其功能就是給予不同主機間的應用程序提供分組通訊,主要的通訊協定為UDP和TCP。
從網路層的角度來說,IP資料包的首部明確了兩個要通訊的主機的地址,並能夠將分組資料由傳送端主機傳送到目的主機端中,實現兩臺主機間的通訊,既然都已經實現了兩臺主機間的通訊那為什麼還需要運輸層呢? 其實 「兩臺主機通訊」 並不夠準卻,應該是 「兩臺主機的應用程序間通訊」 ,因此IP做的僅僅是將分組資料傳送到了目的端主機的網路層中並沒有交付到目的主機的程序中,而運輸層就是將在網路層中的分組資料交付給應用層達到應用程序間通訊的作用。
說了這麼多可以總結兩句話:
網路層:為主機間提供邏輯通訊
傳輸層:為主機中的應用程序提供邏輯通訊
上面說到對於運輸層而言,所謂的通訊是指兩臺主機間的應用程序間的通訊,而不是兩臺主機間的通訊,那麼兩臺主機間不會在一個時刻只相互通訊一個程序的資料吧!一定是多個程序與多個程序之間同時的互動,因此,運輸層有一個很重要的功能---- 分用和複用
舉個平常的例子:
當一個小區的sf快遞小哥收到這個小區所有業主要寄出的sf快遞,之後把快遞都交到sf的物流中心,這個行為我們就可以說是小區的所有業主複用了小區的快遞小哥,而當各地方的sf物流中心包裹要寄來這個小區時,快遞小哥收集了包裹後分別的交給對應的業主,這個行為就是分用。
而在運輸層中,應用層的所有應用程序從埠將資料通過運輸層傳輸到網路層,這就是 複用,而運輸層收到從網路層要傳送給各應用程序的資料後,運輸層通過埠號將分別交付到指定的應用程序這就是分用
上面說到的埠,埠號就是應用層中各個應用程序的一個號碼,埠就像一扇門,在傳送端,應用程序通過埠將要互動的資料傳給運輸層;而在接收端運輸層通過埠號將資料傳給個應用程序
2.1 伺服器埠號:
熟知埠號(系統埠號):數值為 0-1023,詳細的對應可在IANA查詢
登記埠號:數值為 1024-49151,可在IANA登記辦理
2.2 使用者埠號: 數值為 49152-65535,又叫短暫埠號,當用戶端和伺服器端的通訊結束時,
使用者埠號就會消失
##注意##埠號的作用範圍只在本地,在整個因特網中,不同計算機的相同埠號是沒有關聯的
所謂的連線指兩端在資料傳前是否需要建立連線,而面向連線就是在通訊之前,必須建立連線,在通訊的過程中,會一直被監控和管理,在通訊結束後,釋放連線;而相對於面向連線,無連線服務就是兩個通訊裝置通訊前不建立連線,當要傳資料時,直接把資料放到網路上,由系統決定怎麼傳輸資料,無連線服務部能保證資料傳送端傳送的資料順序以相同的順序到達接收端
1.1 不錯: 資料不會出差錯
1.2 不丟: 資料不會丟失
1.3 不亂: 資料按造傳送端傳送的資料順序以相同的順序到達接收端
要滿足可靠傳輸,需要有理想的傳輸條件1.傳輸通道不產生差錯 2.不管傳送方傳送的多塊.接收方都能夠來得及處裡接收的資料, 然而現實總是差強人意,這種理想是不存在的,因此通過停止等待協定來達到可靠傳輸
2.1 中心思想:就是當傳送方傳送資料到接收方,接收方能夠回傳確認資訊給傳送方,傳送方收到後再接著傳接下來的資料分組,但在傳送和接收通訊時往往會有以下情況發生 :
無差錯情況:這是最理想的情況了,就是傳送端傳送的資料分組都能夠到達接收端,並且接收端也都可以回傳確認資訊
出現差錯 :指得是傳送端將資料傳送給傳送端後,接收端檢測資料是有差錯的,這時接收端會丟失資料,接著啥也不幹,而傳送端一直沒收到接收端的確認資訊,則重新在傳送一次相同的資料分組,這個過程叫做超時重傳, 要達到超時重傳需要 1.設定一個超時計時器 2.傳送端必須暫時保留傳送的資料分組的副本,直到接收端回傳確認資訊再丟棄 3. 超時計時器的設計需要比分組傳輸的平均往返時間更長
確認資訊丟失或遲到: 從字面意思就可以知道,傳送端的分組資料到達接收端並沒有丟失且沒有差錯,但接收端返回確認資訊時,確認資訊丟失或遲到,導致傳送端以為是資料沒有傳到,因此再傳了一次,導致接收端收到重複的分組,這時接收端會做兩件事: 1.將重複的資料丟棄 2. 再重新傳一次確認資訊; 而傳送端會一直等待確認,如果一直沒等到就一直等,直到系統自動關閉連線,而傳送端在這過程如果收到重複的確認資訊,丟掉重複的確認資訊
1.1 UDP是無連線的:字面上的意思,UDP在傳送資料之前不用建立連線(此處可和後面講到的TCP建立連線做對比)
1.2 UDP的服務是盡最大努力的服務:就是不可靠的服務,說的在白話一些就是UDP傳送的資料不會保證有沒有傳到,也不會確認到底傳到沒有,但UDP有簡單的差錯檢驗,不過如果檢驗出錯誤,會直接丟棄報文所以主機不需要維持連線狀態表(節省資源)
1.3 UDP沒有擁塞控制:所以使用UDP傳輸時當網路出現擁塞時,並不會影響傳送端的傳送資料,所以對於實時應用要求高的應用程序(視訊電話、直播)會使用UDP
##注意##雖說實時應用要求高的應用程序會使用UDP,但當很多這類應用程序同時向網路傳送資料時,網路就可能會引起擁塞,會造成所有應用程序都沒法正常使用##
2.1 每個UDP的資料包有兩段格式=>UDP首部+UDP資料部份
2.2 UDP首部:源埠+目的埠+長度+校驗和 (每一個欄位佔用2位元組)
源埠: 需要對方回信時選用,不需要時可以是全0
目的埠: 在終點交付報文時必須使用
長度: 就是資料包長度,最小為8
校驗和: 檢測資料包在傳輸中是否有錯,有錯就扔
##如果目的端UDP發現目的埠號並沒有對應的應用程序,則會丟掉資料包,並由ICMP回傳
"埠不可達"差錯報文給傳送方