1. 程式人生 > >理解TCP序列號(Sequence Number)和確認號(Acknowledgment Number)

理解TCP序列號(Sequence Number)和確認號(Acknowledgment Number)

一、概念及作用

TCP會話的每一端都包含一個32位(bit)的序列號,該序列號被用來跟蹤該端傳送的資料量。每一個包中都包含序列號,在接收端則通過確認號用來通知傳送端資料成功接收。

二、TCP三次握手

TCP標誌位

TCP在其協議頭中使用大量的標誌位或者說1位(bit)布林域來控制連線狀態,一個包中有可以設定多個標誌位。

TCP是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立一個連線:

位碼即TCP標誌位,有6種標示:SYN(synchronous建立聯機) ACK(acknowledgement 確認) PSH(push傳送) FIN(finish結束) RST(reset重置) URG(urgent緊急)Sequence number(順序號碼) Acknowledge number(確認號碼)
我們常用的是以下三個標誌位:

  • SYN - 建立一個連線

  • FIN - 終結一個連線

  • ACK - 確認接收到的資料

握手過程

所謂三次握手(Three-way Handshake),是指建立一個TCP連線時,需要客戶端和伺服器總共傳送3個包。

三次握手的目的是連線伺服器指定埠,建立TCP連線,並同步連線雙方的序列號和確認號並交換 TCP 視窗大小資訊.在socket程式設計中,客戶端執行connect()時。將觸發三次握手。

1.第一次握手:建立連線時,客戶端傳送syn包(syn=j)到伺服器,並進入SYN_SEND狀態,等待伺服器確認;

2.第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也傳送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態;

3.第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器傳送確認包ACK(ack=k+1),此包傳送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手。完成三次握手,客戶端與伺服器開始傳送資料.

第一次握手:

客戶端傳送一個TCP的SYN標誌位置1的包指明客戶打算連線的伺服器的埠,以及初始序號X,儲存在包頭的序列號(Sequence Number)欄位裡。

第二次握手:

伺服器發回確認包(ACK)應答。即SYN標誌位和ACK標誌位均為1同時,將確認序號(Acknowledgement Number)設定為客戶的I S N加1以.即X+1。

第三次握手:

客戶端再次傳送確認包(ACK) SYN標誌位為0,ACK標誌位為1.並且把伺服器發來ACK的序號欄位+1,放在確定欄位中傳送給對方.並且在資料段放寫ISN的+1

syn攻擊

在三次握手過程中,伺服器傳送SYN-ACK之後,收到客戶端的ACK之前的TCP連線稱為半連線(half-open connect).此時伺服器處於Syn_RECV狀態.當收到ACK後,伺服器轉入ESTABLISHED狀態.

Syn攻擊就是 攻擊客戶端 在短時間內偽造大量不存在的IP地址,向伺服器不斷地傳送syn包,伺服器回覆確認包,並等待客戶的確認,由於源地址是不存在的,伺服器需要不斷的重發直 至超時,這些偽造的SYN包將長時間佔用未連線佇列,正常的SYN請求被丟棄,目標系統執行緩慢,嚴重者引起網路堵塞甚至系統癱瘓。

Syn攻擊是一個典型的DDOS攻擊。檢測SYN攻擊非常的方便,當你在伺服器上看到大量的半連線狀態時,特別是源IP地址是隨機的,基本上可以斷定這是一次SYN攻擊.在Linux下可以如下命令檢測是否被Syn攻擊

netstat -n -p TCP | grep SYN_RECV

一般較新的TCP/IP協議棧都對這一過程進行修正來防範Syn攻擊,修改tcp協議實現。主要方法有SynAttackProtect保護機制、SYN cookies技術、增加最大半連線和縮短超時時間等.

但是不能完全防範syn攻擊。

三、TCP四次揮手

TCP使用四次揮手關閉一個連線:

第一次揮手:主動關閉方傳送一個FIN並進入FIN_WAIT1狀態

