久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1861|回復(fù): 0
收起左側(cè)

TCP 的數(shù)據(jù)流

[復(fù)制鏈接]
ID:107189 發(fā)表于 2016-3-6 00:06 | 顯示全部樓層 |閱讀模式
     TCP的數(shù)據(jù)流大致可以分為兩類(lèi),交互數(shù)據(jù)流與成塊的數(shù)據(jù)流。交互數(shù)據(jù)流就是發(fā)送控制命令的數(shù)據(jù)流,比如relogintelnetftp命令等等;成塊數(shù)據(jù)流是用來(lái)發(fā)送數(shù)據(jù)的包,網(wǎng)絡(luò)上大部分的TCP包都是這種包。
       很明顯,TCP在傳輸這兩種類(lèi)型的包時(shí)的效率是不一樣的,因此為了提高TCP的傳輸效率,應(yīng)該對(duì)這兩種類(lèi)型的包采用不同的算法。
       總之,TCP的傳輸原則是盡量減少小分組傳輸?shù)臄?shù)量。
TCP的交互式數(shù)據(jù)流
Ø         經(jīng)受時(shí)延的確認(rèn)技術(shù)
TCP的交互式數(shù)據(jù)流通常使用“經(jīng)過(guò)時(shí)延的確認(rèn)”技術(shù)。通常Server在接收到從Client發(fā)送過(guò)來(lái)的數(shù)據(jù)時(shí),并不馬上發(fā)送ACK,而是等一小段時(shí)間,看看本機(jī)是否有數(shù)據(jù)要反饋給Client,如果有,就將數(shù)據(jù)包含在此ACK包中,以前發(fā)送給Client。一般情況下這個(gè)時(shí)延為200ms。需要注意的時(shí)這個(gè)200ms的定時(shí)器時(shí)相對(duì)于內(nèi)核的時(shí)鐘滴答的,也就是jeffs的。加入一個(gè)數(shù)據(jù)分組到達(dá)后,此定時(shí)器已經(jīng)pass100ms,那么再過(guò)100ms ACK才會(huì)被發(fā)送,如果在這100ms內(nèi)有數(shù)據(jù)要反饋,則在100msACK會(huì)和數(shù)據(jù)一起發(fā)送。
      
Ø         Nagle算法分析。
Nagle算法主要用來(lái)預(yù)防小分組的產(chǎn)生。在廣域網(wǎng)上,大量TCP小分組極有可能造成網(wǎng)絡(luò)的擁塞。
       Nagle時(shí)針對(duì)每一個(gè)TCP連接的。它要求一個(gè)TCP連接上最多只能有一個(gè)未被確認(rèn)的小分組。在改分組的確認(rèn)到達(dá)之前不能發(fā)送其他小分組。TCP會(huì)搜集這些小的分組,然后在之前小分組的確認(rèn)到達(dá)后將剛才搜集的小分組合并發(fā)送出去。
       有時(shí)候我們必須要關(guān)閉Nagle算法,特別是在一些對(duì)時(shí)延要求較高的交互式操作環(huán)境中,所有的小分組必須盡快發(fā)送出去。
       我們可以通過(guò)編程取消Nagle算法,利用TCP_NODELAY選項(xiàng)來(lái)關(guān)閉Nagle算法。
TCP成塊數(shù)據(jù)流
       TCP成塊數(shù)據(jù)流相關(guān)的東西有很多,比如流量控制,緊急數(shù)據(jù)傳輸,數(shù)據(jù)窗口大小調(diào)整等等。
