[計(jì)算機(jī)網(wǎng)絡(luò)]Ch.6 傳輸層

傳輸層

1 傳輸層功能與簡(jiǎn)介

為什么需要兩個(gè)不同的獨(dú)立控制層

  • 網(wǎng)絡(luò)層運(yùn)行在由運(yùn)營(yíng)商ISP操作的路由器上,用戶無(wú)法控制到這一層
    設(shè)置一個(gè)層位于網(wǎng)絡(luò)層之上可以讓用戶控制服務(wù)質(zhì)量
  • 傳輸層原語(yǔ),是對(duì)網(wǎng)絡(luò)層(網(wǎng)絡(luò)層由于網(wǎng)絡(luò)的不同,會(huì)有不同的原語(yǔ))的抽象宪卿,提供統(tǒng)一接口(便利,降低開(kāi)發(fā)難度)

傳輸層的主要功能
傳輸層是整個(gè)協(xié)議棧(TCP/IP)的核心谦屑,傳輸層的任務(wù)是提供可靠的甫贯、高效的數(shù)據(jù)傳輸

  • 傳輸服務(wù):(面向連接面向無(wú)連接
  • 在該層還需對(duì)字節(jié)流進(jìn)行數(shù)據(jù)分段(塊)和重組
  • 保證數(shù)據(jù)可靠傳輸和進(jìn)行流量控制
  • 建立端到端的操作;【端點(diǎn)實(shí)質(zhì)是機(jī)器上的套接字】
  • 從一端主機(jī)向另一端主機(jī)發(fā)送數(shù)據(jù)段

傳輸層使整個(gè)報(bào)文到達(dá)了該計(jì)算機(jī)上正確的進(jìn)程
傳輸層的最終目標(biāo)是向它的用戶(應(yīng)用層)提供高效蔼两、可靠和性價(jià)比高的服務(wù)【例如從一臺(tái)主機(jī)到另一臺(tái)主機(jī)的報(bào)文到底送給這臺(tái)機(jī)器的email去解析甩鳄,還是送給播放器播放,還是瀏覽器解析】

  • 雖然與鏈路層相似(流控制额划、差錯(cuò)控制妙啃、報(bào)文排序),但傳輸環(huán)境不同(傳輸層-通信子網(wǎng)俊戳,鏈路層-物理信道)

1.1 簡(jiǎn)單的傳輸層服務(wù)原語(yǔ):

image.png

1.2 傳輸層的數(shù)據(jù)傳輸單元(PDU)是TPDU

image.png

2 傳輸層協(xié)議

2.1 UDP

  • UDP 是一個(gè)無(wú)連接的(connectionless)的傳輸層協(xié)議
  • 提供端點(diǎn)標(biāo)識(shí)揖赴,端到端的數(shù)據(jù)傳輸
  • 不提供差錯(cuò)檢測(cè)和可靠傳輸。但簡(jiǎn)潔高效

端口(port)定義
16 位品抽,共有 216個(gè)端口
端口范圍:0~65535
<1023 : 用于公共應(yīng)用(保留储笑,全局分配,用于標(biāo)準(zhǔn)服務(wù)器)圆恤,IANA分配突倍;
1024~49151 :用戶端口,注冊(cè)端口盆昙;
> 49152 : 動(dòng)態(tài)端口羽历,私人端口。

2.1.1 UDP校驗(yàn)和

image.png
image.png

2.2 TCP(傳輸控制協(xié)議)

TCP (Transmission Control Protocol) 是專(zhuān)門(mén)為了在不可靠的互聯(lián)網(wǎng)絡(luò)上提供可靠的端到端字節(jié)流而設(shè)計(jì)的
TCP必須動(dòng)態(tài)地適應(yīng)不同的拓?fù)涞病掞趿住⒀舆t、分組大小和其它的參數(shù)炼团,并且當(dāng)有錯(cuò)誤的時(shí)候澎嚣,能夠足夠健壯

