日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢(xún)客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

本文是參考【圖解TCP/IP

TCP(Transmission Control Protocol)是傳輸控制協(xié)議,其作用于傳輸層,是一種提供了面向連接通信服務(wù)的協(xié)議

看TCP的英文全稱(chēng)就知道,其主要作用就是傳輸 、控制,傳輸?shù)氖菙?shù)據(jù),控制的是在傳輸過(guò)程中丟包后的重發(fā) 、分包亂序后的有序重組 、控制數(shù)據(jù)傳輸?shù)乃俾史乐咕W(wǎng)絡(luò)擁塞等

這也是我們口中一直說(shuō)的TCP是一種可靠的傳輸協(xié)議的原因。本文就將對(duì)TCP的作用過(guò)程以及一些機(jī)制進(jìn)行講解

TCP的通信機(jī)制

  • 一、TCP連接管理
  • 二、分段數(shù)據(jù)發(fā)送
  • 三、重發(fā)控制
  • 四、滑動(dòng)窗口控制
  • 五、滑動(dòng)窗口的重發(fā)控制
  • 六、流控制
  • 七、擁塞控制
  • 八、結(jié)束語(yǔ)

一、TCP連接管理

TCP是面向連接進(jìn)行通信服務(wù)的協(xié)議,所謂連接,其實(shí)就是在兩臺(tái)需要數(shù)據(jù)交互的主機(jī)之間建立一條虛擬的線路,所有的數(shù)據(jù)交互都是通過(guò)這條線路進(jìn)行的,而TCP就負(fù)責(zé)這整個(gè)線路的創(chuàng)建、銷(xiāo)毀、維護(hù)管理等工作

在建立連接之前,需要做一些準(zhǔn)備,為了確保通信兩端是否可以進(jìn)行正常通信,發(fā)送端會(huì)通過(guò)TCP的首部發(fā)送一個(gè)SYN包作為建立連接的請(qǐng)求并等待接收端確認(rèn)應(yīng)答。如果接收端確認(rèn)應(yīng)答并返回一個(gè)ACK包,則表示接收端同意與發(fā)送端進(jìn)行通信,然后發(fā)送端再次發(fā)送一個(gè)ACK包給接收端,表示已收到你的同意通信的消息了,此后兩端就可以正常通信了;若接收端沒(méi)有返回給發(fā)送端一個(gè)確認(rèn)應(yīng)答的ACK包,則表示不同意與發(fā)送端進(jìn)行通信,那么兩端自然無(wú)法進(jìn)行后續(xù)的通信了

兩端若在通信完成以后肯定需要斷開(kāi)通信,同樣也需要兩端互發(fā)包來(lái)確認(rèn)是否要斷開(kāi)通信。比如,發(fā)送端先發(fā)送一個(gè)FIN包給接收端,告知想要斷開(kāi)連接,然后接收端可以返回給發(fā)送端一個(gè)ACK包表示同意你斷開(kāi)連接的請(qǐng)求,緊接著接收端也向發(fā)送端發(fā)送了一個(gè)FIN包,表示其也想斷開(kāi)連接的意愿,發(fā)送端在接收到該包后隨即返回給接收端一個(gè)ACK包表示我也同意你斷開(kāi)連接,這樣,兩端就斷開(kāi)連接了

總結(jié)一下,一次完整的TCP連接的建立與斷開(kāi)至少需要來(lái)回發(fā)送7個(gè)包,其中建立連接需要發(fā)3個(gè)包,斷開(kāi)連接需要發(fā)4個(gè)包

我們來(lái)看一下完整的通信過(guò)程簡(jiǎn)圖

「TCP/IP」圖解TCP的通信機(jī)制

 

這就是大家常說(shuō)的三次握手,四次揮手的過(guò)程

如果不好理解上面的建立、斷開(kāi)連接過(guò)程,這里我再給大家舉一個(gè)小小的例子

發(fā)送端與接收端通信,就好比我們?nèi)粘I钪袃蓚€(gè)人打電話,例如現(xiàn)在A給B打電話

  • A問(wèn)B:喂?你是B嗎?
  • B回答A:我是B呀,你是A嗎?
  • A回答B(yǎng):對(duì)的,我是A

