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