Ø         正常數(shù)據(jù)流
TCP通常不會(huì)對(duì)每個(gè)到達(dá)的數(shù)據(jù)分段進(jìn)行確認(rèn)操作,通常一個(gè)ACK報(bào)文可以確認(rèn)多個(gè)成塊數(shù)據(jù)段報(bào)文,通常情況下是兩個(gè)成塊數(shù)據(jù)報(bào)文段需要一個(gè)ACK報(bào)文確認(rèn)。通常是由下面的原有造成的 :當(dāng)收到一個(gè)報(bào)文后,此TCP連接被標(biāo)識(shí)未一個(gè)未完成的時(shí)延確認(rèn),當(dāng)再次收到一個(gè)數(shù)據(jù)報(bào)文后,此連接有兩個(gè)未確認(rèn)的報(bào)文段,TCP馬上發(fā)送一個(gè)ACK,當(dāng)?shù)谌齻(gè)數(shù)據(jù)報(bào)文到達(dá)后,第四個(gè)報(bào)文到達(dá)前,通常此TCP連接已經(jīng)經(jīng)過(guò)了200ms延時(shí),因此一個(gè)ACK被發(fā)送,這樣的循環(huán)周而復(fù)始,從而出現(xiàn)了一個(gè)ACK確認(rèn)兩個(gè)數(shù)據(jù)報(bào)文的情況。當(dāng)然,ACK的產(chǎn)生很大程度上和其接收數(shù)據(jù)報(bào)文段的時(shí)間緊密相關(guān),也就是和Client段發(fā)送數(shù)據(jù)的頻率相關(guān),和網(wǎng)絡(luò)擁塞程度相關(guān),和ClientServer兩端的處理能力相關(guān),總是是一個(gè)多因素決定的結(jié)果。
Ø         TCP的滑動(dòng)窗口協(xié)議
TCP使用滑動(dòng)窗口協(xié)議來(lái)進(jìn)行流量控制。特別需要注意的是,滑動(dòng)窗口是一個(gè)抽象的概念,它是針對(duì)每一個(gè)TCP連接的,而且是有方向的,一個(gè)TCP連接應(yīng)該有兩個(gè)滑動(dòng)窗口,每個(gè)數(shù)據(jù)傳輸方向上有一個(gè),而不是針對(duì)連接的每一端的。
窗口左邊沿向右邊滑動(dòng)叫做窗口合攏,表示發(fā)送方發(fā)送了數(shù)據(jù)或者接收到了確認(rèn);窗口右邊沿向右邊滑動(dòng)叫做窗口的張開(kāi),表示數(shù)據(jù)已經(jīng)被用戶空間進(jìn)程接收并且釋放了緩存;窗口左邊沿向左移動(dòng)則表明此ACK是重復(fù)ACK,應(yīng)該丟棄;窗口右邊沿向左移動(dòng)叫做窗口收縮,一般不會(huì)有人這樣做。
當(dāng)左邊沿和右邊沿重合的時(shí)候表明窗口大小是0,此時(shí)發(fā)送方不應(yīng)該在發(fā)送數(shù)據(jù)了,因?yàn)榻邮辗降慕邮站彌_區(qū)已滿,用戶進(jìn)程還沒(méi)以接收。當(dāng)用戶進(jìn)程接收完成后,接收方應(yīng)該發(fā)送一個(gè)ACK,表明此時(shí)的接收窗口已經(jīng)恢復(fù),此ACK的序號(hào)同前一個(gè)win0ACK相同。
同樣,在實(shí)現(xiàn)中,發(fā)送方不必發(fā)送一個(gè)全窗口的數(shù)據(jù),但是它當(dāng)然可以這樣做。ACK總是將窗口向右邊滑動(dòng),窗口的大小可以減小,接收方在發(fā)送ACK之前不必等待窗口被填滿(即變?yōu)?font face="Times New Roman">0),很多實(shí)現(xiàn)是收到兩個(gè)數(shù)據(jù)報(bào)文段后立刻發(fā)送ACK
Ø         TCP窗口大小的調(diào)整
TCP窗口的大小通常由接收端來(lái)確認(rèn),也就是在TCP建立連接的第二個(gè)SYN+ACK報(bào)文的Win字段來(lái)確認(rèn)。
當(dāng)然,程序可以隨時(shí)改變這個(gè)窗口(緩存)的大小。默認(rèn)的窗口大小是4096字節(jié),但是對(duì)于文件傳輸來(lái)說(shuō)這并不是一個(gè)理想的數(shù)字,如果程序的主要目的是傳輸文件,那么最好將這個(gè)緩存設(shè)置到最大,但是這樣可能會(huì)造成發(fā)送端連續(xù)發(fā)送多個(gè)數(shù)據(jù)報(bào)文段后,接收方才反饋一個(gè)ACK的情況,當(dāng)然,這也沒(méi)有什么不可以的,只要不超時(shí),就不算錯(cuò)。
Ø         TCPPUSH
PUSHTCP報(bào)頭中的一個(gè)標(biāo)志位,發(fā)送方在發(fā)送數(shù)據(jù)的時(shí)候可以設(shè)置這個(gè)標(biāo)志位。該標(biāo)志通知接收方將接收到的數(shù)據(jù)全部提交給接收進(jìn)程。這里所說(shuō)的數(shù)據(jù)包括與此PUSH包一起傳輸?shù)臄?shù)據(jù)以及之前就為該進(jìn)程傳輸過(guò)來(lái)的數(shù)據(jù)。
當(dāng)Server端收到這些數(shù)據(jù)后,它需要立刻將這些數(shù)據(jù)提交給應(yīng)用層進(jìn)程,而不再等待是否還有額外的數(shù)據(jù)到達(dá)。
那么應(yīng)該合適設(shè)置PUSH標(biāo)志呢?實(shí)際上現(xiàn)在的TCP協(xié)議棧基本上都可以自行處理這個(gè)問(wèn)題,而不是交給應(yīng)用層處理。如果待發(fā)送的數(shù)據(jù)會(huì)清空發(fā)送緩存,那么棧就會(huì)自動(dòng)為此包設(shè)置PUSH標(biāo)志,源于BSD的棧一般都會(huì)這么做,而且,BSD TCP STACK也從來(lái)不會(huì)將收到的數(shù)據(jù)推遲提交給應(yīng)用程序,因此,在BSD TCP STACK中,PUSH位是被忽略的,因?yàn)楦揪蜎](méi)有用。
Ø         TCP的慢啟動(dòng)(擁塞窗口)
TCP在局域網(wǎng)環(huán)境中的效率是很高的,但是到了廣域網(wǎng)的環(huán)境中情況就不同了,在發(fā)送方和接收方之間可能存在多個(gè)Router以及一些速率比較慢的鏈路,而且一些中繼路由器必須緩存分組,還可能分片,所以在廣域網(wǎng)的環(huán)境中,TCP的效率可能出現(xiàn)問(wèn)題。
為了解決這個(gè)問(wèn)題,現(xiàn)在的TCP棧都支持“慢啟動(dòng)”算法,即擁塞窗口控制算法。該算法通過(guò)觀察到新分組進(jìn)入網(wǎng)絡(luò)的速率與另一端返回ACK的速率相同而工作。其實(shí),擁塞窗口是發(fā)送方使用的一種流量控制算法。
慢啟動(dòng)為TCP的發(fā)送方增加了一個(gè)擁塞窗口,當(dāng)連接建立時(shí),擁塞窗口被初始化為一個(gè)報(bào)文段大小,每收到一個(gè)ACK,擁塞窗口就會(huì)增加一個(gè)報(bào)文段,發(fā)送方取擁塞窗口與通過(guò)窗口的最小值作為發(fā)送的上限。
Ø         TCP成塊數(shù)據(jù)吞吐量
TCP窗口大小,窗口流量控制,慢啟動(dòng)對(duì)TCP的成塊數(shù)據(jù)傳輸綜合作用,可能對(duì)TCP的數(shù)據(jù)傳輸有意想不到的影響。
       RTTRound-Trip Time :往返時(shí)間。是指一個(gè)報(bào)文段從發(fā)出去到收到此報(bào)文段的ACK所經(jīng)歷的時(shí)間。通常一個(gè)報(bào)文段的RTT與傳播時(shí)延和發(fā)送時(shí)延兩個(gè)因素相關(guān)。
       在發(fā)送的過(guò)程中有可能發(fā)生這樣的情況,即TCP兩端的傳輸“管道”被填滿,即整個(gè)管道上都有數(shù)據(jù)在跑,此時(shí)不管擁塞窗口和通告窗口是多少,管道上都不能在容納更多的數(shù)據(jù)了。此時(shí)每當(dāng)接收方從網(wǎng)絡(luò)上移去一個(gè)報(bào)文段,發(fā)送方就發(fā)送一個(gè),但是管道上的ACK總是固定的,這種情況就是連接的理想穩(wěn)定狀態(tài)。
       一般情況下帶寬*時(shí)延就是一條線路的容量,因此吧RTT減小可以增加一條線路的容量,注意RTT加大的意思時(shí)傳輸時(shí)間減小!
       當(dāng)數(shù)據(jù)由一個(gè)大的管道向一個(gè)小的管道傳輸時(shí),就有可能發(fā)生擁塞,例如,當(dāng)若干輸入流到達(dá)一個(gè)路由器,而此路由器的輸出帶寬小于這些輸入流的帶寬總和時(shí),就會(huì)發(fā)生擁塞。這種情況普遍見(jiàn)于局域網(wǎng)與廣域網(wǎng)的接口處。如果發(fā)送方處于局域網(wǎng),而且不使用慢啟動(dòng),使用局域網(wǎng)的帶寬盡快的發(fā)送報(bào)文,那么返回的ACK之間的間隔與最慢的廣域網(wǎng)鏈路一致。而且,由于路由器轉(zhuǎn)發(fā)包速度慢,所以路由器就有可能主動(dòng)丟失分組包。
