理解TCP/IP協議(二)

作者:珠峰架構課學員日期:2018-04-15 19:37:55 點擊:986

五、TCP報文

數據包

IP 數據包在以太網數據包的負載里面,TCP數據包在IP數據包的負載里。

TCP 首部各字段的意義和作用

TCP首部最小為20字節,這20字節分為5行,每行4個字節也就是32個位。

源端口和目的端口 Port

  • 源端口號:16位的源端口中包含初始化通信的端口。源端口和源IP地址的作用是標識報文的返回地址。
  • 目的端口號:16位的目的端口域定義傳輸的目的。這個端口指明報文接收計算機上的應用程序地址接口。計算機通過端口號識別訪問哪個服務,比如http服務或ftp服務,發送方端口號是進行隨機端口,目標端口號決定了接收方哪個程序來接收 分別占用16位,也就是端口號最大是2^16,所以端口號的范圍是0~65536

端口號的分配:

  • 知名端口號一般位于:1 — 255 之間
  • 256 — 1023的端口號,通常是由Unix系統占用(系統占用)
  • 1024 —5000 是大多數TCP、IP實現的臨時分配
  • 大于5000的一般是給其他服務預留的(Internet上并不常用的服務)

序號 Sequence Number

TCP用序列號對數據包進行標記,以便在到達目的地后重新重裝,假設當前的序列號為 s,發送數據長度為 l,則下次發送數據時的序列號為 s + l。在建立連接時通常由計算機生成一個隨機數作為序列號的初始值。

確認號 Acknowledgemt Number

占 4 個字節,表示期望收到對方下一個報文段的序號值。 TCP 的可靠性,是建立在「每一個數據報文都需要確認收到」的基礎之上的。

就是說,通訊的任何一方在收到對方的一個報文之后,都要發送一個相對應的「確認報文」,來表達確認收到。 那么,確認報文,就會包含確認號。 例如,通訊的一方收到了第一個 25kb 的報文,該報文的 序號值=0,那么就需要回復一個確認報文,其中的確認號 = 25600.

數據偏移 Offset

占 0.5 個字節 (4 位)。 這個字段實際上是指出了 TCP 報文段的首部長度 ,它指出了 TCP報文段的數據起始處 距離 TCP報文的起始處 有多遠。(注意 數據起始處 和 報文起始處 的意思)

一個數據偏移量 = 4 byte,由于 4 位二進制數能表示的最大十進制數字是 15,因此數據偏移的最大值是 60 byte,這也側面限制了 TCP 首部的最大長度。

保留 Reserved

占 0.75 個字節 (6 位)。 保留為今后使用,但目前應置為 0。

標志位 TCP Flags

標志位,一共有 6 個,分別占 1 位,共 6 位 。 每一位的值只有 0 和 1,分別表達不同意思。

  • ACK:確認序號有效
  • RST:重置連接
  • SYN:發起了一個新連接
  • FIN:釋放一個連接

確認 ACK (Acknowlegemt)

當 ACK = 1 的時候,確認號(Acknowledgemt Number)有效。 一般稱攜帶 ACK 標志的 TCP 報文段為「確認報文段」。為0表示數據段不包含確認信息,確認號被忽略。

TCP 規定,在連接建立后所有傳送的報文段都必須把 ACK 設置為 1。

推送 PSH (Push)

當 PSH = 1 的時候,表示該報文段高優先級,接收方 TCP 應該盡快推送給接收應用程序,而不用等到整個 TCP 緩存都填滿了后再交付。

復位 RST (Reset)

當 RST = 1 的時候,表示 TCP 連接中出現嚴重錯誤,需要釋放并重新建立連接。 一般稱攜帶 RST 標志的 TCP 報文段為「復位報文段」。

同步 SYN (SYNchronization)

當 SYN = 1 的時候,表明這是一個請求連接報文段。 一般稱攜帶 SYN 標志的 TCP 報文段為「同步報文段」。 在 TCP 三次握手中的第一個報文就是同步報文段,在連接建立時用來同步序號。

對方若同意建立連接,則應在響應的報文段中使 SYN = 1 和 ACK = 1。

終止 FIN (Finis)

當 FIN = 1 時,表示此報文段的發送方的數據已經發送完畢,并要求釋放 TCP 連接。

一般稱攜帶 FIN 的報文段為「結束報文段」。

在 TCP 四次揮手釋放連接的時候,就會用到該標志。

窗口大小 Window Size

占 2 字節。

該字段明確指出了現在允許對方發送的數據量,它告訴對方本端的 TCP 接收緩沖區還能容納多少字節的數據,這樣對方就可以控制發送數據的速度。 窗口大小的值是指,從本報文段首部中的確認號算起,接收方目前允許對方發送的數據量。

例如,假如確認號是 701 ,窗口字段是 1000。這就表明,從 701 號算起,發送此報文段的一方還有接收 1000 (字節序號是 701 ~ 1700) 個字節的數據的接收緩存空間。

