TCPIP学习笔记
TCP的連接
狀態(tài)變化
?
各個(gè)狀態(tài)的意義如下:
LISTEN - 偵聽來自遠(yuǎn)方TCP端口的連接請(qǐng)求;?
SYN-SENT -在發(fā)送連接請(qǐng)求后等待匹配的連接請(qǐng)求;?
SYN-RECEIVED - 在收到和發(fā)送一個(gè)連接請(qǐng)求后等待對(duì)連接請(qǐng)求的確認(rèn);
ESTABLISHED- 代表一個(gè)打開的連接,數(shù)據(jù)可以傳送給用戶;?
FIN-WAIT-1 - 等待遠(yuǎn)程TCP的連接中斷請(qǐng)求,或先前的連接中斷請(qǐng)求的確認(rèn);
FIN-WAIT-2 - 從遠(yuǎn)程TCP等待連接中斷請(qǐng)求;?
CLOSE-WAIT - 等待從本地用戶發(fā)來的連接中斷請(qǐng)求;
CLOSING -等待遠(yuǎn)程TCP對(duì)連接中斷的確認(rèn);?
LAST-ACK - 等待原來發(fā)向遠(yuǎn)程TCP的連接中斷請(qǐng)求的確認(rèn);?
TIME-WAIT -等待足夠的時(shí)間以確保遠(yuǎn)程TCP接收到連接中斷請(qǐng)求的確認(rèn);
CLOSED - 沒有任何連接狀態(tài);
三次握手(wireshark抓包如下)
?
說明:1.發(fā)送方與接收方各自維護(hù)自身的seq與ack
2.關(guān)于mass指的是包最大發(fā)送數(shù)據(jù)量,決定了要分幾個(gè)包進(jìn)行發(fā)送。Mass加上TCP頭和IP頭的長(zhǎng)度就能得到MTU。
3.win表示自身還能接受多少字節(jié)的數(shù)據(jù)。
4.發(fā)送方根據(jù)ack當(dāng)中期望收到的下一個(gè)字節(jié)的序號(hào)以及窗口,還有已經(jīng)發(fā)送的字節(jié)序號(hào),可以算出還可以發(fā)送的字節(jié)數(shù)。
5.FIN攜帶這個(gè)標(biāo)志的包表示正在請(qǐng)求終止連接。
帶寬與速率、滑動(dòng)窗口之間的關(guān)系
滑動(dòng)窗口:用于接收方通知發(fā)送方自己可以接受的數(shù)據(jù)大小。
擁塞窗口:用于發(fā)送方主動(dòng)控制發(fā)送速率。
帶寬:單位時(shí)間內(nèi)從發(fā)送端到接受端所能通過的最高速率。
設(shè)滑動(dòng)窗口大小為W, 發(fā)送端和接收端的帶寬為B, RTT為Tr。
TCP發(fā)送數(shù)據(jù)時(shí)受滑動(dòng)窗口的限制,當(dāng)TCP將滑動(dòng)窗口中的數(shù)據(jù)都發(fā)出后,在收到第一個(gè)ACK之前,滑動(dòng)窗口大小是0,不能再發(fā)送數(shù)據(jù)了,必須等待ACK包使滑動(dòng)窗口移動(dòng)。那么在理想情況下,ACK包應(yīng)該在什么時(shí)候到達(dá)呢?顯然,就是在數(shù)據(jù)發(fā)出后的RTT時(shí)間后,ACK包到達(dá)。這也就是說,現(xiàn)在在不考慮丟包和擁塞情況下,TCP在一個(gè)RTT時(shí)間內(nèi)能發(fā)出的最大數(shù)據(jù)量為W,所以不考慮帶寬限制下,TCP能一個(gè)時(shí)刻能達(dá)到的最大速度是 V = W/Tr
如果假設(shè)Tr是一個(gè)定值,那么決定TCP速率的唯一因素就是TCP的滑動(dòng)窗口大小。現(xiàn)在再考慮帶寬限制,前面說過當(dāng)馬路上擺滿車的時(shí)候,就無法再往里放車了,同理,TCP發(fā)送端在Tr/2時(shí)間內(nèi),能往通道上放的數(shù)據(jù)量為 V*Tr/2,當(dāng) V*Tr/2<=B*Tr/2時(shí),單向通道容積不構(gòu)成瓶頸,速率的限制主要來源于窗口大小限制。而當(dāng)V*Tr/2>B*Tr/2時(shí),則就受到容積限制,即此時(shí)速率限制來源于帶寬限制。
把V*Tr/2<=B*Tr/2和V*Tr/2>B*Tr/2兩邊的Tr/2約掉,再把V = W/Tr代入,則可以得到 :
W <= B*Tr 及 W > B*Tr
B*Tr就是帶寬時(shí)延乘積,取W為TCP能支持窗口的最大值Wmax,當(dāng)Wmax <= B*Tr時(shí),此時(shí)發(fā)送和接收端之間的通道就是所謂的長(zhǎng)肥管道,即帶寬時(shí)延乘積大的通道。在我們平時(shí)生活中使用的寬帶網(wǎng)絡(luò),ADSL等環(huán)境下,因?yàn)閹挾急容^小,從而B*Tr也比較小,再加上網(wǎng)絡(luò)情況比較復(fù)雜,擁塞情況比較常見,所以這些網(wǎng)絡(luò)環(huán)境下,TCP速率的主要限制因素在于帶寬,丟包率等。長(zhǎng)肥管道一般不太常見,多見于一些單位使用的專線網(wǎng)絡(luò),在這些網(wǎng)絡(luò)中速率的主要限制因素就是窗口大小了,這也是傳統(tǒng)TCP在這些網(wǎng)絡(luò)環(huán)境中不能充分利用帶寬的原因所在(因?yàn)閭鹘y(tǒng)TCP的窗口大小是用2字節(jié)表示的,所以最大只有65535(不考慮窗口擴(kuò)大選項(xiàng))),除了專線網(wǎng)絡(luò)外,隨著網(wǎng)絡(luò)硬件技術(shù)的發(fā)展,萬(wàn)兆交換機(jī)的出現(xiàn),局域網(wǎng)中也可能會(huì)出現(xiàn)帶寬時(shí)延乘積較大的情況。
總結(jié),在W<B*Tr時(shí),影響TCP發(fā)送數(shù)據(jù)速率的最直接的因素是滑動(dòng)窗口的大小,TCP的流量控制策略(比如超時(shí)時(shí)窗口設(shè)置為1,重復(fù)ACK時(shí)窗口減半)最終都是通過控制窗口大小來控制速率,而慢啟動(dòng),擁塞避免這些流量控制算法實(shí)際上就是控制窗口增長(zhǎng)方式的算法,也就是控制的是加速度大小。當(dāng)W>B*Tr時(shí),則影響速率的因素就是帶寬了。
重傳的研究
網(wǎng)絡(luò)之所以能限制發(fā)送窗口,是因?yàn)樗豢跉馐盏教鄶?shù)據(jù)時(shí)會(huì)發(fā)生擁塞。
擁塞窗口的維護(hù):
?
發(fā)生超時(shí)重傳之后:
?
快速重傳:當(dāng)發(fā)送方得到三個(gè)或以上重復(fù)確認(rèn)時(shí),就意識(shí)到相應(yīng)的包已經(jīng)丟,立即重傳。之所以限定三個(gè)或者以上可以在很大程度上避免因亂序而觸發(fā)快速重傳。
說明:
?
轉(zhuǎn)載于:https://www.cnblogs.com/wangzhenghua/p/10254877.html
總結(jié)
- 上一篇: PostgreSQL JDBC SQLW
- 下一篇: [AH2017/HNOI2017]礼物(