TCP服務(wù)模型:

  • 要想獲得TCP服務(wù),發(fā)送方和接收方必須創(chuàng)建一種稱(chēng)為套接字( sockets )的端點(diǎn)( end points)
  • 每個(gè)套接字是包含一個(gè)IP地址和一個(gè)16位的端口( port )
  • 通信進(jìn)程的全球唯一標(biāo)識(shí)
    ·三元組:協(xié)議瘟芝、本地地址易桃、本地端口號(hào)
    ·五元組:協(xié)議、本地地址锌俱、本地端口號(hào)晤郑、遠(yuǎn)端地址、遠(yuǎn)端端口號(hào)
  • 所有的 TCP 連接是全雙工的(同時(shí)雙向傳輸)和端到端的(每條連接只有兩個(gè)端點(diǎn))
  • TCP 不支持組播和廣播
  • TCP連接是字節(jié)流而不是消息流

2.2.1 tcp數(shù)據(jù)段頭

image.png
  • 源端口目的端口字段標(biāo)明了一個(gè)連接的兩個(gè)端點(diǎn)
  • 序列號(hào)– 字節(jié)號(hào) (32 位)
    ·初始序列號(hào)(ISNs) 隨機(jī)產(chǎn)生
    ·SYN :攜帶了ISNs和SYN控制位的數(shù)據(jù)段
  • 確認(rèn)號(hào) – 期望接收的字節(jié)號(hào)(32位)
  • TCP 段頭長(zhǎng)度 – TCP段頭長(zhǎng)度贸宏,單位32位
2.2.1.1數(shù)據(jù)段頭解釋

image.png

保留域/字段

  • PSH表示這是帶有PUSH標(biāo)志的數(shù)據(jù)(接收方收到這樣的數(shù)據(jù)造寝,應(yīng)該立刻送到上層,而不需要緩存它)

  • RST 被用來(lái)重置一個(gè)已經(jīng)混亂的連接

  • SYN用在連接建立的過(guò)程
    ·當(dāng)SYN=1吭练,ACK=0诫龙, 連接請(qǐng)求
    ·當(dāng)SYN=1,ACK=1鲫咽, 連接接受

  • FIN 被用來(lái)釋放連接赐稽,它表示發(fā)送方已經(jīng)沒(méi)有數(shù)據(jù)要傳輸了叫榕,但是可以繼續(xù)接收數(shù)據(jù).

  • Windowsize – 告訴對(duì)方可以發(fā)送的數(shù)據(jù)字節(jié)數(shù)(從確認(rèn)字節(jié)號(hào)開(kāi)始(決定于接收方))【流控】

  • Checksum –提供額外的可靠性校驗(yàn)的范圍包括頭部、數(shù)據(jù)和概念性的偽頭部

TCP頭部范圍(5x4B15x4B(最大數(shù)值))--(20B60B)

2.2.2 TCP建立連接-三次握手

  • 一方(server)被動(dòng)地等待一個(gè)進(jìn)來(lái)的連接請(qǐng)求
  • 另一方(the client)通過(guò)發(fā)送連接請(qǐng)求姊舵,設(shè)置一些參數(shù)
  • 服務(wù)器方回發(fā)確認(rèn)應(yīng)答
  • 應(yīng)答到達(dá)請(qǐng)求方晰绎,請(qǐng)求方最后確認(rèn),連接建立


    image.png
