2020-10-20
關鍵字:
1、傳輸層的作用
根據OSI參考模型的分層思想可知,傳輸層既接受來自網絡層提供的服務,又爲其上的應用層提供服務。網絡層的作用僅僅是使數據包從源端送達到目的端,真實的網絡通信需要考慮的因素還是非常多的,但這些偏偏是網絡層所不管的,例如數據是否全部正確傳輸成功、長包是否要拆分發送、數據在傳輸過程中出錯了怎麼辦等等。傳輸層的職責就剛剛好是管網絡層所不管的事情。用官方的話來說,傳輸層是保證將數據正確地從應用層轉交給網絡層,或者反之的將網絡層上報的數據正確地上報給應用層用的。
網絡通信對數據傳輸常見的要求有如下幾個:
1、保證數據傳輸成功;
2、保證數據的傳輸順序;
3、保證任意大小的數據都能正確傳輸;
4、保證收發雙方能以一個合適的速率傳輸數據;
5、保證能同時進行多個網絡通信;
6、保證有數據傳輸回執;
7、保證長包能夠正確拆分傳輸;
傳輸層用於實現上述幾點要求的方式是兩個通信協議:
1、TCP協議;
2、UDP協議。
2、傳輸層的協議
2.1、端口號
這裏的端口號是指網絡通信時用於區分不同應用的號碼,路由器、交換機等網絡設備上的“接口”也被稱爲“端口”,但這是兩種不同的概念。
端口號由兩個字節的整型數表示,因此其有效範圍爲 0 ~ 65535。網絡端口號與IP地址一樣,是由 IANA 統一管理分發的,如果某個機構想要獨佔某端口號,則需要向 IANA 申請。但很少有人這麼做,因爲 IANA 有設定一個公共區域,任何應用都可以使用這個公共區域的號碼而無需報備,對絕大多數網絡通信場景而言,公共區域的端口號已經完全能夠滿足自己的通信需求了,因此就無需費時費力費金錢地申請獨佔端口號了。
根據 IANA 的規則,網絡端口號共分三類:
1、知名端口號;
2、註冊端口號;
3、動態端口號。
知名端口號的範圍爲 0 ~ 1023。知名端口號又稱爲系統端口號,它們是被特定的服務或應用獨佔的端口號,普通應用不能使用。事實上,在Linux平臺一個普通應用在申請知名端口號時是會報錯的。
註冊端口號的範圍爲 1024 ~ 49151。這個區域即是前面提到的公共端口號區域,任何應用都可以自由申請這個區域的端口號使用。
動態端口號的範圍爲 49152 ~ 65535。動態端口號是供 C/S架構 模式程序的客戶端使用的。客戶端在開始連接服務器時只需要指定服務端的端口號即可,自己的端口號是無需指定的,此時系統就會從動態端口號範圍內隨機選取一個作爲客戶端的源端口來與服務端通信。
常見的知名端口號分配信息如下
端口號 | 獨佔方 |
20、21 | FTP |
22 | SSH |
23 | Telnet |
25 | SMTP |
53 | DNS |
80 | HTTP |
110 | POP3 |
179 | BGP |
443 | HTTPS |
2.2、TCP協議
TCP協議的格式如下圖所示:
TCP協議是一種可靠連接協議,使用這種通信協議時可以保證要傳輸的數據一定到達目的端,如果失敗了則會重傳。
關於TCP協議各個字段的含義,筆者的另一篇博文已有記述,有需要的同學敬請閱讀筆者的另一篇文章:
https://www.cnblogs.com/chorm590/p/12674282.html
2.3、UDP協議
UDP協議的格式相較於TCP要簡單許多,具體如下圖所示:
UDP相較於TCP是不可靠傳輸協議。使用UDP協議通信時,只會保證數據包從源端發送出去了,至於能否被目的端接收到就無法保證了。但是UDP協議相較於TCP的傳輸流程更爲簡單,傳輸速率也更高,佔用的帶寬還比較小。因此在實際應用中是選用TCP還是UDP還要視具體需求而定。
關於UDP各字段的含義同樣在筆者另一篇博文已有記述,有需要的同學敬請閱讀另一篇博文:
https://www.cnblogs.com/chorm590/p/12674282.html
整個傳輸層的核心內容基本就這些了。傳輸層再往上就是應用層了,應用層所關心的就是實際應用了,已經沒太多值得記述的知識了,因此TCP/IP模型的知識到傳輸層就可以告一段落了。