就這樣一個(gè)簡(jiǎn)單的三次對(duì)話就確認(rèn)了雙方是想要互相通信的對(duì)象,因此連接就此建立了

那么當(dāng)A和B聊完天,準(zhǔn)備掛電話了

  • A對(duì)B說(shuō):我的事說(shuō)完了,那么沒(méi)啥事我就掛電話了哈
  • B回答A:好的
  • B又對(duì)A補(bǔ)充了一句:我也沒(méi)啥事了,那我也掛了哈
  • A回答B(yǎng):好的

這三段對(duì)話就使通信雙方確認(rèn)了會(huì)話結(jié)束,因此連接就此斷開(kāi)了

二、分段數(shù)據(jù)發(fā)送

TCP不是拿到一整個(gè)包就直接原封不動(dòng)地傳給接收端的,因?yàn)槿暨@樣做,即使是發(fā)生了數(shù)據(jù)丟失,也不知道到底丟失了哪部分的數(shù)據(jù),因此其采用的就是將數(shù)據(jù)分段發(fā)送的方式

這里先說(shuō)明一點(diǎn),不光建立和斷開(kāi)連接時(shí)接收端需要向發(fā)送端發(fā)送請(qǐng)求應(yīng)答,在數(shù)據(jù)交互時(shí)也是需要的

例如有一個(gè)數(shù)據(jù)包,我們可以將其按順序給每一個(gè)字節(jié)都標(biāo)上一個(gè)序號(hào),然后我們假設(shè)每次發(fā)送1000個(gè)序號(hào)區(qū)間的數(shù)據(jù)給接收端,所以第一次發(fā)送的是 序號(hào) 1 ~ 1000 的數(shù)據(jù),接收端接收到了以后會(huì)返回給發(fā)送端一個(gè)請(qǐng)求應(yīng)答,告知發(fā)送端下一次請(qǐng)發(fā)送 序號(hào) 1001 ~ 2000 的數(shù)據(jù)過(guò)來(lái),過(guò)程如圖所示

「TCP/IP」圖解TCP的通信機(jī)制

 


上面我們假設(shè)的是每次發(fā)送1000個(gè)***區(qū)間的單位,而實(shí)際過(guò)程中,卻不一定是這個(gè)值。

在前面的學(xué)習(xí)中,我們得知數(shù)據(jù)在數(shù)據(jù)鏈路層中傳輸會(huì)收到MTU(最大傳輸單元)的影響,若數(shù)據(jù)大于該值,IP則會(huì)被分片處理,因此我們盡可能地不讓這種事情發(fā)生,那么就要讓傳輸?shù)拿慷螖?shù)據(jù)大小小于該通信線路上最小的MTU,該值稱(chēng)為MSS(最大消息長(zhǎng)度)

該值是會(huì)在建立連接的三次握手時(shí)被計(jì)算獲得的,比如發(fā)送端在請(qǐng)求接收端的時(shí)候,在發(fā)送的包上附帶上其線路上的MTU大小為4000,然后接收端在發(fā)送確認(rèn)應(yīng)答給發(fā)送端時(shí),也會(huì)在包上附帶上其線路上的MTU大小為1460,此時(shí)發(fā)送端接收到確認(rèn)應(yīng)答后比較兩個(gè)MTU的大小,取其中小的那個(gè)值作為之后數(shù)據(jù)傳輸每段的數(shù)據(jù)大小

如圖:

「TCP/IP」圖解TCP的通信機(jī)制

 

三、重發(fā)控制

我們都知道,在數(shù)據(jù)傳輸過(guò)程中可能會(huì)因?yàn)楦鞣N原因出現(xiàn)丟包現(xiàn)象,而當(dāng)出現(xiàn)丟包現(xiàn)象時(shí),即發(fā)送端在發(fā)完數(shù)據(jù)以后等待一段時(shí)間,并未收到接收端的確認(rèn)應(yīng)答,則視為丟包,于是就會(huì)進(jìn)行重發(fā)

