计算机网络-TCP协议
目錄
- 1 概述
- 2 TCP的主要特點(diǎn)
- 3 TCP的連接
- 4 可靠傳輸?shù)墓ぷ髟?/li>
- 4.1 停止等待協(xié)議
- 4.1.1 無差錯(cuò)情況
- 4.1.2 出現(xiàn)差錯(cuò)
- 4.2 自動(dòng)重傳請(qǐng)求ARQ
- 4.3 連續(xù) ARQ 協(xié)議
- 4.3.1 基本思想
- 5 TCP的流量控制
- 6 TCP的擁塞控制
- 7 TCP的運(yùn)輸連接管理
- 8 TCP報(bào)文段的首部格式
1 概述
傳輸控制協(xié)議(TCP,Transmission Control Protocol),它是為了在不可靠的互聯(lián)網(wǎng)絡(luò)上提供可靠的端到端字節(jié)流而專門設(shè)計(jì)的一個(gè)傳輸協(xié)議
2 TCP的主要特點(diǎn)
面向字節(jié)流:
- TCP 中的“流”(stream) 指的是流入或流出進(jìn)程的字節(jié)序列
- “面向字節(jié)流”的含義是:雖然應(yīng)用程序和 TCP 的交互是一次一個(gè)數(shù)據(jù)塊,但 TCP 把應(yīng)用程序交下來的數(shù)據(jù)看成僅僅是一連串無結(jié)構(gòu)的字節(jié)流,也就是說其實(shí)數(shù)據(jù)都是有一定結(jié)構(gòu)的,但是在TCP眼里它都是無結(jié)構(gòu)的字節(jié)串
- TCP 不保證接收方應(yīng)用程序所收到的數(shù)據(jù)塊和發(fā)送方應(yīng)用程序所發(fā)出的數(shù)據(jù)塊具有對(duì)應(yīng)大小的關(guān)系,也就是說發(fā)送方發(fā)送一定規(guī)格和數(shù)量的數(shù)據(jù)塊,接收方不一定最后收到的是同樣規(guī)格和數(shù)量的數(shù)據(jù)塊,但是能保證的是最后得到的數(shù)據(jù),一定是無差錯(cuò)的
- 但接收方應(yīng)用程序收到的字節(jié)流必須和發(fā)送方應(yīng)用程序發(fā)出的字節(jié)流完全一樣,在發(fā)送過程中到底如何分塊,TCP不關(guān)心,TCP只關(guān)心最后數(shù)據(jù)肯定是和發(fā)送方發(fā)送過來的數(shù)據(jù)完全一樣
注意:
3 TCP的連接
TCP的連接是一條點(diǎn)對(duì)點(diǎn)的連接:
套接字我們認(rèn)為是TCP連接的一端,有了兩個(gè)套接字,我們就可以 建立一條TCP連接
4 可靠傳輸?shù)墓ぷ髟?/h1>
4.1 停止等待協(xié)議
TCP協(xié)議是一個(gè)很復(fù)雜的協(xié)議,它在面向連接的基礎(chǔ)上,通過若干控制,可以達(dá)到可靠傳輸,擁塞控制,連接管理等功能
- 在運(yùn)輸層之下的網(wǎng)絡(luò)層,IP協(xié)議能夠做到盡最大努力交付,也就是說IP數(shù)據(jù)報(bào)從一臺(tái)主機(jī)到達(dá)另一臺(tái)主機(jī)是可以通過路由來找到一條合適的路徑到達(dá)對(duì)方,但是最后能不能到達(dá)對(duì)方,中間會(huì)不會(huì)出錯(cuò),這個(gè)IP協(xié)議是不能保證的
- 在IP之上,運(yùn)輸層當(dāng)中的TCP協(xié)議,在連接的基礎(chǔ)之上,可以做到在不可靠的通信鏈路上實(shí)現(xiàn)可靠傳輸
我們可以想象,理想的傳輸條件應(yīng)該具有以下兩個(gè)特點(diǎn):
然而實(shí)際的網(wǎng)絡(luò)都不具備以上兩個(gè)理想條件。必須使用一些可靠傳輸協(xié)議,在不可靠的傳輸信道實(shí)現(xiàn)可靠傳輸,其中停止等待協(xié)議就是其中典型的一個(gè)協(xié)議,
停止等待協(xié)議:
- “停止等待”就是每發(fā)送完一個(gè)分組就停止發(fā)送,等待對(duì)方的確認(rèn)。在收到確認(rèn)后再發(fā)送下一個(gè)分組,對(duì)方確認(rèn)保證了數(shù)據(jù)的無差錯(cuò),由于發(fā)送的數(shù)據(jù)也是按順序發(fā)送的,所有最后數(shù)據(jù)的順序也不會(huì)出現(xiàn)錯(cuò)亂
- 全雙工通信的雙方既是發(fā)送方也是接收方,但為了討論方便,這里僅說明其中一方發(fā)送,另一方接收的情況
4.1.1 無差錯(cuò)情況
4.1.2 出現(xiàn)差錯(cuò)
在接收方 B 會(huì)出現(xiàn)兩種情況:
M1 在傳輸過程中丟失了,這時(shí) B 當(dāng)然什么都不知道,也什么都不做,但A都必須重發(fā)分組,直到B正確接收為止,這樣才能實(shí)現(xiàn)可靠通信,但是此時(shí)又出現(xiàn)了如下問題
問題1:A如何知道 B 是否正確收到了 M1 呢?
解決辦法:超時(shí)重傳
問題2:若分組正確到達(dá)B,但B回送的確認(rèn)丟失或延遲了,A未收到B的確認(rèn),會(huì)超時(shí)重發(fā)。B 可能會(huì)收到重復(fù)的 M1 。B如何知道收到了重復(fù)的分組,需要丟棄呢?
解決辦法:編號(hào)
問題3:若B正確收到了A的報(bào)文,并發(fā)送了確認(rèn)報(bào)文給A,但是這個(gè)確認(rèn)報(bào)文丟失了怎么辦?
解決辦法:超時(shí)重傳
問題4:若B正確收到了A的報(bào)文,并發(fā)送了確認(rèn)報(bào)文給A,但是這個(gè)確認(rèn)報(bào)文遲到了怎么辦?
解決方法:丟棄
注意:
4.2 自動(dòng)重傳請(qǐng)求ARQ
- 通常 A 最終總是可以收到對(duì)所有發(fā)出的分組的確認(rèn)。如果 A 不斷重傳分組但總是收不到確認(rèn),就說明通信線路太差,不能進(jìn)行通信
- 使用上述的確認(rèn)和重傳機(jī)制,我們就可以在不可靠的傳輸網(wǎng)絡(luò)上實(shí)現(xiàn)可靠的通信
- 像上述的這種可靠傳輸協(xié)議常稱為自動(dòng)重傳請(qǐng)求 ARQ (Automatic Repeat reQuest)。意思是重傳的請(qǐng)求是自動(dòng)進(jìn)行的,接收方不需要請(qǐng)求發(fā)送方重傳某個(gè)出錯(cuò)的分組
4.3 連續(xù) ARQ 協(xié)議
通過上述描述,我們發(fā)現(xiàn)若是每次發(fā)送一個(gè)數(shù)據(jù)報(bào),然后等待確認(rèn),這樣信道利用率是非常低的,如下圖所示:
為了提高信道利用率,采用了流水線工作方式,即批量發(fā)送數(shù)據(jù),然后逐個(gè)等待確認(rèn),注意每次發(fā)送數(shù)據(jù)的量是有限制的,如下圖所示:
4.3.1 基本思想
- 發(fā)送方一次可以發(fā)出多個(gè)分組,使用滑動(dòng)窗口協(xié)議控制發(fā)送方和接收方所能發(fā)送和接收的分組的數(shù)量和編號(hào)
滑動(dòng)窗口:
- 位于滑動(dòng)窗口內(nèi)的分組才能夠發(fā)送
- 位于滑動(dòng)窗口內(nèi)的分組才能確認(rèn)接收
- 每收到一個(gè)確認(rèn),發(fā)送方就把發(fā)送窗口向前滑動(dòng)
向前滑動(dòng):
- 接收方一般采用累積確認(rèn)的方式
累積確認(rèn):
- 即不必對(duì)收到的分組逐個(gè)發(fā)送確認(rèn),而是對(duì)按序到達(dá)的最后一個(gè)分組發(fā)送確認(rèn),這樣就表示:到這個(gè)分組為止的所有分組都已正確收到了
- 采用回退N(Go-Back-N)方法進(jìn)行重傳
回退N:
- 如果發(fā)送方發(fā)送了前 5 個(gè)分組,而中間的第 3 個(gè)分組丟失了。這時(shí)接收方只能對(duì)前兩個(gè)分組發(fā)出確認(rèn)。發(fā)送方無法知道后面三個(gè)分組的下落,而只好把后面的三個(gè)分組都再重傳一次
- 這就叫做 Go-back-N(回退 N),表示需要再退回來重傳已發(fā)送過的 N 個(gè)分組
5 TCP的流量控制
- 一般說來,我們總是希望數(shù)據(jù)傳輸?shù)酶煲恍5绻l(fā)送方把數(shù)據(jù)發(fā)送得過快,接收方就可能來不及接收,這就會(huì)造成數(shù)據(jù)的丟失
- 流量控制 (flow control) 就是讓發(fā)送方的發(fā)送速率不要太快,既要讓接收方來得及接收,也不要使網(wǎng)絡(luò)發(fā)生擁塞
- 利用滑動(dòng)窗口機(jī)制可以很方便地在 TCP 連接上實(shí)現(xiàn)流量控制
6 TCP的擁塞控制
- TCP的擁塞控制詳細(xì)內(nèi)容請(qǐng)參考我的這篇文章:計(jì)算機(jī)網(wǎng)絡(luò)-TCP擁塞控制
7 TCP的運(yùn)輸連接管理
- TCP的運(yùn)輸連接管理詳細(xì)內(nèi)容請(qǐng)參考我的這篇文章:計(jì)算機(jī)網(wǎng)絡(luò)-TCP運(yùn)輸連接管理
8 TCP報(bào)文段的首部格式
- 源端口和目的端口字段——各占 2 字節(jié)。端口是運(yùn)輸層與應(yīng)用層的服務(wù)接口。運(yùn)輸層的復(fù)用和分用功能都要通過端口才能實(shí)現(xiàn)
- 序號(hào)字段——占 4 字節(jié)。TCP 連接中傳送的數(shù)據(jù)流中的每一個(gè)字節(jié)都編上一個(gè)序號(hào)。序號(hào)字段的值則指的是本報(bào)文段所發(fā)送的數(shù)據(jù)的第一個(gè)字節(jié)的序號(hào)
序號(hào)字段:
- 現(xiàn)有3000個(gè)字節(jié)的數(shù)據(jù)。假設(shè)報(bào)文段的最大數(shù)據(jù)長(zhǎng)度為1000個(gè)字節(jié),初始序號(hào)為1001
- 報(bào)文段 1 序號(hào) = 1001 (數(shù)據(jù)字節(jié)序號(hào):1001 ~ 2000)
- 報(bào)文段 2 序號(hào) = 2001 (數(shù)據(jù)字節(jié)序號(hào):2001 ~ 3000)
- 報(bào)文段 3 序號(hào) = 3001 (數(shù)據(jù)字節(jié)序號(hào):3001 ~ 4000)
- 確認(rèn)號(hào)字段——占 4 字節(jié),是期望收到對(duì)方的下一個(gè)報(bào)文段的數(shù)據(jù)的第一個(gè)字節(jié)的序號(hào)
- 數(shù)據(jù)偏移(即首部長(zhǎng)度)——占 4 位,它指出 TCP 報(bào)文段的數(shù)據(jù)起始處距離 TCP 報(bào)文段的起始處有多遠(yuǎn)。“數(shù)據(jù)偏移”的單位是 32 位字(以 4 字節(jié)為計(jì)算單位)
- 保留字段——占 6 位,保留為今后使用,但目前應(yīng)置為 0
- 緊急 URG —— 當(dāng) URG = 1 時(shí),表明緊急指針字段有效。它告訴系統(tǒng)此報(bào)文段中有緊急數(shù)據(jù),應(yīng)盡快傳送(相當(dāng)于高優(yōu)先級(jí)的數(shù)據(jù))
- 確認(rèn) ACK —— 只有當(dāng) ACK =1 時(shí)確認(rèn)號(hào)字段才有效。當(dāng) ACK =0 時(shí),確認(rèn)號(hào)無效
- 推送 PSH (PuSH) —— 接收 TCP 收到 PSH = 1 的報(bào)文段,就盡快地交付接收應(yīng)用進(jìn)程,而不再等到整個(gè)緩存都填滿了后再向上交付
- 復(fù)位 RST (ReSeT) —— 當(dāng) RST=1 時(shí),表明 TCP 連接中出現(xiàn)嚴(yán)重差錯(cuò)(如由于主機(jī)崩潰或其他原因),必須釋放連接,然后再重新建立運(yùn)輸連接
- 同步 SYN —— 同步 SYN = 1 表示這是一個(gè)連接請(qǐng)求或連接接受報(bào)文
- 終止 FIN (FINish) —— 用來釋放一個(gè)連接。FIN=1 表明此報(bào)文段的發(fā)送端的數(shù)據(jù)已發(fā)送完畢,并要求釋放運(yùn)輸連接
- 窗口字段 —— 占 2 字節(jié),用來讓對(duì)方設(shè)置發(fā)送窗口的依據(jù),單位為字節(jié)
- 檢驗(yàn)和 —— 占 2 字節(jié)。檢驗(yàn)和字段檢驗(yàn)的范圍包括首部和數(shù)據(jù)這兩部分。在計(jì)算檢驗(yàn)和時(shí),要在 TCP 報(bào)文段的前面加上 12 字節(jié)的偽首部
- 緊急指針字段 —— 占 16 位,指出在本報(bào)文段中緊急數(shù)據(jù)共有多少個(gè)字節(jié)(緊急數(shù)據(jù)放在本報(bào)文段數(shù)據(jù)的最前面)
- 選項(xiàng)字段 —— 長(zhǎng)度可變。TCP 最初只規(guī)定了一種選項(xiàng),即最大報(bào)文段長(zhǎng)度 MSS。MSS 告訴對(duì)方 TCP:“我的緩存所能接收的報(bào)文段的數(shù)據(jù)字段的最大長(zhǎng)度是 MSS 個(gè)字節(jié)。”
- 填充字段 —— 這是為了使整個(gè)首部長(zhǎng)度是 4 字節(jié)的整數(shù)倍
總結(jié)
以上是生活随笔為你收集整理的计算机网络-TCP协议的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机网络-UDP协议
- 下一篇: 计算机网络-TCP拥塞控制