計算機網絡基礎 該是程序猿需掌握的知識,但往往會被忽略
今天,我將詳細講解計算機網絡中最重要的TCP
協(xié)議,含其特點、三次握手、四次揮手、無差錯傳輸?shù)戎R,希望你們會喜歡。
閱讀本文前,請先了解計算機網絡基礎知識:獻上一份全面 & 詳細的計算機網絡基礎 學習指南
Transmission Control Protocol
,即 傳輸控制協(xié)議
屬于 傳輸層通信協(xié)議
基于
TCP
的應用層協(xié)議有HTTP
、SMTP
、FTP
、Telnet
和POP3
面向連接、面向字節(jié)流、全雙工通信、可靠
具體介紹如下:
優(yōu)點:數(shù)據傳輸可靠
缺點:效率慢(因需建立連接、發(fā)送確認包等)
要求通信數(shù)據可靠時,即 數(shù)據要準確無誤地傳遞給對方
如:傳輸文件:HTTP、HTTPS、FTP等協(xié)議;傳輸郵件:POP、SMTP等協(xié)議
萬維網:HTTP
協(xié)議
文件傳輸:FTP
協(xié)議
電子郵件:SMTP
協(xié)議
遠程終端接入:TELNET
協(xié)議
TCP雖面向字節(jié)流,但傳送的數(shù)據單元 = 報文段
報文段 = 首部 + 數(shù)據 2部分
TCP的全部功能體現(xiàn)在它首部中各字段的作用,故下面主要講解TCP報文段的首部
首部前20個字符固定、后面有4n個字節(jié)是根據需而增加的選項
故 TCP首部最小長度 = 20字節(jié)
TCP建立連接需 三次握手
具體介紹如下
成功進行TCP的三次握手后,就建立起一條TCP連接,即可傳送應用層數(shù)據
注
因
TCP
提供的是全雙工通信,故通信雙方的應用進程在任何時候都能發(fā)送數(shù)據三次握手期間,任何1次未收到對面的回復,則都會重發(fā)
結論
防止服務器端因接收了早已失效的連接請求報文,從而一直等待客戶端請求,最終導致形成死鎖、浪費資源
具體描述
SYN洪泛攻擊:
從上可看出:服務端的TCP資源分配時刻 = 完成第二次握手時;而客戶端的TCP資源分配時刻 = 完成第三次握手時
這就使得服務器易于受到
SYN
洪泛攻擊,即同時多個客戶端發(fā)起連接請求,從而需進行多個請求的TCP連接資源分配
在通信結束后,雙方都可以釋放連接,共需 四次揮手
具體如下
結論
為了保證通信雙方都能通知對方 需釋放 & 斷開連接
即釋放連接后,都無法接收 / 發(fā)送消息給對方
具體描述
延伸疑問:為什么客戶端關閉連接前要等待2MSL時間?
即
TIME - WAIT
狀態(tài)的作用是什么;
MSL
= 最長報文段壽命(Maximum Segment Lifetime
)
原因1:為了保證客戶端發(fā)送的最后1個連接釋放確認報文 能到達服務器,從而使得服務器能正常釋放連接
原因2:防止 上文提到的早已失效的連接請求報文 出現(xiàn)在本連接中
客戶端發(fā)送了最后1個連接釋放請求確認報文后,再經過2MSL
時間,則可使本連接持續(xù)時間內所產生的所有報文段都從網絡中消失。
即 在下1個新的連接中就不會出現(xiàn)早已失效的連接請求報文
對比于UDP
,TCP
的傳輸是可靠的、無差錯的
那么,為什么TCP
的傳輸為什么是可靠的、無差錯的呢?
下面,我將詳細講解TCP
協(xié)議的無差錯傳輸
無差錯:即 傳輸信道不出差錯
發(fā)送 & 接收效率匹配:即 無論發(fā)送方以多快的速度發(fā)送數(shù)據,接收方總來得及處理收到的數(shù)據
先理解2個基礎概念:發(fā)送窗口、接收窗口
工作原理
對于發(fā)送端:
每收到一個確認幀,發(fā)送窗口就向前滑動一個幀的距離
當發(fā)送窗口內無可發(fā)送的幀時(即窗口內的幀全部是已發(fā)送但未收到確認的幀),發(fā)送方就會停止發(fā)送,直到收到接收方發(fā)送的確認幀使窗口移動,窗口內有可以發(fā)送的幀,之后才開始繼續(xù)發(fā)送
具體如下圖:
對于接收端:當收到數(shù)據幀后,將窗口向前移動一個位置,并發(fā)回確認幀,若收到的數(shù)據幀落在接收窗口之外,則一律丟棄。
只有接收窗口向前滑動、接收方發(fā)送了確認幀時,發(fā)送窗口才有可能(只有發(fā)送方收到確認幀才是一定)向前滑動
停止-等待協(xié)議、后退N幀協(xié)議 & 選擇重傳協(xié)議只是在發(fā)送窗口大小和接收窗口大小上有所差別:
停止等待協(xié)議:發(fā)送窗口大小=1,接收窗口大小=1;即 單幀滑動窗口 等于 停止-等待協(xié)議
后退N幀協(xié)議:發(fā)送窗口大小>1,接收窗口大小=1。
選擇重傳協(xié)議:發(fā)送窗口大小>1,接收窗口大小>1。
當接收窗口的大小為1時,可保證幀有序接收。
數(shù)據鏈路層的滑動窗口協(xié)議中,窗口的大小在傳輸過程中是固定的(注意要與TCP的滑動窗口協(xié)議區(qū)別)
核心思想:采用一些可靠傳輸協(xié)議,使得
出現(xiàn)差錯時,讓發(fā)送方重傳差錯數(shù)據:即 出錯重傳
當接收方來不及接收收到的數(shù)據時,可通知發(fā)送方降低發(fā)送數(shù)據的效率:即 速度匹配
針對上述2個問題,分別采用的解決方案是:自動重傳協(xié)議 和 流量控制 & 擁塞控制協(xié)議
定義
即 Auto Repeat reQuest
,具體介紹如下:
類型
下面,將主要講解 上述3類協(xié)議
原理:(單幀滑動窗口)停止 - 等待協(xié)議 + 超時重傳
即 :發(fā)送窗口大小=1、接收窗口大小=1
停止 - 等待協(xié)議的協(xié)議原理如下:
發(fā)送方每發(fā)送一幀,要等到接收方的應答信號后才能發(fā)送下一幀
接收方每接收一幀,都要反饋一個應答信號,表示可接下一幀
若接收方不反饋應答信號,則發(fā)送方必須一直等待
也稱:連續(xù)ARQ協(xié)議
原理
多幀滑動窗口 + 累計確認 + 后退N幀 + 超時重傳
即 :發(fā)送窗口大小>1、接收窗口大小=1
具體描述
a. 發(fā)送方:采用多幀滑動窗口的原理,可連續(xù)發(fā)送多個數(shù)據幀 而不需等待對方確認
b. 接收方:采用 累計確認 & 后退N幀的原理,只允許按順序接收幀。具體原理如下:
本示例 = 源站 向 目的站 發(fā)送數(shù)據幀。具體示例如下:
原理
多幀滑動窗口 + 累計確認 + 后退N幀 + 超時重傳
即 :發(fā)送窗口大小>1、接收窗口大小>1
類似于類型2(后退N幀協(xié)議),此處僅僅是接收窗口大小的區(qū)別,故此處不作過多描述
特點
a. 優(yōu):因連續(xù)發(fā)送數(shù)據幀而提高了信道的利用率
b. 缺:重傳時又必須把原來已經傳送正確的數(shù)據幀進行重傳(僅因為這些數(shù)據幀前面有一個數(shù)據幀出了錯),將導致傳送效率降低
由此可見,若信道傳輸質量很差,導致誤碼率較大時,后退N幀協(xié)議不一定優(yōu)于停止-等待協(xié)議
簡介
示例
特別注意:死鎖問題
定義
防止過多的數(shù)據注入到網絡中,使得網絡中的路由器 & 鏈路不致于過載
擁塞:對網絡中的資源需求 > 該資源所能提供的部分
與 “流量控制”的區(qū)別
具體解決方案
共分為2個解決方案:慢開始 & 擁塞避免、快重傳 & 快恢復
其中,涉及4種算法,即 慢開始 & 擁塞避免、快重傳 & 快恢復
具體介紹如下
發(fā)送方維持一個狀態(tài)變量:擁塞窗口(cwnd, congestion window )
,具體介紹如下
原理
當主機開始發(fā)送數(shù)據時,由小到大逐漸增大 擁塞窗口數(shù)值(即 發(fā)送窗口數(shù)值),從而 由小到大逐漸增大發(fā)送報文段
目的
開始傳輸時,試探網絡的擁塞情況
具體措施
示意圖
特別注意
慢開始的“慢”指:一開始發(fā)送報文段時擁塞窗口(cwnd)
設置得較?。?),使得發(fā)送方在開始時只發(fā)送一個報文段(目的是試探一下網絡的擁塞情況)
并不是指擁塞窗口
(cwnd)
的增長速率慢
原理
使得擁塞窗口(cwnd)
按線性規(guī)律 緩慢增長:每經過一個往返時間RTT
,發(fā)送方的擁塞窗口(cwnd)
加1
擁塞避免 并不可避免擁塞,只是將擁塞窗口按現(xiàn)行規(guī)律緩慢增長,使得網絡比較不容易出現(xiàn)擁塞
相比慢開始算法的加倍,擁塞窗口增長速率緩慢得多
示意圖
為了防止擁塞窗口(cwnd)
增長過大而引起網絡擁塞,采用慢開始 & 擁塞避免 2種算法,具體規(guī)則如下
實例說明
快重傳 & 快恢復的解決方案 是對慢開始 & 擁塞避免算法的改進
原理
接收方 每收到一個失序的報文段后 就立即發(fā)出重復確認(為的是使發(fā)送方及早知道有報文段沒有到達對方),而不要等到自己發(fā)送數(shù)據時才進行捎帶確認
發(fā)送方只要一連收到3個重復確認就立即重傳對方尚未收到的報文段,而不必 繼續(xù)等待設置的重傳計時器到期
作用
由于發(fā)送方盡早重傳未被確認的報文段,因此采用快重傳后可以使整個網絡吞吐量提高約20%
示意圖
當發(fā)送方連續(xù)收到3個重復確認后,就:
執(zhí)行 乘法減小 算法:把 慢開始門限(ssthresh)
設置為 出現(xiàn)擁塞時發(fā)送方窗口值的一半 = 擁塞窗口的1半
將擁塞窗口(cwnd)
值設置為 慢開始門限ssthresh
減半后的數(shù)值 = 擁塞窗口的1半
執(zhí)行 加法增大 算法:執(zhí)行擁塞避免算法,使擁塞窗口緩慢地線性增大。
注:
由于跳過了擁塞窗口
(cwnd)
從1起始的慢開始過程,所以稱為:快恢復此處網絡不會發(fā)生網絡擁塞,因若擁塞,則不會收到多個重復確認報文
原理
為了優(yōu)化慢開始 & 擁塞避免的解決方案,在上述方案中加入快重傳 & 快恢復 2種算法,具體規(guī)則如下
示意圖
至此,關于TCP
無差錯傳輸?shù)闹R講解完畢。
本文全面講解了 計算機網絡中最重要的TCP
協(xié)議,含其特點、三次握手、四次揮手、無差錯傳輸?shù)戎R,相信你們對TCP
協(xié)議已經非常了解