TCP IP 協議簡單分析

2022-05-06 13:51:13 字數 4552 閱讀 2421

首先

tcp和

ip是兩種不同的協議,它們來七層網路模型中分別在不同的層次,

ip協議是網路層的協議,

tcp是更高一層的傳輸層的協議,

tcp是建立在

ip協議之上的,所以一般把

tcp和

ip連在一起說

tcp/ip

協議。windows

系統的tcp

協議棧的資料報預設是

1460

位元組大小,如果一次傳輸的資料大於這個長度,會把分割成幾個長度都不大於

1460

位元組的tcp

資料報,每個資料報都會被賦予乙個

sequnce number

(相當於每個資料報的順序號,憑這個接收端可以知道資料報的前後順序)

之後tcp

的資料報再被包裹上一層

ip的資料的頭,形成

ip資料報在網上傳輸(其實最後還要包一層乙太網資料報,網路上最終傳輸的都是乙太網資料報)。

ip資料報到了目的地後,接收端首先把

ip資料報的包頭去掉,取出

tcp的包。接收端每收到乙個

tcp的資料報都需要返回給傳送端乙個

ack的資料報告訴傳送端已接到此資料報,如果發收端在一定的時間內沒有收到某個資料報的

ack響應,會再次傳送這個資料報,這樣就保證了資料都能被接收端接收到(網際網路上丟資料報是很正常的事,如果沒有資料報重發機制,很難保證傳送的資料都能被接收端完整的收到)。

每個tcp

資料報也是由包頭和實際資料組成,包頭包含如下主要內容:

lsource port(2

位元組)傳送端的埠號

ldestination port(2

位元組)接收端的埠號

tcp包頭中只包含雙方的埠號,雙方的

ip位址在

ip包的包頭,所以在

tcp資料報的包頭中沒有

ip位址。

lsequence number(4

位元組)資料的順序號,表示當前資料報中的資料起始順序號,比如前乙個資料報的

seq為十六進製制的:

df d5 aa 3d

,資料報的實際資料長度為

16位元組,那麼下乙個資料報的

seq就要在前乙個資料報的

seq基礎上加上

16,為:

df d5 aa 4d

lacknowledgement number(4

位元組)接收到對方的某個資料報後的回應順序號。如果接收到了對方主動傳送來的某個資料報,必須要返回對方乙個

ack回應資料報,資料報的頭部的

acknowledgement number

部分根據對方傳送資料的

seq和實際資料長度,返回

seq +

實際資料長度,表示已經接收到這個資料報。對方收到這個回應,根據數值計算後知道這個資料報已經被對方接收。如果接收不到

ack的回應,就意味著這個資料報已經在網上被丟失,需要重新傳送此資料報。

lheader length(1

位元組)表示

tcp資料報的包頭長度,整個

tcp資料報的長度減包頭長度就能得到

tcp資料報的實際傳送的資料長度。

lflags(1

位元組)標誌位元組,每一位都是乙個標誌,以下是幾個主要標誌:

ack

表示資料報是個

ack回應資料報,表示接收到了對方的某個資料報,具體哪個包由包頭的

acknowledgement number

部分指示。

psh

表示這是個有實際資料的包。

syn

表示這是個建立連線的資料報,通訊雙方要通訊,總是由客戶端先傳送

syn資料報到服務端以建立

tcp的連線。

fin

表示通訊結束,拆除連線的資料報。

下面描述一次

tcp傳送資料的完整過程,以乙個客戶端向服務端傳送一些資料為例。

.一次完整的

tcp通訊的過程

tcp是面向連線的協議,客戶端和服務端要通訊就必須先建立乙個連線。首先通訊雙方都有位址,就是

ip位址加埠號(

ip:port

)標識通訊的每一端,客戶端的

ip:port

跟伺服器

ip:port

之間就構成乙個

socket

套接字。所謂建立連線就是在客戶端的

ip:port

跟伺服器

ip:port

之間建立乙個通道,初始化一些通訊的基礎設定,以便以後的資料通訊的正常進行。

總是客戶端發起連線,首先客戶端傳送

syn資料報到服務端以建立

tcp連線。

syn資料報只有

tcp包頭,沒有實際資料。

flags

標誌位元組的

syn位置位,表示是

syn資料報。

sequence number

