日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

计算机网络-TCP协议

發(fā)布時(shí)間:2025/6/17 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机网络-TCP协议 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

  • 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é)議

  • 我們可以作這樣一個(gè)類比,TCP的工作過程,就像是打電話,在打電話時(shí)首先要進(jìn)行撥號(hào),對(duì)方接通之后才能進(jìn)行通話,若是對(duì)方忙或者其他不能接聽的情況,不能建立連接,雙方也就不能進(jìn)行通話,TCP也是如此,只有連接建立之后才能進(jìn)行通信
  • 打電話通話過程中同時(shí)能夠進(jìn)行聽和說,TCP也是如此,能同時(shí)進(jìn)行收發(fā)數(shù)據(jù)的操作,也就是TCP支持全雙工通信
  • 打完電話,任何一方掛斷,就能結(jié)束本次通話,而TCP在傳輸完數(shù)據(jù)之后,也是要釋放連接的
  • 2 TCP的主要特點(diǎn)

  • TCP 是面向連接的運(yùn)輸層協(xié)議,傳輸數(shù)據(jù)之前,一定要建立連接并保持連接,傳輸完成也要釋放連接
  • 每一條 TCP 連接只能有兩個(gè)端點(diǎn) (endpoint),每一條 TCP 連接只能是點(diǎn)對(duì)點(diǎn)的(一對(duì)一)(UDP是可以一對(duì)一、一對(duì)多、多對(duì)一和多對(duì)多的交互通信)
  • TCP 提供可靠交付的服務(wù),能保證數(shù)據(jù)傳輸時(shí)沒有差錯(cuò)的,順序也是對(duì)的
  • TCP 提供全雙工通信,可以同時(shí)進(jìn)行收發(fā)數(shù)據(jù)的操作
  • TCP是面向字節(jié)流
  • 面向字節(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ù)完全一樣

    注意:

  • TCP 連接是一條虛連接而不是一條真正的物理連接
  • TCP 對(duì)應(yīng)用進(jìn)程一次把多長(zhǎng)的報(bào)文發(fā)送到 TCP 的緩存中是不關(guān)心的
  • TCP 根據(jù)對(duì)方給出的窗口值和當(dāng)前網(wǎng)絡(luò)擁塞的程度來決定一個(gè)報(bào)文段應(yīng)包含多少個(gè)字節(jié)(UDP 發(fā)送的報(bào)文長(zhǎng)度是應(yīng)用進(jìn)程給出的,不管給出多長(zhǎng),UDP都不進(jìn)行合并、拆分等操作)
  • TCP 可把太長(zhǎng)的數(shù)據(jù)塊劃分短一些再傳送,TCP 也可等待積累有足夠多的字節(jié)后再構(gòu)成報(bào)文段發(fā)送出去
  • 3 TCP的連接

    TCP的連接是一條點(diǎn)對(duì)點(diǎn)的連接:

  • TCP 把連接作為最基本的抽象,每一條 TCP 連接有兩個(gè)端點(diǎn)
  • TCP 連接的端點(diǎn)不是主機(jī),不是主機(jī)的IP 地址,不是應(yīng)用進(jìn)程,也不是運(yùn)輸層的協(xié)議端口。TCP 連接的端點(diǎn)叫做套接字 (socket) 或插口
  • 端口號(hào)拼接到 (contatenated with) IP 地址即構(gòu)成了套接字

    套接字我們認(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):

  • 傳輸信道不產(chǎn)生差錯(cuò),也就是傳輸過程中,數(shù)據(jù)的比特不會(huì)因?yàn)楦蓴_出現(xiàn)任何差錯(cuò)
  • 不管發(fā)送方以多快的速度發(fā)送數(shù)據(jù),接收方總是來得及處理收到的數(shù)據(jù)
  • 然而實(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)兩種情況:

  • B 接收 M1 時(shí)檢測(cè)出了差錯(cuò),就丟棄 M1,其他什么也不做(不通知 A 收到有差錯(cuò)的分組)
  • M1 在傳輸過程中丟失了,這時(shí) B 當(dāng)然什么都不知道,也什么都不做
  • M1 在傳輸過程中丟失了,這時(shí) B 當(dāng)然什么都不知道,也什么都不做,但A都必須重發(fā)分組,直到B正確接收為止,這樣才能實(shí)現(xiàn)可靠通信,但是此時(shí)又出現(xiàn)了如下問題


    問題1:A如何知道 B 是否正確收到了 M1 呢?
    解決辦法超時(shí)重傳

  • A 為每一個(gè)已發(fā)送的分組都設(shè)置了一個(gè)超時(shí)計(jì)時(shí)器
  • A 只要在超時(shí)計(jì)時(shí)器到期之前收到了相應(yīng)的確認(rèn),就撤銷該超時(shí)計(jì)時(shí)器,繼續(xù)發(fā)送下一個(gè)分組 M2
  • 若A在超時(shí)計(jì)時(shí)器規(guī)定時(shí)間內(nèi)沒有收到B的確認(rèn),就認(rèn)為分組錯(cuò)誤或丟失,就重發(fā)該分組

  • 問題2:若分組正確到達(dá)B,但B回送的確認(rèn)丟失或延遲了,A未收到B的確認(rèn),會(huì)超時(shí)重發(fā)。B 可能會(huì)收到重復(fù)的 M1 。B如何知道收到了重復(fù)的分組,需要丟棄呢?
    解決辦法編號(hào)

  • A為每一個(gè)發(fā)送的分組都進(jìn)行編號(hào)。若B收到了編號(hào)相同的分組,則認(rèn)為收到了重復(fù)分組,丟棄重復(fù)的分組,并回送確認(rèn)
  • B為發(fā)送的確認(rèn)也進(jìn)行編號(hào),指示該確認(rèn)是對(duì)哪一個(gè)分組的確認(rèn)
  • A根據(jù)確認(rèn)及其編號(hào),可以確定它是對(duì)哪一個(gè)分組的確認(rèn),避免重發(fā)發(fā)送。若為重復(fù)的確認(rèn),則將其丟棄

  • 問題3:若B正確收到了A的報(bào)文,并發(fā)送了確認(rèn)報(bào)文給A,但是這個(gè)確認(rèn)報(bào)文丟失了怎么辦?
    解決辦法超時(shí)重傳

  • 若 B 所發(fā)送的對(duì) M1 的確認(rèn)丟失了,那么 A 在設(shè)定的超時(shí)重傳時(shí)間內(nèi)不能收到確認(rèn),但 A 并無法知道:是自己發(fā)送的分組出錯(cuò)、丟失了,或者 是 B 發(fā)送的確認(rèn)丟失了。因此 A 在超時(shí)計(jì)時(shí)器到期后就要重傳 M1
  • 假定 B 又收到了重傳的分組 M1。這時(shí) B 應(yīng)采取兩個(gè)行動(dòng):第一,丟棄這個(gè)重復(fù)的分組 M1,不向上層交付,第二,向 A 發(fā)送確認(rèn)。不能認(rèn)為已經(jīng)發(fā)送過確認(rèn)就不再發(fā)送,因?yàn)?A 之所以重傳 M1 就表示 A 沒有收到對(duì) M1 的確認(rèn)

  • 問題4:若B正確收到了A的報(bào)文,并發(fā)送了確認(rèn)報(bào)文給A,但是這個(gè)確認(rèn)報(bào)文遲到了怎么辦?
    解決方法丟棄

  • A 會(huì)收到重復(fù)的確認(rèn)。對(duì)重復(fù)的確認(rèn)的處理很簡(jiǎn)單:收下后就丟棄
  • B 仍然會(huì)收到重復(fù)的 M1,并且同樣要丟棄重復(fù)的 M1,并重傳確認(rèn)分組

  • 注意

  • 在發(fā)送完一個(gè)分組后,必須暫時(shí)保留已發(fā)送的分組的副本,以備重發(fā)
  • 分組和確認(rèn)分組都必須進(jìn)行編號(hào),超時(shí)計(jì)時(shí)器的重傳時(shí)間應(yīng)當(dāng)比數(shù)據(jù)在分組傳輸?shù)钠骄禃r(shí)間更長(zhǎng)一些
  • 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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。