TCP 連接建立

TCP 連接建立

通過三次握手
服務(wù)器 執(zhí)行 LISTEN 和 ACCEPT 原語
然后等待入境連接請求
客戶端 執(zhí)行CONNECT原語 同時希望連接的IP地址與端口 愿意接受的最大TCP段長

以及一些可選的用戶數(shù)據(jù)等參數(shù)
CONNECT原語發(fā)送一個SYN標(biāo)志位置為on和ACK標(biāo)志位置為off的TCP段
然后等待服務(wù)器響應(yīng)

TCP連接釋放

為了釋放一個TCP連接 任意一方都可以發(fā)送一個設(shè)置了FIN標(biāo)志位的TCP段
表示沒有數(shù)據(jù)需要發(fā)送了
當(dāng)FIN段被另一個方向確認(rèn)后 這個方向上的連接就被關(guān)閉 不再發(fā)送任何數(shù)據(jù) 當(dāng)然 另一個方向上或許還在繼續(xù)著無線的數(shù)據(jù)流

當(dāng)兩個方向都關(guān)閉后 連接才算被徹底釋放

TCP 連接管理模型

建立連接和釋放連接所需要的步驟都可以用一個有限狀態(tài)機來表示

CLOSE 沒有活躍的連接或者掛起
LISTEN 服務(wù)器等待入境呼叫
SYN RCVD 到達(dá)一個連接請求; 等待ACK
SYN SEND 應(yīng)用以及啟動了打開一個連接
ESTABLISHEND 正常的數(shù)據(jù)傳送狀態(tài)
FIN WAIT1 應(yīng)用沒有數(shù)據(jù)要發(fā)送
FIN WAIT2 另一端同意釋放連接
TIME WAIT 等待所有數(shù)據(jù)包壽終正寢
CLOSEING 兩段同時試圖關(guān)閉連接
CLOSE WAIT 另一端已經(jīng)發(fā)起關(guān)閉連接
LAST ACK 等待所有數(shù)據(jù)包壽終正寢

TCP滑動窗口

假設(shè)接收端有2K的緩沖區(qū) 發(fā)送端發(fā)送了1K的數(shù)據(jù) 并且該數(shù)據(jù)段被成功接受 那么接收端將確認(rèn)該數(shù)據(jù)段
然而 由于接收端只剩下1K的緩沖區(qū)(在應(yīng)用程序從緩沖區(qū)中取走數(shù)據(jù)之前)
它將宣告下一個期望字節(jié)開始窗口為1K(TCP段頭中包含序號和確認(rèn)號 確認(rèn)號指定下一個期望的字節(jié))

現(xiàn)在發(fā)送端發(fā)送了另一個1K的數(shù)據(jù)段 該段被確認(rèn)了 但是接收端宣告的窗口大小變?yōu)?

因此 發(fā)送端不得不停止發(fā)送 等待接受主機上的應(yīng)用進(jìn)程從緩沖區(qū)中取走一些數(shù)據(jù) 以便接收端重新宣告寫一個期望的字節(jié)和窗口大小

這種數(shù)據(jù)包稱為窗口探測 TCP標(biāo)準(zhǔn)明確提供該選項 以防止窗口更新數(shù)據(jù)包丟失后發(fā)生死鎖

TCP可以緩沖數(shù)據(jù)來提高傳輸性能
當(dāng)直到自己有4K的窗口可用時 當(dāng)接受到2K的數(shù)據(jù)時 可以延遲發(fā)送 等到另一個2K的數(shù)據(jù)到來時
發(fā)送一個包含4KB有效載荷的段

Nagle 算法
第一次發(fā)送數(shù)據(jù)包之后將其余后面的字節(jié)緩沖起來 等到發(fā)送出去的字節(jié)包被確認(rèn)
再將緩沖的字節(jié)包發(fā)送出去 再緩沖接受到的數(shù)據(jù)包
這樣可以大大降低數(shù)據(jù)包發(fā)送所需要的帶寬
因為TCP需要發(fā)送大量的IP數(shù)據(jù)報和TCP頭 而數(shù)據(jù)可能只有一點點

低能窗口綜合癥
Clark
當(dāng)接受端的TCP緩沖區(qū)滿時 發(fā)送方也知道
當(dāng)接收端的TCP緩沖區(qū)擁有了一個字節(jié)的空間時 接收端便會發(fā)送一個窗口更新的字段來告訴發(fā)送端發(fā)送一個字節(jié)的
TCP端 發(fā)送方再次發(fā)送一個字節(jié)來 接收方緩沖區(qū)便又滿了
這將導(dǎo)致效率低下

Clark的解決方案是禁止發(fā)送一個字節(jié)的窗口更新段 并且強制接收端必須等待到擁有了一定數(shù)量
的可用空間后再通告給對方

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 18.1 引言 TCP是一個面向連接的協(xié)議。無論哪一方向另一方發(fā)送數(shù)據(jù)之前,都必須先在雙方之間建立一條連接。本章將...
    張芳濤閱讀 3,427評論 0 13
  • 傳輸層-TCP, TCP頭部結(jié)構(gòu) ,TCP序列號和確認(rèn)號詳解 TCP主要解決下面的三個問題 1.數(shù)據(jù)的可靠傳輸...
    抓兔子的貓閱讀 4,553評論 1 46
  • 1.這篇文章不是本人原創(chuàng)的,只是個人為了對這部分知識做一個整理和系統(tǒng)的輸出而編輯成的,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,134評論 6 174
  • 20.1 引言 在第15章我們看到TFTP使用了停止等待協(xié)議。數(shù)據(jù)發(fā)送方在發(fā)送下一個數(shù)據(jù)塊之前需要等待接收對已發(fā)送...
    張芳濤閱讀 886評論 0 2
  • 其中TCP處理transport層,主要是用來建立可靠的連接。 而建立連接的基礎(chǔ),是他豐富的報文內(nèi)容(md~超級多...
    筆寂曉才閱讀 1,457評論 0 3