由客戶端隨機生成乙個

4位元組的資料,作為本次連線通訊客戶端資料的起始順序號,以後客戶端發往服務端的資料報的

sequence number

都在此基礎上加上每次傳送的實際資料長度依次相加遞增,這樣根據每個資料報的

sequence number

就能判斷出資料報的前後順序,以便接收方根據資料報的順序拼接資料報。

服務端收到客戶端的

syn後,首先要傳送乙個

ack資料報給客戶端表示收到了這個資料報。

資料報的

flags

標誌位元組的

ack置位,表示是

ack回應資料報。

acknowledgement number

設定為接收到的資料報的

seq +

資料報實際長度,因為接收到的

syn的實際資料長度為

0,但是

tcp協議認為實際長度為

0的主動傳送的資料長度為1,

syn是客戶端主動傳送的資料報,所以服務端把

acknowledgement number

設定為接收到的資料報的

seq + 1

。tcp

通訊可以是雙向的,一旦建立了連線,服務端也可以向客戶端傳送資料。

所以服務端也會向客戶端傳送乙個

syn包,資料報的

flags

標誌位元組的

syn置位,表示是

syn資料報,同時隨機生成乙個

4位元組的資料,作為本次連線通訊服務端資料的起始順序號

sequence number

。實際中,服務端把這兩個資料報合併為乙個資料報,

syn和

ack都是置位,

sequence number

和acknowledgement number

也同時設定,作為乙個資料報傳送回客戶端。

客戶端收到服務端的

syn資料報後,需要回應乙個

ack資料報,表示接收到此資料報。同樣

ack資料報的

acknowledgement number

設定為接收到的資料報的

seq + 1

(syn

、ack

資料報的實際資料長度也是0)。

通訊雙方建立了連線後,就可以相互進行資料報的傳送。

傳送資料的一端,把資料報的

flags

標準位元組的

psh置位,表示是有實際資料的資料報。

sequence number

置為前一次的資料報的

sequence number

加上前一次資料報的長度。

如果資料報還兼做

ack包,則把

ack置位,同時設定好

acknowledgement number

把資料報傳送到對方。

接收方收到對方主動傳送的資料資料報後,一定要回覆

ack資料報,如果同時有資料發往對方,可以把實際資料報跟

ack資料報合在一起傳送。

在拆除連線之前,通訊雙方可以一直相互傳送接收資料,資料的順序都建立在各自的

sequence number

基礎上。圖1

中,藍色部分的資料通訊就表示這一階段。

雙方資料交換完畢,需要拆除連線,結束通訊。

通訊的一方向另一方傳送

fin資料報表示要結束通訊,拆除連線。

客戶端把資料報的

flags

標準位元組的

fin置位,表示是通訊結束資料報。

服務端收到客戶端的

fin資料報後,先回應乙個

ack資料報,然後也傳送乙個

fin資料報,還是服務端也結束通訊。

客戶端回應

ack表示接收到服務端的

fin資料,雙方通訊結束。

**

TCP IP協議分析實驗

下面幾張展示一台windows主機使用ethereal捕獲資料報的情況 第一張是總體捕獲情況,後面三張是每一條資料的詳細情況。分析 36 37為dns解析過程,38 39 40這三行顯示的是tcp建立連線時的三次握手情況,41為http傳輸過程。下面以第38行的資料報為例,根據資料報封裝的各個協議位...

TCP IP協議簡單介紹

tcp ip 是用於網際網路 internet 的通訊協議。是基於 tcp 和 ip 這兩個最初的協議之上的不同的通訊協議的大的集合 即協議簇 tcp 用於從應用程式到網路的資料傳輸控制。tcp 負責在資料傳送之前將它們分割為 ip 包,然後在它們到達的時候將它們重組。udp用於從應用程式間的簡單通...

TCP IP協議簡單思考

網路協議的目的是資料傳輸,網路上的兩個節點要通訊,例如節點a向節點b傳送資料1,最直接 簡單的方式是在兩個節點間拉根線,然後配合數模轉化,傳輸就能完成。但是真實的網路是複雜的。節點千千萬 網路範圍大 兩兩拉線,線不夠,兩通訊節點可能相隔十萬八千里,沒那麼長的線 節點內通訊需求多樣 端對端 可靠性 實...