版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第二章 TCP協(xié)議TCP/IP詳解卷1:CH17、CH18、CH19、CH20、CH21、CH22、CH23、CH24,主要內(nèi)容,2.1 TCP回顧2.2 TCP連接的建立與終止2.3 TCP的數(shù)據(jù)傳輸(交互數(shù)據(jù)流和成塊數(shù)據(jù)流)2.4 TCP的超時與重傳2.5 TCP的堅持定時器和?;疃〞r器2.6 TCP的未來和性能,2.1 TCP,T C P提供一種面向連接的、可靠的字節(jié)流服務在一個T C P連接中僅有
2、兩方進行彼此通信廣播和多播不能用于T C P,?,,,,端口,,…,發(fā)送 TCP 報文段,,,,TCP,,…,,TCP,接收緩存,,發(fā)送緩存,報文段,…,報文段,報文段,,,端口,發(fā)送端,接收端,,向發(fā)送緩存寫入數(shù)據(jù)塊,,從接收緩存讀取數(shù)據(jù)塊,應用進程,應用進程,?,,,TCP報文段被封裝在一個IP數(shù)據(jù)報中進行傳輸,T C P提供可靠性的方式,應用數(shù)據(jù)被分割成T C P認為最適合發(fā)送的數(shù)據(jù)塊當T C P發(fā)出一個段后,它啟動一個定
3、時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發(fā)這個報文段。當T C P收到發(fā)自T C P連接另一端的數(shù)據(jù)時,它將發(fā)送一個確認。,當TCP收到發(fā)自TCP連接另一端的數(shù)據(jù),它將發(fā)送一個確認。TCP將保持它首部和數(shù)據(jù)的檢驗和既然TCP報文段作為IP據(jù)報來傳輸,而IPP數(shù)據(jù)報的到達可能會失序,因此TCP報文段的到達也可能會失序。如果必要, TCP將對收到的數(shù)據(jù)進行重新排序,將收到的數(shù)據(jù)以正確的順序交給應用層。既然I
4、P數(shù)據(jù)報會發(fā)生重復, TCP 的接收端必須丟棄重復的數(shù)據(jù)。TCP還能提供流量控制,TCP的編號與確認,按字節(jié)編號確認是對收到的數(shù)據(jù)的最高序號的確認,表示期望下次收到的第一個字節(jié)的序號。由于TCP能夠提供全雙工通信,因此,可以采用捎帶確認以提高傳輸效率。,TCP的簡單確認,發(fā)送窗口大小 = 1,發(fā)方,收方,,,,,Send 1,Receive 1,,發(fā)方,收方,發(fā)送窗口大小 = 1,,,Send 1,Receive 1,,Recei
5、ve ACK 2,Send ACK 2,,發(fā)方,收方,發(fā)送窗口大小 = 1,,,Send 1,Receive 1,,Receive ACK 2,Send ACK 2,,Send 2,Receive 2,,發(fā)方,收方,發(fā)送窗口大小 = 1,,,Send 1,Receive 1,,Receive ACK 2,Send ACK 2,,Send 2,Receive 2,,Receive ACK 3,Send ACK 3,,發(fā)方,收方,發(fā)送窗口大
6、小 = 1,,,Send 1,Receive 1,,Receive ACK 2,Send ACK 2,,Send 2,Receive 2,,Receive ACK 3,Send ACK 3,,Send 3,Receive 3,,發(fā)方,收方,發(fā)送窗口大小 = 1,,,Send 1,Receive 1,,Receive ACK 2,Send ACK 2,,Send 2,Receive 2,,Receive ACK 3,Send ACK 3,
7、,Send 3,Receive 3,,Receive ACK 4,Send ACK 4,,發(fā)方,收方,發(fā)送窗口大小 = 1,,TCP 的編號與確認號,,SourcePort,Dest.Port,…,Sequence#,Acknowledgement#,,,Source,Dest.,,Seq.,,Ack.,1028,23,10,1,I justsent #10.,,,,,,,I just got #10,now I need
8、#11.,,SourcePort,Dest.Port,…,Sequence#,Acknowledgement#,1028,23,Source,Dest.,10,Seq.,1,Ack.,1028,23,Source,Dest.,11,Seq.,1,Ack.,I justsent #10.,,,SourcePort,Dest.Port,…,Sequence#,Acknowledgement#,1028,23,Source,
9、Dest.,11,Seq.,2,Ack.,,,1028,23,Source,Dest.,10,Seq.,1,Ack.,1028,23,Source,Dest.,11,Seq.,1,Ack.,,,,,,I just got #10,now I need #11.,I justsent #11.,,,SourcePort,Dest.Port,…,Sequence#,Acknowledgement#,1028,23,Source,
10、Dest.,11,Seq.,101,Ack.,,,1028,23,Source,Dest.,10,Seq.,100,Ack.,1028,23,Source,Dest.,11,Seq.,100,Ack.,,1028,23,Source,Dest.,12,Seq.,101,Ack.,,,,,,I just got #11,now I need #12.,,I justsent #11.,,,TCP 的包格式,,,,,,,,,,,,,源端
11、口 (16),目的端口 (16),順序號 (32),頭長 (4),確認序號 (32),保留 (6),窗口 (16),檢驗和 (16),緊急指針(16),選項和填充 (可選 ),數(shù)據(jù) (可變長),20字節(jié),位 0,15,16,31,,,TCP首部,,20 字節(jié)的固定首部,,,,,,,,,,目 的 端 口,首部長度,檢 驗 和,選 項 (長 度 可 變),源 端 口,序 號,,緊 急
12、 指 針,窗 口,確 認 號,,,,,,,,保 留,FIN,,32 bit,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,SYN,RST,PSH,ACK,URG,比特 0 8 16 24
13、 31,,,填 充,TCP 數(shù)據(jù)部分,,,,,TCP 首部,TCP 報文段,,IP 數(shù)據(jù)部分,IP 首部,,,,,,,發(fā)送在前,,TCP首部,,20字節(jié)固定首部,,,,,,,,目 的 端 口,首部長度,檢 驗 和,選 項 (長 度 可 變),源 端 口,序 號,,緊 急 指 針,窗 口,確 認 號,,,,,,,,保 留,FI
14、N,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,SYN,RST,PSH,ACK,URG,比特 0 8 16 24 31,,填 充,,,,,源端口和目的端口字段——各占 2 字節(jié)。端口是運輸層與應用層的服
15、務接口。運輸層的復用和分用功能都要通過端口才能實現(xiàn)。,,,TCP首部,,20字節(jié)固定首部,,,,,,,,目 的 端 口,首部長度,檢 驗 和,選 項 (長 度 可 變),源 端 口,序 號,,緊 急 指 針,窗 口,確 認 號,,,,,,,,保 留,FIN,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,SYN,RS
16、T,PSH,ACK,URG,比特 0 8 16 24 31,,填 充,,,,,序號字段——占 4 字節(jié)。TCP 連接中傳送的數(shù)據(jù)流中的每一個字節(jié)都編上一個序號。序號字段的值則指的是本報文段所發(fā)送的數(shù)據(jù)的第一個字節(jié)的序號。,,,TCP首部,,2
17、0字節(jié)固定首部,,,,,,,,目 的 端 口,首部長度,檢 驗 和,選 項 (長 度 可 變),源 端 口,序 號,,緊 急 指 針,窗 口,確 認 號,,,,,,,,保 留,FIN,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,SYN,RST,PSH,ACK,URG,比特 0
18、 8 16 24 31,,填 充,,,,,確認號字段——占 4 字節(jié),是期望收到對方的下一個報文段的數(shù)據(jù)的第一個字節(jié)的序號。,,,TCP首部,,20字節(jié)固定首部,,,,,,,,目 的 端 口,首部長度,檢 驗 和,選 項 (長 度 可 變),
19、源 端 口,序 號,,緊 急 指 針,窗 口,確 認 號,,,,,,,,保 留,FIN,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,SYN,RST,PSH,ACK,URG,比特 0 8 16 24
20、 31,,填 充,,,,,首部長度——占 4 bit,它指出 TCP 報文段首部有多少個4 字節(jié),,,TCP首部,,20字節(jié)固定首部,,,,,,,,目 的 端 口,首部長度,檢 驗 和,選 項 (長 度 可 變),源 端 口,序 號,,緊 急 指 針,窗 口,確 認 號,,,,,,,,保 留,FIN,,,,,,,,
21、,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,SYN,RST,PSH,ACK,URG,比特 0 8 16 24 31,,填 充,,,,,保留字段——占 6 bit,保留為今后使用,但目前應置為 0。,,,TCP首部,,
22、20字節(jié)固定首部,,,,,,,,目 的 端 口,首部長度,檢 驗 和,選 項 (長 度 可 變),源 端 口,序 號,,緊 急 指 針,窗 口,確 認 號,,,,,,,,保 留,FIN,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,SYN,RST,PSH,ACK,URG,比特 0
23、 8 16 24 31,,填 充,,,,,緊急比特 URG —— 當 URG ? 1 時,表明緊急指針字段有效。它告訴系統(tǒng)此報文段中有緊急數(shù)據(jù),應盡快傳送(相當于高優(yōu)先級的數(shù)據(jù))。,,,TCP首部,,20字節(jié)固定首部,,,,,,,,目 的 端 口,首部長度,檢
24、驗 和,選 項 (長 度 可 變),源 端 口,序 號,,緊 急 指 針,窗 口,確 認 號,,,,,,,,保 留,FIN,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,SYN,RST,PSH,ACK,URG,比特 0 8 16
25、 24 31,,填 充,,,,,確認比特 ACK —— 只有當 ACK ? 1 時確認號字段才有效。當 ACK ? 0 時,確認號無效。,,,TCP首部,,20字節(jié)固定首部,,,,,,,,目 的 端 口,首部長度,檢 驗 和,選 項 (長 度 可 變),源 端 口,序 號,,緊 急 指 針
26、,窗 口,確 認 號,,,,,,,,保 留,FIN,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,SYN,RST,PSH,ACK,URG,比特 0 8 16 24 31,,填 充,,
27、,,,推送比特 PSH (PuSH) —— 接收 TCP 收到推送比特置 1 的報文段,就盡快地交付給接收應用進程,而不再等到整個緩存都填滿了后再向上交付。,,,TCP首部,,20字節(jié)固定首部,,,,,,,,目 的 端 口,首部長度,檢 驗 和,選 項 (長 度 可 變),源 端 口,序 號,,緊 急 指 針,窗 口,確 認 號,,,,,,,,保 留,F
28、IN,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,SYN,RST,PSH,ACK,URG,比特 0 8 16 24 31,,填 充,,,,,復位比特 RST (ReSeT) —— 當 RST ? 1 時
29、,表明 TCP 連接中出現(xiàn)嚴重差錯(如由于主機崩潰或其他原因),必須釋放連接,然后再重新建立運輸連接。,,,TCP首部,,20字節(jié)固定首部,,,,,,,,目 的 端 口,首部長度,檢 驗 和,選 項 (長 度 可 變),源 端 口,序 號,,緊 急 指 針,窗 口,確 認 號,,,,,,,,保 留,FIN,,,,,,,,,,,,,,,,,,,,,,,,
30、,,,,,,,,,,,,,,,SYN,RST,PSH,ACK,URG,比特 0 8 16 24 31,,填 充,,,,,同步比特 SYN —— 同步比特 SYN 置為 1,就表示這是一個連接請求或連接接受報文。,,,TCP首部,,20
31、字節(jié)固定首部,,,,,,,,目 的 端 口,首部長度,檢 驗 和,選 項 (長 度 可 變),源 端 口,序 號,,緊 急 指 針,窗 口,確 認 號,,,,,,,,保 留,FIN,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,SYN,RST,PSH,ACK,URG,比特 0
32、 8 16 24 31,,填 充,,,,,終止比特 FIN (FINal) —— 用來釋放一個連接。當FIN ? 1 時,表明此報文段的發(fā)送端的數(shù)據(jù)已發(fā)送完畢,并要求釋放運輸連接。,,,TCP首部,,20字節(jié)固定首部,,,,,,,,目 的 端 口,首部長度,檢 驗
33、 和,選 項 (長 度 可 變),源 端 口,序 號,,緊 急 指 針,窗 口,確 認 號,,,,,,,,保 留,FIN,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,SYN,RST,PSH,ACK,URG,比特 0 8 16
34、 24 31,,填 充,,,,,,窗口字段 —— 占 2 字節(jié),用來控制對方發(fā)送的數(shù)據(jù)量,單位為字節(jié)。TCP 連接的一端根據(jù)設(shè)置的緩存空間大小確定自己的接收窗口大小,然后通知對方以確定對方的發(fā)送窗口的上限,也稱為通知窗口。,,TCP首部,,20字節(jié)固定首部,,,,,,,,目 的 端 口,首部長度,檢 驗 和,選 項 (
35、長 度 可 變),源 端 口,序 號,,緊 急 指 針,窗 口,確 認 號,,,,,,,,保 留,FIN,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,SYN,RST,PSH,ACK,URG,比特 0 8 16
36、 24 31,,填 充,,,,,,檢驗和 —— 占 2 字節(jié)。檢驗和字段檢驗的范圍包括首部和數(shù)據(jù)這兩部分。在計算檢驗和時,要在 TCP 報文段的前面加上 12 字節(jié)的偽首部。,,TCP首部,,20字節(jié)固定首部,,,,,,,,目 的 端 口,首部長度,檢 驗 和,選 項 (長 度 可 變),源 端 口,序 號,,緊 急 指
37、針,窗 口,確 認 號,,,,,,,,保 留,FIN,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,SYN,RST,PSH,ACK,URG,比特 0 8 16 24 31,,填 充,
38、,,,,,緊急指針字段 —— 占 16 bit。緊急指針指出在本報文段中的緊急數(shù)據(jù)的最后一個字節(jié)的序號。,,TCP首部,,20字節(jié)固定首部,,,,,,,,目 的 端 口,首部長度,檢 驗 和,選 項 (長 度 可 變),源 端 口,序 號,,緊 急 指 針,窗 口,確 認 號,,,,,,,,保 留,FIN,,,,,,,,,,,,,,,,,,,,,,,,
39、,,,,,,,,,,,,,,,SYN,RST,PSH,ACK,URG,比特 0 8 16 24 31,,填 充,,,,,,選項字段 —— 長度可變。TCP 只規(guī)定了一種選項,即最大報文段長度 MSS (Maximum Segment S
40、ize)。MSS 告訴對方 TCP:“我的緩存所能接收的報文段的數(shù)據(jù)字段的最大長度是 MSS 個字節(jié)。”,,MSS 是 TCP 報文段中的數(shù)據(jù)字段的最大長度。數(shù)據(jù)字段加上 TCP 首部才等于整個的 TCP 報文段。,,TCP首部,,20字節(jié)固定首部,,,,,,,,目 的 端 口,首部長度,檢 驗 和,選 項 (長 度 可 變),源 端 口,序 號,,緊 急 指 針,窗
41、 口,確 認 號,,,,,,,,保 留,FIN,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,SYN,RST,PSH,ACK,URG,比特 0 8 16 24 31,,填 充,,,,,,
42、填充字段 —— 這是為了使整個首部長度是 4 字節(jié)的整數(shù)倍。,2.2 TCP連接的建立與終止,三次握手建立連接提供全雙工的可靠交付的服務按字節(jié)編號采用可變窗口進行流量控制,一、建立連接,在連接建立過程中要解決三個問題:要使每一方能夠確知對方的存在要允許雙方協(xié)商一些參數(shù),如:MTU、Wmax、QoS等能對運輸實體的資源進行分配,如:緩存大小、連接表中的項目等。采用Client/Server方式工作,Send SYN (
43、seq=100 ctl=SYN),SYN received,,,,Host A,Host B,TCP 使用三次握手建立連接,Send SYN (seq=100 ctl=SYN),SYN received,,,,Send SYN, ACK (seq=300 ack=101 ctl=syn,ack),,Host A,Host B,SYN received,Send SYN (seq=100 ctl=SYN),SYN received,
44、,,,Send SYN, ACK (seq=300 ack=101 ctl=syn,ack),,Established(seq=101 ack=301 ctl=ack),,Host A,Host B,SYN received,二、 釋放連接,Send FIN(FIN,seq=X),,,,Host A,Host B,FIN received,,,,Send ACK (ACK=X+1),,Host A,Host B,ACK rec
45、eived,Send FIN (FIN,seq=X),Half-close 半關(guān)閉,,,,Host A,Host B,Send FIN (FIN,seq=X),FIN received,,,,Send ACK (ACK=X+1),,Host A,Host B,ACK received,Send FIN (FIN,seq=X),Half-close 全關(guān)閉,FIN received,,,,Host A,Host B,Sen
46、d FIN (FIN,seq=X),FIN received,,,,Send ACK,FIN (FIN,seq=y,ACK=X+1),,Host A,Host B,FIN,ACK received,Send FIN (FIN,seq=X),FIN received,,,,Send ACK,FIN (FIN,seq=y,ACK=X+1),,Host A,Host B,FIN,ACK received,Send FIN (FIN,
47、seq=X),,Send ACK,FIN (FIN,ACK=Y+1),Full-close 全關(guān)閉,連接建立與終止的時間系列,初始序列號 ISN,當一端為建立連接而發(fā)送它的SYS時,它為連接選擇一個初始序號。ISN隨時間而變化,因此每個連接都將具有不同的ISN。在4 . 4 B S D(和多數(shù)的伯克利的實現(xiàn)版)中,系統(tǒng)初始化時初始的發(fā)送序號被初始化為1,這個變量每8 ms加1,另外,每次建立一個連接后,這個變量將增加64000
48、。,連接終止期間報文段的正常交換,三、 連接建立的超時,有很多情況導致無法建立連接。如:服務器主機沒有處于正常狀態(tài)。服務器忙,B S D版的T C P軟件采用一種500 ms的定時器,當我們鍵入一個命令(如t e l n e t)后,將建立一個6秒的定時器(1 2個時鐘滴答( t i c k)),但它可能在之后的5 . 5秒~ 6秒內(nèi)的任意時刻超時。盡管定時器初始化為1 2個時鐘滴答,但定時計數(shù)器會在設(shè)置后的第一個0~500 ms
49、中的任意時刻減1。從那以后,定時計數(shù)器大約每隔500 ms減1,但在第1個500 ms內(nèi)是可變的(我們使用限定詞“大約”是因為在T C P每隔500 ms獲得系統(tǒng)控制的瞬間,系統(tǒng)內(nèi)核可能會優(yōu)先處理其他中斷)。,TCP的500 ms定時器,當?shù)未鹩嫈?shù)器為0時,6秒的定時器便會超時,這個定時器會在以后的2 4秒(4 8個滴答)重新復位。之后的下一個定時器將更接近2 4秒,因為當T C P的500 ms定時器被內(nèi)核調(diào)用時,它就會被修改一次。,
50、四、最大報文段長度MSS,MSS表示TCP報文段的數(shù)據(jù)長度當一個連接建立時,連接的雙方都要通告各自的MSS。當建立一個連接時,每一方都有用于通告它期望接收的M S S選項(M S S選項只能出現(xiàn)在S Y N報文段中)。如果一方不接收來自另一方的M S S值,則M S S就定為默認值5 3 6字節(jié).,MSS的大小,如果沒有分段發(fā)生, MSS越大越好。當T C P發(fā)送一個S Y N時,或者是因為一個本地應用進程想發(fā)起一個連接,或者是
51、因為收到了另一端主機的一個連接請求,它能將M S S值設(shè)置為外出接口上的M T U長度減去固定的I P首部和T C P首部長度。如果目的I P地址為“非本地的,M S S通常的默認值為5 3 6。,五、復位報文段,一般說來,無論何時一個報文段發(fā)往基準的連接出現(xiàn)錯誤, T C P都會發(fā)出一個復位報文段。如:到不存在的端口的連接請求異常終止一個連接檢測半打開連接,到不存在的端口的連接請求,產(chǎn)生復位的一種常見情況是當連接請求到達時,目
52、的端口沒有進程正在聽。對于U D P,當一個數(shù)據(jù)報到達目的端口時,該端口沒在使用,它將產(chǎn)生一個I C M P端口不可達的信息。而T C P則使用復位,異常終止一個連接,在排隊數(shù)據(jù)都已發(fā)送之后才發(fā)送F I N,正常情況下沒有任何數(shù)據(jù)丟失。但也有可能發(fā)送一個復位報文段而不是F I N來中途釋放一個連接,稱這為異常釋放。異常終止一個連接對應用程序來說有兩個優(yōu)點:(1)丟棄任何待發(fā)數(shù)據(jù)并立即發(fā)送復位報文段;(2)R S T的接收方會區(qū)分
53、另一端執(zhí)行的是異常關(guān)閉還是正常關(guān)閉。應用程序使用的A P I必須提供產(chǎn)生異常關(guān)閉而不是正常關(guān)閉的手段。,檢測半打開連接,如果一方已經(jīng)關(guān)閉或異常終止連接而另一方卻還不知道,我們將這樣的T C P連接稱為半打開的。任何一端的主機異常都可能導致發(fā)生這種情況。只要不打算在半打開連接上傳輸數(shù)據(jù),仍處于連接狀態(tài)的一方就不會檢測另一方已經(jīng)出現(xiàn)異常。如果服務器突然斷電又重新啟動其T C P ,它將丟失復位前連接的所有信息,因此它不知道數(shù)據(jù)報文段中提
54、到的連接。T C P的處理原則是接收方以復位作為應答,六、同時打開,七、同時關(guān)閉,八、TCP選項 RFC793 RFC1323,,TCP的狀態(tài)變遷圖,,,,CLOSED,ESTABLISHED,LISTEN,CLOSE_WAIT,FIN_WAIT_1,SYN_RCVD,FIN_WAIT_2,CLOSING,TIME_WAIT,SYN_SENT,LAST_ACK,,,,,,,,,,,,,,,,,,,主動打開,被
55、動打開,被動關(guān)閉,主動關(guān)閉,起點,被動打開,主動打開 發(fā)送 SYN,同時打開,收到 SYN,發(fā)送 SYN, ACK,收到 ACK,數(shù)據(jù)傳送 階段,關(guān)閉發(fā)送 FIN,關(guān)閉發(fā)送 FIN,關(guān)閉發(fā)送 FIN,收到 RST,收到 SYN發(fā)送 SYN, ACK,關(guān)閉或超時,收到 ACK,收到 SYN, ACK發(fā)送 ACK,收到 ACK,收到 ACK,收到 FIN發(fā)送 ACK,收到 FIN, ACK 發(fā)送 ACK,
56、收到 FIN發(fā)送 ACK,同時關(guān)閉,收到 FIN發(fā)送 ACK,發(fā)送 SYN,定時經(jīng)過兩倍報文段壽命后,,關(guān)閉,,TCP正常連接建立和終止所對應的狀態(tài),2.3 TCP的數(shù)據(jù)傳輸,包括交互數(shù)據(jù)流和成塊數(shù)據(jù)流若按分組數(shù)量計算,約有一半的T C P報文段包含成塊數(shù)據(jù)(如F T P、電子郵件和U s e n e t新聞),另一半則包含交互數(shù)據(jù)(如Te l n e t和R l o g i n)。若按字節(jié)計算,則成塊數(shù)據(jù)與交互數(shù)據(jù)的比例約為
57、9:1 。T C P需要同時處理這兩類數(shù)據(jù),但使用的處理算法則有所不同。,一、TCP的交互數(shù)據(jù)流,輸入Rlogin 或Telnet后會產(chǎn)生4個報文段:(1)來自客戶的交互按鍵;(2)來自服務器的按鍵確認;(3)來自服務器的按鍵回顯;( 4)來自客戶的按鍵回顯確認。,,一般可以將報文段2和3進行合并—按鍵確認與按鍵回顯一起發(fā)送(捎帶確認)。,Telnet有一個選項允許客戶發(fā)送一行到服務器,通過使用這個選項可以減少網(wǎng)絡的負載。,在
58、象R l o g i n這樣的連接上客戶一般每次發(fā)送一個字節(jié)到服務器,這就產(chǎn)生了一些4 1字節(jié)長的分組:2 0字節(jié)的I P首部、2 0字節(jié)的T C P首部和1個字節(jié)的數(shù)據(jù)。在局域網(wǎng)上,這些小分組(被稱為微小分組)通常不會引起麻煩,因為局域網(wǎng)一般不會出現(xiàn)擁塞。但在廣域網(wǎng)上,這些小分組則會增加擁塞出現(xiàn)的可能。一種簡單和好的方法就是采用N a g l e算法 RFC 896,Nagle算法,若數(shù)據(jù)是逐個字節(jié)到達發(fā)送端,則發(fā)送端就將第
59、一個字節(jié)發(fā)送出去,并將后面到達的字節(jié)緩存起來。當收到對第一個字節(jié)的確認后,再將緩存中的所有字符組裝成一個報文發(fā)送出去,同時繼續(xù)對到達的字符進行緩存。只有在收到確認后才發(fā)送下一個報文。為解決字符到達快、網(wǎng)絡速度慢的情況,還規(guī)定:當?shù)竭_的字節(jié)達到窗口大小的一半或者已達到報文的最大長度時,就立即發(fā)送下一個報文。,雖然Nagle算法已被很多TCP程序采用,但是有時候最好不用。如:在Internet上使用X-Windows,小消息(鼠標移
60、動)必須無時延地發(fā)送,以便為進行某種操作的交互用戶提供實時的反饋。當服務器接收到該字符后,它并不發(fā)送確認,而是繼續(xù)等待接收序列中的其他字符。對交互用戶而言,這將產(chǎn)生明顯的時延,使用戶無法忍受,這時最好關(guān)閉這個算法。,糊涂窗口綜合癥,接受端的緩存已滿,而交互式的應用進程一次只從緩存中讀取1個字符,然后向發(fā)送端發(fā)確認,并通知窗口為1字節(jié)(發(fā)40字節(jié)的IP報文)。接著,發(fā)送端又發(fā)來1個字節(jié)(發(fā)41字節(jié)的IP報文)。接收端發(fā)確認,仍然通
61、知窗口為1字節(jié)。如此進行下去…使得網(wǎng)絡效率非常低,兩種解決方法,Clark方法:禁止接收方發(fā)送1字節(jié)的窗口,而是讓接收端等待一段時間,等到緩存能容納一個最長的報文段,或者空出一般的空間,才發(fā)送確認。發(fā)送端不要發(fā)送太小的報文段,而是將數(shù)據(jù)積累成足夠大的報文段,或者當接收端有一半的空閑緩存時才發(fā)送。這兩種方法可配合使用,,交互數(shù)據(jù)總是以小于最大報文段長度的分組發(fā)送,二、TCP的成塊數(shù)據(jù)流,TCP 采用大小可變的滑動窗口進行流量控制。窗
62、口大小的單位是字節(jié)。在 TCP 報文段首部的窗口字段寫入的數(shù)值就是當前給對方設(shè)置的發(fā)送窗口數(shù)值的上限。發(fā)送窗口在連接建立時由雙方商定。但在通信的過程中,接收端可根據(jù)自己的資源情況,隨時動態(tài)地調(diào)整對方的發(fā)送窗口上限值(可增大或減小)。,TCP 的可變滑動窗口,發(fā)方,收方,,,,,Window size = 3Send 2,,,,,Window size = 3Send 1,,,,Window size = 3Send 3,發(fā)方,
63、收方,,,Window size = 3Send 2,,,,,,Window size = 3Send 1,,,,,,Window size = 3Send 3,,ACK 3Window size = 2,Packet 3 isDropped,發(fā)方,收方,,,Window size = 3Send 2,,,,,,Window size = 3Send 1,,,,,,Window size = 3Send 3,,ACK 3
64、Window size = 2,Packet 3 isDropped,,Window size = 2Send 4,,Window size = 2Send 3,,,發(fā)方,收方,,,Window size = 3Send 2,,,,,,Window size = 3Send 1,,,,,,Window size = 3Send 3,Packet 3 isDropped,,Window size = 2Send 4,,W
65、indow size = 2Send 3,,,,,ACK 5Window size = 2,,Window size = 3,,發(fā)方,收方,,,,收到確認即可前移,,,,,,,,,,,100,200,300,400,500,600,700,800,900,101,201,301,401,501,601,701,801,1,,,,,可發(fā)送,不可發(fā)送,,發(fā)送端要發(fā)送 900 字節(jié)長的數(shù)據(jù),劃分為 9 個 100 字節(jié)長的報文段,而發(fā)送窗
66、口確定為 500 字節(jié)。發(fā)送端只要收到了對方的確認,發(fā)送窗口就可前移。發(fā)送 TCP 要維護一個指針。每發(fā)送一個報文段,指針就向前移動一個報文段的距離。,,,,,,收到確認即可前移,,,,,,,,,,,,,100,200,300,400,500,600,700,800,900,101,201,301,401,501,601,701,801,1,,,,,,,不可發(fā)送,,,,,,,,,,,,100,200,300,400,500,600,
67、700,800,900,101,201,301,401,501,601,701,801,1,,發(fā)送窗口,,,,,可發(fā)送,不可發(fā)送,,,,發(fā)送窗口前移,發(fā)送端已發(fā)送了 400 字節(jié)的數(shù)據(jù),但只收到對前 200 字節(jié)數(shù)據(jù)的確認,同時窗口大小不變?,F(xiàn)在發(fā)送端還可發(fā)送 300 字節(jié)。,,,,,,,,,,,,,,,,,,100,200,300,400,500,600,700,800,900,101,201,301,401,501,601,701
68、,801,1,,,,,,已發(fā)送并被確認,,,,,已發(fā)送但未被確認,可發(fā)送,不可發(fā)送,,,指針,,,,,,,,,,,,,100,200,300,400,500,600,700,800,900,101,201,301,401,501,601,701,801,1,,,,,不可發(fā)送,,,指針,,,發(fā)送窗口前移,發(fā)送端收到了對方對前 400 字節(jié)數(shù)據(jù)的確認,但對方通知發(fā)送端必須把窗口減小到 400 字節(jié)。現(xiàn)在發(fā)送端最多還可發(fā)送 400 字
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 協(xié)議分析-tcp協(xié)議解碼詳解
- 《課tcpip協(xié)議》ppt課件
- 利用wireshark工具分析tcp協(xié)議
- 用協(xié)議分析工具學習tcp
- TCP-Friendly協(xié)議研究.pdf
- tcp-ip協(xié)議與域名體系
- TCP協(xié)議的性能建模研究.pdf
- 2windows環(huán)境下tcp/ip協(xié)議的配置tcp/ip診斷
- 2windows環(huán)境下tcp/ip協(xié)議的配置tcp/ip診斷
- 《如何簽訂三方協(xié)議》ppt課件
- TCP協(xié)議DSP實現(xiàn)技術(shù)研究.pdf
- 畢業(yè)設(shè)計---tcp協(xié)議擁塞控制研究
- TCP-Friendly擁塞控制協(xié)議研究.pdf
- TCP-IP協(xié)議加速引擎設(shè)計.pdf
- Windows下的TCP協(xié)議棧開發(fā).pdf
- 無線TCP協(xié)議傳輸機制優(yōu)化研究.pdf
- c#基于tcp協(xié)議網(wǎng)絡聊天程序
- 傳輸控制協(xié)議(tcp)原理的動畫演示
- 內(nèi)嵌tcp/ip協(xié)議的cdma無線終端
- 外文翻譯--tcp友好的多播擁塞控制協(xié)議
評論
0/150
提交評論