第二次揮手:被動關閉方接收到主動關閉方傳送的FIN併發送ACK,此時被動關閉方進入CLOSE_WAIT狀態;主動關閉方收到被動關閉方的ACK後,進入FIN_WAIT2狀態

第三次揮手:被動關閉方傳送一個FIN並進入LAST_ACK狀態

第四次揮手:主動關閉方收到被動關閉方傳送的FIN併發送ACK,此時主動關閉方進入TIME_WAIT狀態,經過2MSL時間後關閉連線;被動關閉方收到主動關閉方的ACK後,關閉連線

相關推薦

理解TCP序列Sequence Number確認Acknowledgment Number

一、概念及作用 TCP會話的每一端都包含一個32位(bit)的序列號,該序列號被用來跟蹤該端傳送的資料量。每一個包中都包含序列號,在接收端則通過確認號用來通知傳送端資料成功接收。 二、TCP三次握手 TCP標誌位 TCP在其協議頭中使用大量的標誌位或者說1位(bi

TCP:WireShark分析,序列Seq確認Ack

數據包 作者 fontsize 隨機 釋放 三次握手 資源 2個 不顯示 轉載自 http://blog.csdn.net/a19881029/article/details/38091243 序列號為當前端成功發送的數據位數,確認號為當前端成功接收的數據位數,SY

形象理解線性代數——向量的點乘點積,內積叉乘外積

一、向量的點積 首先,我們知道向量的點積公式定義:                       (1) 但是當學過內積之後,我們對其又有了新的表述形式  

python學習:python的星號*雙星**用法

最初,星號變數是用在函式的引數傳遞上的,在下面的例項中,單個星號代表這個位置接收任意多個非關鍵字引數,在函式的*b位置上將其轉化成元組,而雙星號代表這個位置接收任意多個關鍵字引數,在**b位置上將其轉化成字典: *   該位置接受任意多個非關鍵字(non-keyword)引數,在函式中

關於php中依賴注入DI控制反轉IOC理解

一、什麼是依賴注入和控制反轉 1.依賴注入(DI)— Dependecy Injection 為了更方便的理解,我們把依賴注入分開理解,首先什麼是依賴?顧名思義,依賴就是各元件之間的一種關係。一般來說,在面向物件程式設計中,我們在類A中 使用到了 類B的例項,我們就可以說

對記憶化搜尋ms動態規劃dp的深入理解

    六月中旬了,馬上就要期末考試了,期末考試結束以後就要迎來緊張刺激的留校集訓,到那時部落格會更新的比較頻繁,而現在在準備期末考試,所以可能更新的部落格稍微少一些。    話不多說,今天來更一篇剛剛吃飯的時候關於記憶化搜尋和動態規劃的一些區別的思考。    記憶化搜尋(M

線段樹進階總結重要各種題型練習題

前言: 線段樹這種資料結構是真的靈活,可以說只要是滿足區間合併的資訊都可以用線段樹來維護。線段樹可以分為區間樹(葉子節點是區間)和點樹(葉子節點是點),很多時候我們用的其實都是點樹,但是區間樹也有很大的作用。個人感覺線段樹的精髓就是區間資訊的合併和區間標記的下推。 線段樹

laravel服務容器-----深入理解控制反轉IoC依賴注入DI

首先大家想一想什麼是容器,字面意思就是盛放東西的東西,常見的變數,物件屬性都是容器,一個容器能夠裝什麼東西,完全在於你對這個容器的定義。有的容器不僅僅只是存文字,變數,而是物件,屬性,那麼我們通過這種容器就可以進行很多高階的功能。 IoC容器 IoC容器是larave

Laravel 學習筆記:深入理解控制反轉IoC依賴注入DI

目的:解耦和減少依賴關係; 控制反轉(IoC):由外部負責其依賴行為; 例如“超人”類不需要在其內部固化它的“超能力”,而是由外部來產生、組裝“超能力”,再通過“超人”的某個介面中植入; 只要“超能力”滿足某個介面,就能被超人所使用; 依賴注入(DI

TCP協議建立連線三次握手斷開連線四次揮手

首先先看下TCP的報頭格式 發現在中間有一個6位的標誌位(紅色標出) 標誌位欄位 含義 URG 緊急指標是否有效;置為1表示要優先處理 ACK 確認號是否有效;設為1表示為確認應答報文(通常情況下會設為1,但是第一

UML總結—時序圖Sequence Diagram協作圖Collaboration Diagram

一、時序圖      時序圖是一種強調時間順序的互動圖,在時序圖中,首先把參與互動的物件放在圖的上方,沿X軸方向排列。通常把發起互動的物件放在左邊,較下級物件依次放在右邊,然後把這些物件傳送和接受的訊

TCP序列確認介紹

TCP是一種可靠的面向連線的資料流協議,TCP之所以可靠,是因為它保證了資料的傳輸有序,這是通過一個序列號和確認號來保證的。 序列號的作用: TCP將應用層資料和管理資料的每一位元組進行順序編號,序列號用於指出本報文段攜帶資料的第一個位元組的序列號,(SYN,FIN等算

抽象類abstract class接口interface有什麽異同?

否則 繼承 默認 strong 什麽 成員 -s 實例 abstract 相同點: 1.抽象類和接口都不能被實例化,但可以定義抽象類和接口類型的引用。 2.一個類如果繼承了抽象類和接口,必須要對其中的抽象方法全部實現。(接口中方法默認的是public abstract修飾的

同步Synchronous異步Asynchronous

就會 一個 方法調用 這一 開始 訂單 必須 通知 下單 同步和異步通常用來形容一次方法調用。同步方法調用一旦開始,調用者必須等到方法調用返回後,才能繼續後續的行為。異步方法調用更像一個消息的傳遞,一旦開始,方法調用就會立即返回,調用者就可以繼續後續的操作。而異步方法通常會

C語言中存儲類別又分為四類:自動auto、靜態static、寄存器的register外部的extern

字符變量 修飾 例如 register ext 進行 適合 sta -- 除法運算中註意: 如果相除的兩個數都是整數的話,則結果也為整數,小數部分省略,如8/3 = 2;而兩數中有一個為小數,結果則為小數,如:9.0/2 = 4.500000。 取余運算中註意: 該運算只適

SpringMVC中文件的上傳上傳到服務器下載問題--------下載

cat exc stream log trac close pri page fin 一、建立一個簡單的jsp頁面。 我們在建好的jsp的頁面中加入一個超鏈接:<a href="${pageContext.request.contextPath}/down

maven可選依賴Optional Dependencies依賴排除Dependency Exclusions

許可 mave manage spa 兩個 傳遞 方式 mis ont 我們知道,maven的依賴關系是有傳遞性的。如:A-->B,B-->C。但有時候,項目A可能不是必需依賴C,因此需要在項目A中排除對A的依賴。在maven的依賴管理中,有兩種方式可以對依賴關

轉發forward重定向redirect的區別

border 新的 狀態 rec nbsp url req red 完成 轉發與重定向的主要區別 轉發 重定向 轉發是服務器行為 重定向是客戶端行為 轉發瀏覽器url不改變 重定向瀏覽器url改變 轉發request請求數據不丟失 重定向request請

淺談淺克隆shallow clone 深克隆deep clone

turn ont row 控制臺 cep test 寫入 main supported 區別就在於是否對對象中的引用變量所指向的對象進行拷貝。 1.淺克隆/淺復制/淺拷貝   淺拷貝是指在拷貝對象時,對於基本數據類型的變量會重新復制一份,而對於引用類型的變量只是對引用進行拷

幹貨分享微服務spring-cloud8.服務治理配置中心Spring-cloud-zooke

not found span zookeepe service get() eight request wire autowired 8.1. 服務治理Spring-cloud-zookeeper提供的模式包括服務發現和配置,配置動態更新不需要手動請求/refresh