OSI的七層模型
各層功能詳解:
1、物理層(參數:比特):用于定義傳輸接口以及比特率傳輸
2、數據鏈路層(參數:幀):將比特流轉化為邏輯傳輸路線,并解決傳輸不完整的問題
3、網絡層(分組數據包格式):這層使用路由器等方法把邏輯傳輸轉化為物理地址
4、傳輸層:接口上一層的數據,必要的時候進行數據切割,將數據回傳給網絡層,幫助數據段有效到達
5、會話層:解決不同機器間建立和管理會話的問題(自動化)
6、表示層:解決不同系統通信語法,數據格式化 代碼轉換等問題
7、應用層:對網絡傳入的規范,還有文件傳輸等功能
網絡數據處理的流程
自上而下,后自下而上處理數據頭部
OSI只是給了一個模型與概念,
并沒有一個具體的實現,
所以TCP/IP協議這種遵循OSI模型的實現方式出現了
TCP的三次握手
(重要)TCP Flags控制功能:
1、ACK:用于確認序號的標志
2、SYN:進行握手時的同步序號
3、FIN:進行四次揮手時的關閉序號
TCP協議采用三次握手建立一個連接(為了數據安全):
第一次握手,建立連接時,客戶端發送SYN包,服務器進入SYN_SEND狀態,等待服務器的確認
第二次握手,服務器收到SYN包,確認客戶的SYN(ack+1),自己也發送一個SYN包(就是發送了SYN+ACK),并進入SYN_RECV狀態
第三次握手:客戶端收到服務器的SYN+ACK,向服務器發送確認ACK,發送完畢后,完成握手,連通
TCP的四次揮手
四次揮手是為了終止連接
1、客戶端發送FIN 用來關閉與服務器的數據傳送,并進入FIN_WAIT_1狀態
2、服務端收到FIN后,發送一個ACK給客戶端,進入CLOSE_WAIT狀態
3、服務器發送一個FIN,用來關閉數據傳送,服務端進入LAST_ACK狀態
4、客戶端收到FIN后,客戶端進入關閉倒計時,并發送一個ACK給服務端,服務端關閉,兩分鐘后客戶端關閉
為什么客戶端要進入關閉倒計時而不直接關閉:
1、確保服務端能收到ACK
2、避免在關閉的瞬間有新的連接互相與兩臺機器的信息混淆
流量控制
如果發送者發送數據過快,接收者來不及接收,那么就會有分組丟失。為了避免分組丟失,控制發送者的發送速度,使得接收者來得及接收,這就是流量控制。流量控制根本目的是防止分組丟失,它是構成TCP可靠性的一方面。
流量控制的實現:
TCP的滑動窗口
滑動窗口協議既保證了分組無差錯、有序接收,也實現了流量控制。主要的方式就是接收方返回的 ACK 中會包含自己的接收窗口的大小,并且利用大小來控制發送方的數據發送。
功能:
1、接收ACK時,判斷時間間隔,超時重連。
2、流量控制和亂序重排,接收端未接收到窗口所需的全部資源 是不會開始滑動窗口接收下一個數據的
32-35未完全收到時,窗口是不會向后滑動的,直至數據完全接收才發生滑動
流量控制時引發的死鎖
當發送者收到了一個窗口為0的應答,發送者便停止發送,等待接收者的下一個應答。但是如果這個窗口不為0的應答在傳輸過程丟失,發送者一直等待下去,而接收者以為發送者已經收到該應答,等待接收新數據,這樣雙方就相互等待,從而產生死鎖。
解決方案:
為了避免流量控制引發的死鎖,TCP使用了持續計時器。每當發送者收到一個零窗口的應答后就啟動該計時器。時間一到便主動發送報文詢問接收者的窗口大小。若接收者仍然返回零窗口,則重置該計時器繼續等待;若窗口不為0,則表示應答報文丟失了,此時重置發送窗口后開始發送,這樣就避免了死鎖的產生。
擁塞控制
擁塞控制是作用于網絡的,它是防止過多的數據注入到網絡中,避免出現網絡負載過大的情況
常見擁塞控制方法:
1、慢開始算法:
發送方維持一個叫做擁塞窗口cwnd(congestion window)的狀態變量。cwnd的大小取決于網絡的擁塞程度,并且動態地在變化。發送方讓自己的發送窗口等于cwnd窗口,另外考慮到接受方的接收能力,發送窗口可能小于擁塞窗口。
慢算法會先判斷發送的數據是否會造成網絡的擁塞,按網絡的擁塞程度逐漸增大擁塞窗口的大小
2、擁塞避免算法:
擁塞避免算法讓cwnd緩慢增長,即每經過一個往返時間(RTT)就把發送方的擁塞窗口cwnd加1,而不是加倍。按線性增長*。
這兩個算法都會在發送方判斷到網絡出現擁塞(若發送方未接收到確認消息,沒有收到確認消息可能是數據丟失,但因為無法判定,所以就當作擁塞處理)時,將cwnd窗口大小縮小為一半(不能小于2),cwnd重新設置為1,并重新執行慢開始算法
為了防止cwnd過度膨脹,
當cwnd < 慢開始門限(ssthresh)時,則會使用慢開始算法,
cwnd > ssthresh時,則改用擁塞避免算法
cwnd = ssthresh時,則慢算法或擁塞避免算法任意
3、快重傳算法:
快重傳算法在接收方在接收到一個不完整(失序或丟失)的報文后就立馬發出重復確認,讓發送方發現數據段不完整而提高網絡吞吐量,不會等到數據發送完成再確認,發送方只要一連收到三個重復確認就應當立即重傳對方尚未收到的報文段,無需等待計時器
4、快恢復算法:
快重傳配合使用的還有快恢復算法,有以下兩個要點:
當發送方連續收到三個重復確認時,就執行“乘法減小”算法,把ssthresh門限減半(為了預防網絡發生擁塞)。但是接下去并不執行慢開始算法
考慮到如果網絡出現擁塞的話就不會收到好幾個重復的確認,所以發送方現在認為網絡可能沒有出現擁塞。所以此時不執行慢開始算法,而是將cwnd設置為ssthresh減半后的值,然后執行擁塞避免算法,使cwnd緩慢增大。如下圖:TCP Reno版本是目前使用最廣泛的版本。
參考文章https://zhuanlan.zhihu.com/p/37379780
TCP和UDP區別
UDP報文結構
由源端口、目標端口、數據包長度、奇偶校驗值、用戶數據組成
UDP的特點:
1、無需建立連接,直接接收數據,并盡可能快地發送出去
2、不用維護連接,可一對多傳輸
3、數據包報頭只有8個字節(TCP要20個字節)
4、吞吐量影響只由數據生成速率,傳輸速率,機器性能限制
5、不保證可靠,無需進行流量控制、擁塞控制等
6、直接發送包裝好的報文(TCP為數據流)