Ø         TCP的緊急方式
TCP提供了一種“緊急方式”的數(shù)據(jù)傳輸方式,TCP的一端可以告訴另一端有些具有某種方式的緊急數(shù)據(jù)被放在了普通的數(shù)據(jù)流中,接收方可以自行選擇處理。緊急方式客廳通過(guò)設(shè)置TCPURG標(biāo)識(shí)位與緊急指針的偏移量來(lái)設(shè)置。這個(gè)緊急指針指向緊急數(shù)據(jù)的最后一個(gè)字節(jié)(也有可能是最后一個(gè)字節(jié)的下一個(gè)字節(jié))。
現(xiàn)在有許多實(shí)現(xiàn)將緊急方式叫做“帶外數(shù)據(jù)”,其實(shí)這是不正確的。
       目前緊急指針被用來(lái)禁止停止FTP的數(shù)據(jù)傳輸。不過(guò)總的來(lái)說(shuō),用的不多。
       對(duì)于數(shù)據(jù)傳輸來(lái)說(shuō),如果用緊急數(shù)據(jù)來(lái)傳輸大量數(shù)據(jù),這種方法顯然是不可取的,再建立一個(gè)TCP連接不是更簡(jiǎn)單有效嗎?

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 拍拍无遮挡人做人爱视频免费观看 | 成人影院网站ww555久久精品 | 久久久久国产一区二区三区 | 永久av | 亚洲欧美一区二区三区情侣bbw | 成人黄色在线 | www久久久 | 日本三级网站在线 | 久久丁香| 91精品国产综合久久福利软件 | 日韩在线欧美 | 第四色狠狠 | 国产日韩欧美精品一区二区 | 嫩草91在线| 精品久久久久久国产 | 国产精品久久久久久婷婷天堂 | 午夜在线视频 | 日本又色又爽又黄的大片 | 国产综合区 | 日本三级网址 | 亚洲精品久久久一区二区三区 | 久久精品国产一区老色匹 | 一级做a爰片性色毛片 | 中文字幕一区二区三区日韩精品 | 天天草天天干天天 | 精品一区国产 | 日韩精品人成在线播放 | 欧美精品一区二区三区在线播放 | 久久久久久成人 | 国产a爽一区二区久久久 | 国产精品二区三区 | 亚洲一区二区三区久久 | 国产一区二区三区在线看 | 亚洲精品一区二三区不卡 | 亚洲视频免费观看 | 亚洲欧美日韩久久 | 国产a视频| 欧美精品片 | 精品丝袜在线 | 国产一区久久久 | av日韩在线播放 |