其中丟包現(xiàn)象又分為兩種:

  1. 發(fā)送端向接收端發(fā)送數(shù)據(jù)的過(guò)程中,發(fā)生了丟包現(xiàn)象,接收端并未接收到數(shù)據(jù),因此不會(huì)給發(fā)送端發(fā)送確認(rèn)應(yīng)答
  2. 接收端收到了發(fā)送端傳過(guò)來(lái)的數(shù)據(jù),并且也向發(fā)送端返回了確認(rèn)應(yīng)答,但確認(rèn)應(yīng)答的包卻在發(fā)送的途中出現(xiàn)了丟包,所以發(fā)送端接收不到確認(rèn)應(yīng)答

以上兩種情況如下圖所示:

第一種情況:

「TCP/IP」圖解TCP的通信機(jī)制

 


第二種情況:

「TCP/IP」圖解TCP的通信機(jī)制

 


那么,發(fā)送端發(fā)送完數(shù)據(jù)后多久沒(méi)收到確認(rèn)應(yīng)答才判定數(shù)據(jù)丟包了呢?這個(gè)都是隨著網(wǎng)絡(luò)環(huán)境的變化而變化的,TCP會(huì)在每次發(fā)包時(shí)計(jì)算往返時(shí)間以及偏差來(lái)決定等待的時(shí)間

若重發(fā)后又出現(xiàn)了丟包,則下一次等待的時(shí)間會(huì)以2倍、4倍的指數(shù)函數(shù)延長(zhǎng)

但其又不會(huì)無(wú)限進(jìn)行重發(fā),當(dāng)重發(fā)次數(shù)達(dá)到一定程度后,會(huì)判定為網(wǎng)絡(luò)異常,兩端通信就會(huì)被強(qiáng)制關(guān)閉

四、滑動(dòng)窗口控制

上面介紹了TCP將數(shù)據(jù)分段發(fā)送,雖然提高了傳輸?shù)目煽啃裕谴嬖谥粋€(gè)致命的缺點(diǎn),那就是效率非常低,因?yàn)槊克鸵欢味家却邮斩说拇_認(rèn)應(yīng)答,若整個(gè)數(shù)據(jù)的分段較多,那么通信的性能可能就會(huì)很低了,因此TCP引入了窗口這個(gè)概念

所謂窗口,表示的是無(wú)需等待確認(rèn)應(yīng)答而可以連續(xù)發(fā)送的連續(xù)多段數(shù)據(jù)的區(qū)域,如圖

「TCP/IP」圖解TCP的通信機(jī)制

 

我們假設(shè)每段數(shù)據(jù)長(zhǎng)度為1000,這里的窗口大小為4段,因此發(fā)送端可以將這四段數(shù)據(jù)都分別發(fā)送出去并且不需要發(fā)送一段數(shù)據(jù)以后等待一個(gè)確認(rèn)應(yīng)答,如圖

「TCP/IP」圖解TCP的通信機(jī)制

 


此時(shí)的窗口包含4個(gè)段,即窗口內(nèi)包含4000個(gè)字節(jié)的數(shù)據(jù),我們稱(chēng)之為窗口大小

接收端在返回相應(yīng)的確認(rèn)應(yīng)答給發(fā)送端時(shí),發(fā)送端會(huì)根據(jù)收到的確認(rèn)應(yīng)答,繼續(xù)發(fā)送比該確認(rèn)應(yīng)答中***大4000的數(shù)據(jù),如圖所示

「TCP/IP」圖解TCP的通信機(jī)制

 

五、滑動(dòng)窗口的重發(fā)控制

若使用了滑動(dòng)窗口控制這一技術(shù)后,即使某段數(shù)據(jù)出現(xiàn)了丟包現(xiàn)象,也不會(huì)造成太大的影響,因?yàn)榻邮斩藭?huì)一邊接收發(fā)送端傳過(guò)來(lái)的數(shù)據(jù),一邊用某種方式告知發(fā)送端剛才丟失了哪段數(shù)據(jù)

接下來(lái)我們來(lái)介紹一下其作用過(guò)程,如圖所示

「TCP/IP」圖解TCP的通信機(jī)制

 


圖中,在發(fā)送第二段數(shù)據(jù)(1001 ~ 2000)時(shí)發(fā)生了丟包,因此接收端沒(méi)有接收到對(duì)應(yīng)的包,所以當(dāng)發(fā)送端傳過(guò)來(lái)第三段數(shù)據(jù)的時(shí)候,接收端返回的仍是第二段的確認(rèn)應(yīng)答,緊接著發(fā)送端分別發(fā)送了第四段、第五段數(shù)據(jù),可接收端都返回的是第二段的確認(rèn)應(yīng)答

