1.1TCP/IP
IP因特網協議:聯網主機的路由選擇和尋址
TCP傳輸控制協議:在不可靠的傳輸信道上提供可靠的抽象層
TCP嚮應用層隱藏了大多數網絡通信的複雜細節
比如丟包重發、按序發送、擁塞控制及避免、數據完整等
爲精確傳送做了優化,所有字節準確被接收,到達客戶端順序一致性
2.1三次握手
建立連接必須經過三次握手,這是爲了確保接收端和發送端的接受和發送都是完好的
這一過程中涉及了分組和序列號的傳輸
SYN:客戶端選擇一個隨機序列號x,併發送一個SYN分組,還包含其他TCP標誌和選項
SYN ACK:服務器給x加1,選擇自己的隨機序列號,追加自己的標誌和選項
ACK:客戶端給x和y加1併發送握手期間的最後一個ACK分組
客戶端在發送ACK分組後可以立即發送數據
服務端要等到接收到ACK分組纔可以發送數據
握手帶來的延遲給創建一個TCP連接都要付出巨大的代價,而且連接不是想重用就能夠重用的
2.2擁塞預防及控制
網絡擁塞是指在分組交換網絡中傳送分組的數目太多時,由於存儲轉發節點的資源有限而造成網絡傳輸性能下降的情況
往返時間超過了所有主機的最大中斷間隔,相應主機在網絡中製造越來越多的數據報副本
交換節點的緩衝區被填滿,多出來的分組要被刪除,每個分組的某個副本會到達目標
這就是擁塞崩潰,TCP加入了一系列機制來控制雙向發送數據的速度
2.2.1流量控制
預防發送端過多的向接收端發送數據,否則數據過多而無法處理,比如忙碌、負載重或緩衝區既定
TCP連接的每一方都需要事先通告自己的接收窗口(rwnd),包含了緩衝區的信息
2.2.2慢啓動
但是建立初期,誰也不知道可用帶寬是多少,因此需要一個估算機制,根據網絡動態變化
舉個例子,你在家中看視頻,服務器會盡最大努力給你提供數據
這個時候,你家人開始用網了,供視頻的帶寬一下就少了,這個時候服務器必須調整發送速度
否則,由於接收端不能立即處理這些數據,這些數據必定在中間某個過程中堆積,最終分組被刪除
新算法:慢啓動、擁塞預防、快速重發、快速恢復
擁塞窗口大小(cwnd):發送端對客戶端接收確認(ACK)之前可以發送數據量的限制
慢啓動以保守的窗口初始化連接,隨後每次往返都會成倍的提高傳輸的數據量
2.2.3擁塞預防
擁塞預防算法將丟包作爲網絡擁塞的標誌,也就是某個連接發生擁堵了,必須採取刪包措施
所以通過調整窗口大小,避免造成過多的包丟失
2.3帶寬延遲積BDP
數據鏈路的容量與端到端延遲的乘積,就是任意時刻處於在途未確認狀態的最大數據量
2.4隊首阻塞
有時候這種按序交付和可靠交付並不太重要,反而會導致額外的延遲
TCP分組都會帶着一個唯一的序列號被髮出,而且需要按順序到達接收端
如果中間有一個分組沒能到達,那麼後續分組就要保存在TCP緩衝區,等待丟失的分組重發併到達接收端
這一切都在TCP層,應用程序一無所知,必須等待分組全部到達才能訪問數據
應用程序只能通過套接字讀數據時感覺到延遲交付,這就是隊首阻塞
2.5應用程序行爲調優
調節TCP性能可以讓服務端和客戶端之間達到最大的吞吐量和最小延遲
再快也快不過什麼都不用發送,能少發就少發
數據傳輸不能更快,但我們可以減少他們傳輸的距離
重用TCP連接是提升性能的關鍵
大多數情況之下,TCP的瓶頸都是延遲而不是帶寬