image.png
image.png
  • 正常情況下括丁,發(fā)送TCP端順序如a所示
  • 兩主機(jī)同時(shí)企圖在一對(duì)套接字之間建立連接荞下,結(jié)果恰好只建立了一個(gè)連接,表項(xiàng)為(x史飞,y)
    SYN泛洪
    `惡意發(fā)送SYN段請(qǐng)求服務(wù)器的連接尖昏,但又故意不完成連接建立的后續(xù)服務(wù),以此消耗一臺(tái)主機(jī)的資源构资。

2.2.3 TCP 連接釋放(四次揮手)

釋放連接

  • 任何一方在沒(méi)有數(shù)據(jù)要傳送的時(shí)候抽诉,都可以發(fā)送一個(gè)FIN置位了的 TCP 數(shù)據(jù)段
  • 當(dāng)FIN被確認(rèn)的時(shí)候,該方向的連接被關(guān)閉
  • 當(dāng)雙向連接都關(guān)閉了的時(shí)候吐绵,連接釋放

兩軍隊(duì)問(wèn)題

image.png

  • B2向B1發(fā)送今晚十二點(diǎn)一起發(fā)起總進(jìn)攻【合作才能打敗白軍隊(duì)】
  • B1收到后迹淌,不知B2是否會(huì)沖下去【因?yàn)锽2不知道B1是否收到信】,所以發(fā)送確認(rèn)郵件給B2(讓其今晚十二點(diǎn)也沖下去)【如果只有B1沖下去肯定失敗】
  • B2收到郵件己单,但不知道B1是否知道自己收到郵件【B1如果因?yàn)椴恢雷约菏欠袷盏桨η裕桓覜_下去,那自己沖下去也是輸】纹笼。保險(xiǎn)起見(jiàn)纹份,發(fā)送給B1【我收到了你的信,咱們今晚一起沖下去】

難題在于最后發(fā)送的一方永遠(yuǎn)無(wú)法知道自己的信對(duì)方有無(wú)收到廷痘。

為了避免兩軍隊(duì)(two-army)問(wèn)題蔓涧,使用定時(shí)器

  • 如果一方發(fā)送了FIN數(shù)據(jù)段出去卻在一個(gè)設(shè)定的時(shí)間沒(méi)有收到應(yīng)答,釋放連接
  • 另一方最終會(huì)注意到連接的對(duì)方已經(jīng)不在了笋额,超時(shí)后連接釋放

半開(kāi)放連接(half- open)

  • 發(fā)送者將放棄發(fā)送且釋放連接蠢笋,
    但是,另外一端卻不知道這些情況【初始DR鳞陨、重傳都丟失】,仍然處于活躍的狀態(tài)
  • 殺死半開(kāi)放連接的方式:如果在一定的時(shí)間內(nèi)瞻惋,沒(méi)有TPDUs 到達(dá)的話厦滤,連接自動(dòng)釋放
    ·這個(gè)TPDU是啞TPDU(dummy TPDU)

TCP是全雙工的,連接必須是雙向的歼狼。半開(kāi)半閉的連接必須殺掉

2.2.4 TCP滑窗技術(shù)與傳輸策略

image.png
image.png

TCP 傳輸策略
發(fā)送方(Nagle’s algorithm)

  • 盡量不發(fā)送數(shù)據(jù)含量小的數(shù)據(jù)段
  • 緩存應(yīng)用層的數(shù)據(jù)掏导,達(dá)到一定量再發(fā)送

接收方(Clark’s solution)

  • 不請(qǐng)求對(duì)方發(fā)送短數(shù)據(jù)段(window size)
  • 延遲窗口變更信息,使接收緩沖區(qū)足夠大

2.2.5 TCP擁塞控制

分組守恒:當(dāng)有一個(gè)老的分組離開(kāi)之后才允許新的分組注入網(wǎng)絡(luò)
TCP希望通過(guò)動(dòng)態(tài)維護(hù)窗口大小來(lái)實(shí)現(xiàn)這個(gè)目標(biāo)

擁塞檢測(cè)Congestiondetection擁塞標(biāo)記
所有的互聯(lián)網(wǎng)TCP算法都假定超時(shí)由擁塞引起的羽峰,并且通過(guò)監(jiān)視超時(shí)的情況來(lái)判斷是否出現(xiàn)問(wèn)題

image.png

擁塞控制Congestionprevention

  • 當(dāng)一個(gè)連接建立的時(shí)候趟咆,雙方選擇一個(gè)合適的窗口大小添瓷,接收方根據(jù)自己的緩沖區(qū)大小來(lái)指定窗口的大小。
  • 如果發(fā)送者遵守此窗口大小的限制值纱,則接收端不會(huì)出現(xiàn)緩沖區(qū)溢出的問(wèn)題鳞贷,但可能由于網(wǎng)絡(luò)內(nèi)部的擁塞而發(fā)生問(wèn)題


    image.png
2.2.5.1 決定擁塞窗口大小的算法:

慢啟動(dòng)算法(Slow Start) (嘗試的過(guò)程):

  • 當(dāng)連接建立的時(shí)候,發(fā)送者用當(dāng)前使用的最大數(shù)據(jù)段長(zhǎng)度初始化擁塞窗口虐唠,然后發(fā)送一個(gè)最大的數(shù)據(jù)段
  • 如果在定時(shí)器超期之前收到確認(rèn)搀愧,則將擁塞窗口翻倍,然后發(fā)送兩個(gè)數(shù)據(jù)段疆偿。咱筛。。杆故。迅箩。直至超時(shí)(或達(dá)到接收方窗口的大小)
  • 確定出擁塞窗口的大小

如:如果試圖發(fā)送 4096 字節(jié)沒(méi)有問(wèn)題处铛,但是發(fā)送8192字節(jié)的時(shí)候饲趋,超時(shí)沒(méi)有收到應(yīng)答,則擁塞窗口設(shè)為4096個(gè)字節(jié)

image.png
image.png

2.2.6 定時(shí)器的作用

最重要的定時(shí)器是重傳定時(shí)器

持續(xù)定時(shí)器(persistence timer)罢缸,用來(lái)避免如下的死鎖( deadlock )發(fā)生

  • 接收方發(fā)送了一個(gè)窗口數(shù)為零的確認(rèn)(窗口更新)篙贸,告訴發(fā)送方等待
  • 稍后,接收方空出了緩沖枫疆,發(fā)送更新窗口的數(shù)據(jù)段爵川,但是,很不幸息楔,該分組丟失啦寝贡!
  • 現(xiàn)在,收發(fā)雙方都在等待對(duì)方發(fā)送數(shù)據(jù)段過(guò)來(lái)值依,但永遠(yuǎn)等不到圃泡!死鎖產(chǎn)生


    image.png

保活定時(shí)器(keep-alive timer)

  • 用來(lái)檢查連接是否存活愿险,當(dāng)一個(gè)連接空閑的時(shí)間超過(guò)逼睦活定時(shí)器的時(shí)間,該連接將被殺掉
  • 最后一個(gè)定時(shí)器是在關(guān)閉時(shí)刻處于TIMED WAIT 狀態(tài)中使用的定時(shí)器辆亏,它運(yùn)行兩倍的最大分組生存時(shí)間风秤,以確保連接關(guān)閉之后,該連接上的所有分組都完全消失

3 TCP UDP比較

TCP

  • 可靠傳輸方式
  • 可讓?xiě)?yīng)用程序簡(jiǎn)單化扮叨,程序員可以不必進(jìn)行錯(cuò)誤檢查缤弦、修正等工作
    UDP
  • 為了降低對(duì)計(jì)算機(jī)資源的需求,如DNS
  • 應(yīng)用程序本身已提供數(shù)據(jù)完整性的檢查機(jī)制彻磁,勿須依賴傳輸層的協(xié)議來(lái)保證
  • 應(yīng)用程序傳輸?shù)牟⒎顷P(guān)鍵性的數(shù)據(jù)碍沐,如路由器周期性的路由信息交換
  • 一對(duì)多方式狸捅,必須使用UDP(TCP限于一對(duì)一的傳送),如視頻傳播
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末累提,一起剝皮案震驚了整個(gè)濱河市尘喝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌刻恭,老刑警劉巖瞧省,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異鳍贾,居然都是意外死亡鞍匾,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)骑科,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)橡淑,“玉大人,你說(shuō)我怎么就攤上這事咆爽×禾模” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵斗埂,是天一觀的道長(zhǎng)符糊。 經(jīng)常有香客問(wèn)我,道長(zhǎng)呛凶,這世上最難降的妖魔是什么男娄? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮漾稀,結(jié)果婚禮上模闲,老公的妹妹穿的比我還像新娘。我一直安慰自己崭捍,他們只是感情好尸折,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著殷蛇,像睡著了一般实夹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上粒梦,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天亮航,我揣著相機(jī)與錄音,去河邊找鬼谍倦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛泪勒,可吹牛的內(nèi)容都是我干的昼蛀。 我是一名探鬼主播宴猾,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼叼旋!你這毒婦竟也來(lái)了仇哆?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤夫植,失蹤者是張志新(化名)和其女友劉穎讹剔,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體详民,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡延欠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了沈跨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片由捎。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖饿凛,靈堂內(nèi)的尸體忽然破棺而出狞玛,到底是詐尸還是另有隱情,我是刑警寧澤涧窒,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布心肪,位于F島的核電站,受9級(jí)特大地震影響纠吴,放射性物質(zhì)發(fā)生泄漏硬鞍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一呜象、第九天 我趴在偏房一處隱蔽的房頂上張望膳凝。 院中可真熱鬧,春花似錦恭陡、人聲如沸蹬音。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)著淆。三九已至,卻和暖如春拴疤,著一層夾襖步出監(jiān)牢的瞬間永部,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工呐矾, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留苔埋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓蜒犯,卻偏偏與公主長(zhǎng)得像组橄,于是被迫代替她去往敵國(guó)和親荞膘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

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