就這樣連著三次發(fā)送了同一個(gè)確認(rèn)應(yīng)答給發(fā)送端,所以發(fā)送端得知?jiǎng)偛艂鬏敂?shù)據(jù)的過(guò)程中第二段數(shù)據(jù)發(fā)生了丟包,因此此時(shí)會(huì)將丟失的數(shù)據(jù)重發(fā)一份

然后接收端在接收到之前丟掉的那段數(shù)據(jù)以后,因?yàn)橹暗臄?shù)據(jù)都成功接收了,所以下一次就開(kāi)始請(qǐng)求 5001 ~ 6000 這段數(shù)據(jù)了

六、流控制

有時(shí),發(fā)送端發(fā)送給接收端的數(shù)據(jù)超過(guò)了接收端的最大承載能力,因此會(huì)造成數(shù)據(jù)無(wú)法接收的情況,從而導(dǎo)致之后會(huì)進(jìn)行數(shù)據(jù)重發(fā),這非常得浪費(fèi)性能。

為了防止上述情況得發(fā)生,TCP提供了一種機(jī)制可以使發(fā)送端每次發(fā)送的數(shù)據(jù)盡可能得在接收端得承載能力之內(nèi),而其實(shí)現(xiàn)得方式就是接收端向發(fā)送端告知自己能夠接收的數(shù)據(jù)大小,因此發(fā)送端每次發(fā)送的數(shù)據(jù)就都不會(huì)超過(guò)該值,我們稱(chēng)該值為窗口大小

一旦接收端暫時(shí)無(wú)法接收任何數(shù)據(jù),它會(huì)告知發(fā)送端,因此發(fā)送端會(huì)暫停數(shù)據(jù)的發(fā)送,但為了后續(xù)數(shù)據(jù)的正常發(fā)送,發(fā)送端會(huì)不時(shí)地向接收端發(fā)送一個(gè)窗口探測(cè),試探性地看一下接收端是否能繼續(xù)接收數(shù)據(jù)了

具體的過(guò)程如下圖所示

「TCP/IP」圖解TCP的通信機(jī)制

 

七、擁塞控制

因?yàn)槌霈F(xiàn)了窗口控制,數(shù)據(jù)不再是一段一段發(fā)送,而是連續(xù)發(fā)送多段數(shù)據(jù)包,因此有時(shí)如果遇到網(wǎng)絡(luò)擁堵的情況,而我們又同時(shí)發(fā)送了大量的數(shù)據(jù)包,可能會(huì)導(dǎo)致網(wǎng)絡(luò)癱瘓

TCP運(yùn)用了一種叫做慢啟動(dòng)技巧緩解了上述情況,何為慢啟動(dòng)呢?就是不要在一開(kāi)始就瞬間發(fā)送大量數(shù)據(jù)包,而是先發(fā)送一部分,然后根據(jù)收發(fā)情況再發(fā)送更多的數(shù)據(jù)包

具體過(guò)程我們來(lái)看一下

「TCP/IP」圖解TCP的通信機(jī)制

 


如圖中,發(fā)送端的窗口大小為1000,因此只發(fā)送了一段長(zhǎng)度為1000字節(jié)的數(shù)據(jù)包,此時(shí)接收端收到數(shù)據(jù)并返回一個(gè)確認(rèn)應(yīng)答,因此發(fā)送端將窗口大小加一,即窗口大小為2000 ;發(fā)送端又發(fā)送了兩段長(zhǎng)度為1000的數(shù)據(jù)包,接收端收到數(shù)據(jù)并返回兩個(gè)確認(rèn)應(yīng)答,因此發(fā)送端將窗口大小加二,即窗口大小為4000 ;以此類(lèi)推

總結(jié): 發(fā)送端每次發(fā)送的數(shù)據(jù)包會(huì)以1,2,4的指數(shù)型增長(zhǎng)

但窗口大小也不會(huì)無(wú)限指數(shù)型增大,而是會(huì)在達(dá)到某個(gè)值時(shí)進(jìn)行一些調(diào)整,該值稱(chēng)為慢啟動(dòng)閾值

分享到:
標(biāo)簽:TCP
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定