重點協議TCP與UDP
1. 認識傳輸層的兩個協議
-
傳輸層功能: 爲相互通信的應用進程提供邏輯通信
-
TCP(Transmission Control Protocol,傳輸控制協議) :需要將要傳輸的文件分段進行傳輸,在傳輸之前需要建立會話,他的傳輸過程是可靠傳輸,同時要進行流量控制;[QQ傳文件]
-
UDP(User Data Protocol,用戶數據報協議):一個數據包就能夠完成數據通信,不分段,也不需要建立會話,不需要流量控制,是一種不可靠傳輸;[DNS域名解析;QQ聊天]
-
查看會話:netstat -n
-
查看建立會話的進程:netstat -nb
-
查看服務偵聽的端口:netstat -an
-
測試到遠程計算機某個端口是否打開 :telnet 39.99.188.117 8080
2.傳輸層協議和應用層協議之間的關係
- 常見的應用層協議使用的端口
- http=TCP+80
- https=TCP+443
- RDP=TCP+3389
- ftp=TCP+21
- SMTP=TCP+25
- 共享文件夾=TCP+445
- POP3=TCP+23
- telnet=TCP+23
- SQL=TCP+1433
- DNS=UDP+53
3.服務和應用層協議之間關係
- 服務使用TCP或UDP的端口偵聽客戶端請求
- 客戶端使用IP地址定位服務器使用目標端口定位服務
- 可以在服務器網卡上設置只開放必要的端口實現服務器網絡安全
4.UDP
16位UDP長度,表示數據報(UDP首部+UDP數據)的最大長度。
如果校驗和出錯,就會直接丟棄
- 特點:不安全但是效率高
- 無連接
- 不可靠:沒有確定應答機制,沒有超時重傳機制,也沒有連接管理機制
- 面向數據報:最大發送64k
- 應用層交給UDP多長的報文, UDP原樣發送, 既不會拆分, 也不會合並;、
- 用UDP傳輸100個字節的數據:
- 如果發送端調用一次sendto, 發送100個字節, 那麼接收端也必須調用對應的一次recvfrom, 接收100個字節; 而不能循環調用10次recvfrom, 每次接收10個字節;
- UDP沒有發送緩衝區,只有接收緩衝區:
- UDP沒有真正意義上的 發送緩衝區. 調用sendto會直接交給內核, 由內核將數據傳給網絡層協議進行後續的傳輸動作;
- UDP具有接收緩衝區. 但是這個接收緩衝區不能保證收到的UDP報的順序和發送UDP報的順序一致; 如果緩衝區滿了, 再到達的UDP數據就會被丟棄;
- 基於UDP的應用層協議:
- NFS: 網絡文件系統
- TFTP: 簡單文件傳輸協議
- DHCP: 動態主機配置協議
- BOOTP: 啓動協議(用於無盤設備啓動)
- DNS: 域名解析協議
5. TCP
-
協議格式:
- 源/目的端口號:從那個進程來,到那個進程去;
- 32位序號/32位確定號:和 TCP 的 ACK 機制有關,發送端給數據進行編號,接收端收到數據後確認收到哪些編號的數據。
- 4位TCP報頭長度:表示該TCP頭部有多少個32位bit(有4個字節);所以TCP頭部最大長度是15*4=60
- 6位標誌位:
- URG:緊急指針是否有效
- **ACK:**確認號是否有效
- PSH:提示接收端應用程序立刻從TCP緩衝區把數據讀走
- RST:對方要求重新建立連接; 我們把攜帶RST標識的稱爲復位報文段
- **SYN:**請求建立連接; 我們把攜帶SYN標識的稱爲同步報文段
- **FIN:**通知對方, 本端要關閉了, 我們稱攜帶FIN標識的爲結束報文段
- 16位窗口大小:
- 16位校驗和:發送端填充,CRC 校驗,接收端校驗不通過,則認爲數據有問題。此處的檢驗和不光包含TCP首部,也包含TCP數據部分。
- 16緊急指針:略
- 40字節頭部選項:略
-
特點:
- 有連接
- 可靠的
- 面向字節流
- 具有接收和發送緩衝區
-
確定應答機制(ACK):序號+確定序號實現
- 生活案例理解確定應答機制
通常,兩個人對話時,在談話的停頓處可以點頭或詢問以確認談話內容。如果對方遲遲沒有任何反饋,說話的一方還可以再重複一遍以保證對方確實聽到。 因此,對方是否理解了此次對話內容,對方是否完全聽到了對話的內容,都要靠對方的反應來判斷。網絡中的 “確認應答” 就是類似這樣的一個概念。當對方聽懂對話內容時會說: " 嗯 ",這就相當於返回了一個確認應答(ACK)。而當對方沒有理解對話內容或沒有聽清時會問一句 `` 咦?” 這好比一個否定確認應答
-
TCP將每個字節都進行了編號,既爲序列號
-
每個ACK都帶有對應得確認序列號,意思是告訴發送者,我已經收到那些數據;下一次你從什麼地方開始
-
超時重傳機制:系統基於TCP協議實現,動態計算報文的最大生存時間(MSL),超時時間設置爲2MSL
- 作用:超過超時時間,表示丟包(兩種情況,如下),需要重新發送數據報(系統中發送緩衝區保存有數據,可以重發)
- 主機A發送數據給B之後, 可能因爲網絡擁堵等原因, 數據無法到達主機B;
- 如果主機A在一個特定時間間隔內沒有收到B發來的確認應答, 就會進行重發;、
但是,主機A未收到B發來的確認應答, 也可能是因爲ACK丟失了;
- 因此主機B會收到很多重複數據. 那麼TCP協議需要能夠識別出那些包是重複的包, 並且把重複的丟棄掉.
這時候我們可以利用前面提到的序列號, 就可以很容易做到去重的效果.
-
連接管理機制:
- 在正常情況下, TCP要經過三次握手(紅色)建立連接, 四次揮手(藍色)斷開連接
- **!**注意:建立連接都是單方向的連接
-
三次握手:(建立連接)
- 客戶端的協議棧向服務器端發送了 SYN 包,並告訴服務器端當前發送序列號 j,客戶端進入 SYNC_SENT 狀態;
- 服務器端的協議棧收到這個包之後,和客戶端進行 ACK 應答,應答的值爲 j+1,表示對 SYN 包 j 的確認,同時服務器也發送一個 SYN 包,告訴客戶端當前我的發送序列號爲 k,服務器端進入 SYNC_RCVD 狀態;
- 客戶端協議棧收到 ACK 之後,使得應用程序從 connect 調用返回,表示客戶端到服務器端的單向連接建立成功,客戶端的狀態爲 ESTABLISHED,同時客戶端協議棧也會對服務器端的 SYN 包進行應答,應答數據爲 k+1;
- 應答包到達服務器端後,服務器端協議棧使得 accept 阻塞調用返回,這個時候服務器端到客戶端的單向連接也建立成功,服務器端也進入 ESTABLISHED 狀態。
-
四次揮手:(斷開連接)
TCP 連接終止時,主機 1 先發送 FIN 報文,主機 2 進入 CLOSE_WAIT 狀態,併發送一個 ACK 應答,同時,主機 2 通過 read 調用獲得 EOF,並將此結果通知應用程序進行主動關閉操作,發送 FIN 報文。主機 1 在接收到 FIN 報文後發送 ACK 應答,此時主機 1 進入 TIME_WAIT 狀態
- 爲什麼要ACK與FIN分開發送?服務器沒有繼續發FIN包給客戶端。
- 服務器爲什麼不發FIN,可能是業務實現上的需要,現在不是發送FIN的時機,因爲服務器還有數據要發往客戶端,發送完了自然就要通過系統調用發FIN了
- 爲什麼要ACK與FIN分開發送?服務器沒有繼續發FIN包給客戶端。
-
ClOSE_WAIT狀態:服務端程序沒有調用close方法,導致出現大量的連接處於CLOSE_WAIT狀態,代表半關閉,是一種bug,只需要加上對應的 close 即可解決問題.
- 關於 “半關閉” , 類似男女朋友分手
-
TIME_WAIT狀態:
- 爲啥不能設置爲CLOSED? 因爲低4次ACK響應報文時可能丟包,導致服務端無法關閉連接,需要服務器重新發送FIN請求
- **爲啥是2MSL?**返回ACK傳輸時間+服務端重新發送FIN的傳輸時間
-
滑動窗口:
- 窗口大小指的是無需等待確定應答而可以繼續發生數據的最大值。假如窗口爲n段
- 依賴ACK響應報文中的窗口大小字段
- 依賴擁塞控制窗口大小
- 收到第一個ACK,滑動窗口向後移動,繼續發送第n+1段的數據
- 操作系統內核爲了維護這個滑動窗口,需要開闢發送緩衝區來記錄當前還有那些數據沒有應答;只有確認應答過的數據,才能從緩衝區刪掉
- ACJ響應報文中,攜帶下一個序號是多少。---->表示在此序號之前的所有數據都已經接收到、
- 窗口的滑動:
- 依賴ACK響應報文中的下一個序號進行滑動,而下一個序號是多少,又依賴接接收到連續報文的最大序號。
- 窗口大小指的是無需等待確定應答而可以繼續發生數據的最大值。假如窗口爲n段
-
流量控制:
- 接收端:通過TCP協議頭中的“窗口大小”字段,告訴發送端,發送數據的大小。
- 目的:接收端接收能力有限,爲了防止接收緩衝區被打滿,再接收數據直接丟棄。使用窗口大小可以告訴發送端發送數據的大小。
-
擁塞控制:
- 因爲網絡上有很多的計算機,可能當前網絡狀態就已經比較擁堵,在不清楚當前網絡狀態下,貿然發送大量的數據,是很有可能引起雪上加霜的
- TCP引入慢啓動機制,先發少量的數據探探路,摸清當前網絡擁塞狀態,再決定按照多大的速度傳輸數據。
- 原理:
- 擁塞窗口初始值設爲1,以慢啓動指數級增長的方式,達到一定閾值變爲線性增長的方式
-
延時應答機制:
- 原理:接收到多個數據段時,不針對每條數據報響應ACK,而是延遲一定時間,這樣接收緩衝區數據很快被處理,可用空間更大,返回窗口大小字段就可以設置的更大,使網絡吞吐量更大,傳輸效率更高。
-
捎帶應答:
- 如果服務端也要傳輸數據到客戶端,可以和ACK結合起來一起發送,這就叫捎帶應答
-
TCP安全機制:
- 響應應答,超時重傳,連接機制,流量控制,擁塞控制
-
TCP性能機制:
- 滑動窗口,延遲應答,捎帶應答