日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

计算机网络---TCP序列号和确认号

發布時間:2023/12/8 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机网络---TCP序列号和确认号 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

寫在前面:

在網絡分析中,讀懂TCP序列號和確認號在的變化趨勢,可以幫助我們 學習TCP協議以及排查通訊故障,如通過查看序列號和確認號可以確定數據傳輸是否亂序。


1. 序列號和確認號的簡介及作用

TCP 協議工作在OSI的傳輸層,是一種可靠的面向連接的數據流協議,TCP之所以可靠,是因為它保證了傳送數據包的順序。順序是用一個序列號來保證的。響應包 內也包括一個序列號,表示接收方準備好這個序列號的包。在TCP傳送一個數據包時,它會把這個數據包放入重發隊列中,同時啟動計時器,如果收到了關于這個 包的確認信息,便將此數據包從隊列中刪除,如果在計時器超時的時候仍然沒有收到確認信息,則需要重新發送該數據包。另外,TCP通過數據分段中的序列號來 保證所有傳輸的數據可以按照正常的順序進行重組,從而保障數據傳輸的完整。

2. TCP的通訊過程

在TCP通訊中主要有連接的建立、數據的傳輸、連接的關閉三個過程!每個過程完成不同的工作,而且序列號和確認號在每個過程中的變化都是不同的。

2.1 TCP建立連接

TCP建立連接,也就是我們常說的三次握手,它需要三步完成。在TCP的三次握手中,發送第一個SYN的一端執行的是主動打開。而接收這個SYN并發回下一個SYN的另一端執行的是被動打開。

這里以客戶端向服務器發起連接來說明。

  • 第1步 :客戶端向服務器發送一個同步數據包請求建立連接,該數據包中,初始序列號(ISN)是客戶端隨機產生的一個值,確認號是0;

  • 第2步 :服務器收到這個同步請求數據包后,會對客戶端進行一個同步確認。這個數據包中,序列號(ISN)是服務器隨機產生的一個值,確認號是客戶端的初始序列號+1;

  • 第3步 :客戶端收到這個同步確認數據包后,再對服務器進行一個確認。該數據包中,序列號是上一個同步請求數據包中的確認號值,確認號是服務器的初始序列號+1。

  • 注意 :因為一個SYN將占用一個序號,所以要加1。

    初始序列號(ISN)隨時間而變化的,而且不同的操作系統也會有不同的實現方式,所以每個連接的初始序列號是不同的。TCP連接兩端會在建立連接時,交互一些信息,如窗口大小、MSS等,以便為接著的數據傳輸做準備。

    RFC793指出ISN可以看作是一個32bit的計數器,每4ms加1,這樣選擇序號的目的在于防止在網絡中被延遲的分組在以后被重復傳輸,而導致某個連接的一端對它作錯誤的判斷。

    2.2 TCP傳輸數據

    在TCP建立連接后,就可以開始傳輸數據了。TCP工作在全雙工模式,它可以同時進行雙向數據傳輸。這里為了簡化,我們只談服務器向客戶端發送數據的情況,而客戶端向服務器發送數據的原理和它是類似的,這里便不重復說明。
    服務器向客戶端發送一個數據包后,客戶端收到這個數據包后,會向服務器發送一個確認數據包。

    傳輸數據的簡要過程如下:

  • 發送數據 :服務器向客戶端發送一個帶有數據的數據包,該數據包中的序列號和確認號與建立連接第三步的數據包中的序列號和確認號相同;

  • 確認收到 :客戶端收到該數據包,向服務器發送一個確認數據包,該數據包中,序列號是為上一個數據包中的確認號值,而確認號為服務器發送的上一個數據包中的序列號+所該數據包中所帶數據的大小。
    數據分段中的序列號可以保證所有傳輸的數據按照正常的次序進行重組,而且通過確認保證數據傳輸的完整性。

  • 2.3 TCP關閉連接

    前 面我們提到,建立一個連接需要3個步驟,但是關閉一個連接需要經過4個步驟。因為TCP連接是全雙工的工作模式,所以每個方向上需要單獨關閉。在TCP關 閉連接時,首先關閉的一方(即發送第一個終止數據包的)將執行主動關閉,而另一方(收到這個終止數據包的)再執行被動關閉。

    關閉連接的4個步驟如下:

  • 第1步 :服務器完成它的數據發送任務后,會主動向客戶端發送一個終止數據包,以關閉在這個方向上的TCP連接。該數據包中,序列號為客戶端發送的上一個數據包中的確認號值,而確認號為服務器發送的上一個數據包中的序列號+該數據包所帶的數據的大小;

  • 第2步 :客戶端收到服務器發送的終止數據包后,將對服務器發送確認信息,以關閉該方向上的TCP連接。這時的數據包中,序列號為第1步中的確認號值,而確認號為第1步的數據包中的序列號+1;

  • 第3步 :同理,客戶端完成它的數據發送任務后,就也會向服務器發送一個終止數據包,以關閉在這個方向上的TCP連接,該數據包中,序列號為服務器發送的上一個數據包中的確認號值,而確認號為客戶端發送的上一個數據包中的序列號+該數據包所帶數據的大小;

  • 第4步 :服務器收到客戶端發送的終止數據包后,將對客戶端發送確認信息,以關閉該方向上的TCP連接。這時在數據包中,序列號為第3步中的確認號值,而確認號為第3步數據包中的序列號+1;

  • 注意 : 因為FIN和SYN一樣,也要占一個序號。理論上服務器在TCP連接關閉時發送的終止數據包中,只有終止位是置1,然后客戶端進行確認。但是在實際的 TCP實現中,在終止數據包中,確認位和終止位是同時置為1的,確認位置為1表示對最后一次傳輸的數據進行確認,終止位置為1表示關閉該方向的TCP連 接。

    總結

    以上是生活随笔為你收集整理的计算机网络---TCP序列号和确认号的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。