校驗和 TCP Checksum

占 2 個字節。 由發送端填充,接收端對 TCP 報文段執行 CRC 算法,以檢驗 TCP 報文段在傳輸過程中是否損壞,如果損壞這丟棄。

檢驗范圍包括首部和數據兩部分,這也是 TCP 可靠傳輸的一個重要保障。

緊急指針 Urgent Pointer

占 2 個字節。 僅在 URG = 1 時才有意義,它指出本報文段中的緊急數據的字節數。 當 URG = 1 時,發送方 TCP 就把緊急數據插入到本報文段數據的最前面,而在緊急數據后面的數據仍是普通數據。

因此,緊急指針指出了緊急數據的末尾在報文段中的位置。

六、三次握手,四次揮手

需要了解的信息:

  • ACK : TCP協議規定,只有ACK=1時有效,也規定連接建立后所有發送的報文的ACK必須為1
  • SYN(SYNchronization) : 在連接建立時用來同步序號。當SYN=1而ACK=0時,表明這是一個連接請求報文。對方若同意建立連接,則應在響應報文中使SYN=1和ACK=1. 因此, SYN置1就表示這是一個連接請求或連接接受報文。
  • FIN (finis)即完,終結的意思, 用來釋放一個連接。當 FIN = 1 時,表明此報文段的發送方的數據已經發送完畢,并要求釋放連接。

三次握手 建立連接

TCP(Transmission Control Protocol,傳輸控制協議)是 面向連接的協議,也就是說在收發數據之前,必須先和對方建立連接

一個TCP連接必須要經過三次“對話”才能建立起來,其中的過程非常復雜,只簡單的 描述下這三次對話的簡單過程:主機A向主機B發出連接請求數據包:“我想給你發數據,可以嗎?”,這是第一次對話;主機B向主機A發送同意連接和要求同步 (同步就是兩臺主機一個在發送,一個在接收,協調工作)的數據包:“可以,你什么時候發?”,這是第二次對話;主機A再發出一個數據包確認主機B的要求同 步:“我現在就發,你接著吧!”,這是第三次對話。三次“對話”的目的是使數據包的發送和接收同步,經過三次“對話”之后,主機A才向主機B正式發送數 據。

首先由Client發出請求連接即 SYN=1 ACK=0 (請看頭字段的介紹), TCP規定SYN=1時不能攜帶數據,但要消耗一個序號,因此聲明自己的32位序號是 seq=x,然后 Server 進行回復確認,即 SYN=1 ACK=1 seq=y, ack=x+1, 再然后 Client 再進行一次確認,但不用SYN 了,這時即為 ACK=1, seq=x+1, ack=y+1.

四次揮手 釋放連接

當客戶A 沒有東西要發送時就要釋放 A 這邊的連接,A會發送一個報文(沒有數據),其中 FIN 設置為1, 服務器B收到后會給應用程序一個信,這時A那邊的連接已經關閉,即A不再發送信息(但仍可接收信息)。 A收到B的確認后進入等待狀態,等待B請求釋放連接, B數據發送完成后就向A請求連接釋放,也是用FIN=1 表示, 并且用 ack = u+1(如圖), A收到后回復一個確認信息,并進入 TIME_WAIT 狀態, 等待 2MSL 時間。

關于 TIME_WAIT 過渡到 CLOSED 狀態說明: 從 TIME_WAIT 進入 CLOSED 需要經過 2MSL,其中 MSL 就叫做 最長報文段壽命(Maxinum Segment Lifetime),根據 RFC 793 建議該值這是為 2 分鐘,也就是說需要經過 4 分鐘,才進入 CLOSED 狀態。

為什么要等待呢?

為了這種情況: B向A發送 FIN = 1 的釋放連接請求,但這個報文丟失了, A沒有接到不會發送確認信息, B 超時會重傳,這時A在 WAIT_TIME 還能夠接收到這個請求,這時再回復一個確認就行了。(A收到 FIN = 1 的請求后 WAIT_TIME會重新記時)

另外服務器B存在一個保活狀態,即如果A突然故障死機了,那B那邊的連接資源什么時候能釋放呢? 就是保活時間到了后,B會發送探測信息, 以決定是否釋放連接

為什么連接的時候是三次握手,關閉的時候卻是四次握手?

答:因為當Server端收到Client端的SYN連接請求報文后,可以直接發送SYN+ACK報文。其中ACK報文是用來應答的,SYN報文是用來同步的。但是關閉連接時,當Server端收到FIN報文時,很可能并不會立即關閉SOCKET,所以只能先回復一個ACK報文,告訴Client端,”你發的FIN報文我收到了”。只有等到我Server端所有的報文都發送完了,我才能發送FIN報文,因此不能一起發送。故需要四步握手。

上一篇: 理解TCP/IP協議(一)

下一篇: 返回列表

我要看A级毛片_多多屋影院,中文字幕国产在线播放,日本近親倫亂中文字幕AV視頻 <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>