TCP協議隨筆

2022-03-08 02:54:20 字數 2309 閱讀 1023

傳輸控制協議tcp是面向連線、保證高可靠性(資料無丟失、資料無失序、資料無錯誤、資料無重複到達)傳輸層協議。

tcp/ip結構對應osi

tcp/ip                                    osi

應用層                                    應用層

表示層會話層

傳輸層                                    傳輸層

網路層                                    網路層

網路介面層(又稱資料鏈路層)     資料鏈路層

物理層tcp報文格式 :

1. 序號:seq序號,佔32位,用來標識從tcp源端向目的端傳送的位元組流,發起方傳送資料時對此進行標記。

2. 確認序號:ack序號,佔32位,只有ack標誌位為1時,確認序號欄位才有效,ack=seq+1。

3. 標誌位:共6個,即urg、ack、psh、rst、syn、fin等,具體含義如下:

a. urg:緊急指標有效。

b. ack:確認序號有效。

c. psh:指示接收方應該盡快將這個報文段交給應用層而不用等待緩衝區裝滿

d. rst:重置連線(一般表示斷開乙個連線)。

e. syn:發起乙個新連線。

f. fin:釋放乙個連線。

*注意: 不要將確認序號ack與標誌位中的ack搞混了。

確認方ack=發起方seq+1,兩端配對。

tcp三次握手 :

1. 第一次握手:client將標誌位syn置為1,隨機產生乙個值seq=j,並將該資料報傳送給server,client進入syn_sent狀態,等待server確認。

2. 第二次握手:server收到資料報後由標誌位syn=1知道client請求建立連線,server將標誌位syn和ack都置為1,

ack=j+1,隨機產生乙個值seq=k,並將該資料報傳送給client以確認連線請求,server進入syn_rcvd狀態。

3. 第三次握手: client收到確認後,檢查ack是否為j+1,ack是否為1,如果正確則將標誌位ack置為1,ack=k+1,

並將該資料報傳送給server,server檢查ack是否為k+1,ack是否為1,如果正確則連線建立成功,

client和server進入established(已建立連線)狀態,完成三次握手,隨後client與server之間可以開始傳輸資料了。

* syn攻擊: 在三次握手過程中,server傳送syn-ack之後,收到client的ack之前的tcp連線稱為半連線(half-open connect),

此時server處於syn_rcvd狀態,當收到ack後,server轉入established狀態。

syn攻擊就是client在短時間內偽造大量不存在的ip位址,並向server不斷地傳送syn包,

server回覆確認包,並等待client的確認,由於源位址是不存在的,因此,server需要不斷重發直至超時,

這些偽造的syn包將長時間占用未連線佇列,導致正常的syn請求因為佇列滿而被丟棄,從而引起網路堵塞甚至系統癱瘓。

syn攻擊是一種典型的ddos(分布式拒絕服務)攻擊,檢測syn攻擊的方式非常簡單,

即當server上有大量半連線狀態且源ip位址是隨機的,則可以斷定遭到syn攻擊了,使用如下命令可以讓之現行:

netstat -nap | grep syn_recv

tcp四次揮手 :

1. 第一次揮手: client傳送乙個fin,用來關閉client到server的資料傳送,client進入fin_wait_1狀態。

2. 第二次揮手:server收到fin後,傳送乙個ack給client,確認序號為收到序號+1(與syn相同,乙個fin占用乙個序號),

server進入close_wait狀態。

3. 第三次揮手:server傳送乙個fin,用來關閉server到client的資料傳送,server進入last_ack狀態。

4. 第四次揮手:client收到fin後,client進入time_wait狀態,接著傳送乙個ack給server,

確認序號為收到序號+1,server進入closed狀態,完成四次揮手。

* 服務端在listen狀態下,收到建立連線請求的syn報文後,把ack和syn放在乙個報文裡傳送給客戶端。

而關閉連線時,當收到對方的fin報文時,僅僅表示對方不再傳送資料了但是還能接收資料,

己方也未必全部資料都傳送給對方了,所以己方可以立即close,也可以傳送一些資料給對方後,

再傳送fin報文給對方來表示同意現在關閉連線,因此,己方ack和fin一般都會分開傳送。

tcp協議隨筆

1 滑動視窗 為了避免網路擁塞,滑動視窗裡已傳送但未收到ack確認的訊息,收到ack後,傳送訊息的視窗往前移以便傳送新的資料。這個過程就是滑動視窗 2 為了避免網路擁塞,傳送端的傳送速度由 接收視窗和擁塞視窗大小決定,傳送端視窗大小取兩者最小值 a 慢開始演算法 tcp連線後擁塞視窗為1,然後每次收...

TCP協議隨筆

listen blog介紹 limit the backlog parameter to fit in an u8 t backlog lwip min lwip max backlog,0 0xff err netconn listen with backlog sock conn,u8 t ba...

TCP IP隨筆 TCP協議詳解

tcp協議詳解 應用層 訊息 報文包含了將要傳送的完整的資料資訊 傳輸層 資料段 報文段 segment 注 tcp叫tcp報文段,udp叫udp資料報,也有人叫udp段 網路層 分組 資料報 packet 鏈路層 幀 frame 物理層 p pdu bit 位元組流和資料報都是一種資料傳遞方式 t...