【文章內(nèi)容簡介】
節(jié)為計算單位)。 TCP 首部 20 字節(jié) 固定 首部 目 的 端 口 數(shù)據(jù) 偏移 檢 驗 和 選 項 (長 度 可 變) 源 端 口 序 號 緊 急 指 針 窗 口 確 認 號 保 留 F I N S Y N R S T P S H A C K U R G 位 0 8 16 24 31 填 充 保留字段 ——占 6 位,保留為今后使用,但目前應置為 0。 TCP 首部 20 字節(jié) 固定 首部 目 的 端 口 數(shù)據(jù) 偏移 檢 驗 和 選 項 (長 度 可 變) 源 端 口 序 號 緊 急 指 針 窗 口 確 認 號 保 留 F I N S Y N R S T P S H A C K U R G 位 0 8 16 24 31 填 充 緊急 URG —— 當 URG ? 1 時,表明緊急指針字段有效。它告訴系統(tǒng)此報文段中有緊急數(shù)據(jù),應盡快傳送 (相當于高優(yōu)先級的數(shù)據(jù) )。 TCP 首部 20 字節(jié) 固定 首部 目 的 端 口 數(shù)據(jù) 偏移 檢 驗 和 選 項 (長 度 可 變) 源 端 口 序 號 緊 急 指 針 窗 口 確 認 號 保 留 F I N S Y N R S T P S H A C K U R G 位 0 8 16 24 31 填 充 確認 ACK —— 只有當 ACK ? 1 時確認號字段才有效。當 ACK ? 0 時,確認號無效。 TCP 首部 20 字節(jié) 固定 首部 目 的 端 口 數(shù)據(jù) 偏移 檢 驗 和 選 項 (長 度 可 變) 源 端 口 序 號 緊 急 指 針 窗 口 確 認 號 保 留 F I N S Y N R S T P S H A C K U R G 位 0 8 16 24 31 填 充 推送 PSH (PuSH) —— 接收 TCP 收到 PSH = 1 的報文段,就盡快地交付接收應用進程,而不再等到整個緩存都填滿了后再向上交付。 TCP 首部 20 字節(jié) 固定 首部 目 的 端 口 數(shù)據(jù) 偏移 檢 驗 和 選 項 (長 度 可 變) 源 端 口 序 號 緊 急 指 針 窗 口 確 認 號 保 留 F I N S Y N R S T P S H A C K U R G 位 0 8 16 24 31 填 充 復位 RST (ReSeT) —— 當 RST ? 1 時,表明 TCP 連接中出現(xiàn)嚴重差錯(如由于主機崩潰或其他原因),必須釋放連接,然后再重新建立運輸連接。 TCP 首部 20 字節(jié) 固定 首部 目 的 端 口 數(shù)據(jù) 偏移 檢 驗 和 選 項 (長 度 可 變) 源 端 口 序 號 緊 急 指 針 窗 口 確 認 號 保 留 F I N S Y N R S T P S H A C K U R G 位 0 8 16 24 31 填 充 同步 SYN —— 同步 SYN = 1 表示這是一個連接請求或連接接受報文。 TCP 首部 20 字節(jié) 固定 首部 目 的 端 口 數(shù)據(jù) 偏移 檢 驗 和 選 項 (長 度 可 變) 源 端 口 序 號 緊 急 指 針 窗 口 確 認 號 保 留 F I N S Y N R S T P S H A C K U R G 位 0 8 16 24 31 填 充 終止 FIN (FINis) —— 用來釋放一個連接。 FIN ? 1 表明此報文段的發(fā)送端的數(shù)據(jù)已發(fā)送完畢,并要求釋放運輸連接。 TCP 首部 20 字節(jié) 固定 首部 目 的 端 口 數(shù)據(jù) 偏移 檢 驗 和 選 項 (長 度 可 變) 源 端 口 序 號 緊 急 指 針 窗 口 確 認 號 保 留 F I N S Y N R S T P S H A C K U R G 位 0 8 16 24 31 填 充 窗口字段 —— 發(fā)送本報文段的一方的接收窗口。窗口值告訴對方:從本報文段首部中的確認號算起, 接收方目前允許對方發(fā)送的數(shù)據(jù)量,即用來讓對方設(shè)置發(fā)送窗口的依據(jù) ,單位為字節(jié)。 ? 例如:設(shè)確認號是 701,窗口號字段是1000。這就表明,從 701號算起,發(fā)送此報文段的一方還有接收 1000個字節(jié)數(shù)據(jù)的接收緩存空間。 ?窗口字段明確指出了現(xiàn)在允許對方發(fā)送的數(shù)據(jù)量。窗口值是經(jīng)常在動態(tài)變化的。 TCP 首部 20 字節(jié) 固定 首部 目 的 端 口 數(shù)據(jù) 偏移 檢 驗 和 選 項 (長 度 可 變) 源 端 口 序 號 緊 急 指 針 窗 口 確 認 號 保 留 F I N S Y N R S T P S H A C K U R G 位 0 8 16 24 31 填 充 檢驗和 —— 占 2 字節(jié) 。 檢驗和字段檢驗的范圍包括首部和數(shù)據(jù)這兩部分 。 在計算檢驗和時 , 要在 TCP 報文段的前面加上 12 字節(jié)的偽首部 。 TCP 首部 20 字節(jié) 固定 首部 目 的 端 口 數(shù)據(jù) 偏移 檢 驗 和 選 項 (長 度 可 變) 源 端 口 序 號 緊 急 指 針 窗 口 確 認 號 保 留 F I N S Y N R S T P S H A C K U R G 位 0 8 16 24 31 填 充 緊急指針字段 —— 占 16 位 , 指出在本報文段中緊急數(shù)據(jù)共有多少個字節(jié) ( 緊急數(shù)據(jù)放在本報文段數(shù)據(jù)的最前面 ) 。 TCP 首部 20 字節(jié) 固定 首部 目 的 端 口 數(shù)據(jù) 偏移 檢 驗 和 選 項 (長 度 可 變) 源 端 口 序 號 緊 急 指 針 窗 口 確 認 號 保 留 F I N S Y N R S T P S H A C K U R G 比特 0 8 16 24 31 填 充 選項字段 —— 長度可變 。 TCP 最初只規(guī)定了一種選項 , 即最大報文段長度 MSS。 MSS 告訴對方 TCP: “ 我的緩存所能接收的報文段的數(shù)據(jù)字段的最大長度是 MSS 個字節(jié) 。 ” MSS (Maximum Segment Size) 是 TCP 報文段中的 數(shù)據(jù)字段 的最大長度。 數(shù)據(jù)字段加上 TCP 首部 才等于整個的 TCP 報文段。 ? 為什么要規(guī)定 MSS? ? MSS值較小,網(wǎng)絡(luò)利用率較低; ? MSS設(shè)置太大, IP層就需要分片。 MSS由雙方協(xié)商,默認 MSS為 536字節(jié)。 其他選項 ? 窗口擴大選項 ——占 3 字節(jié),其中有一個字節(jié)表示移位值 S。新的窗口值等于 TCP 首部中的窗口位數(shù)增大到 (16 + S),相當于把窗口值向左移動 S 位后獲得實際的窗口大小。 ? 時間戳選項 ——占 10 字節(jié),其中最主要的字段時間戳值字段( 4 字節(jié))和時間戳回送回答字段( 4 字節(jié))。 ? 選擇確認選項 ——在后面的 節(jié)介紹。 TCP 首部 20 字節(jié) 固定 首部 目 的 端 口 數(shù)據(jù) 偏移 檢 驗 和 選 項 (長 度 可 變) 源 端 口 序 號 緊 急 指 針 窗 口 確 認 號 保 留 F I N S Y N R S T P S H A C K U R G 位 0 8 16 24 31 填 充 填充字段 —— 這是為了使整個首部長度是 4 字節(jié)的整數(shù)倍 。 TCP 可靠傳輸?shù)膶崿F(xiàn) 以字節(jié)為單位的滑動窗口 前移 不允許發(fā)送 已發(fā)送并 收到確認 A 的發(fā)送窗口 = 20 允許發(fā)送的序號 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 B 期望 收到的序號 前沿 后沿 前移 收縮 根據(jù) B 給出的窗口值 A 構(gòu)造出自己的發(fā)送窗口 TCP 標準強烈不贊成 發(fā)送窗口前沿向后收縮 不允許發(fā)送 已發(fā)送并 收到確認 A 的發(fā)送窗口位置不變 允許發(fā)送但尚未發(fā)送 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 已發(fā)送但未收到確認 56 P1 P2 P3