重學TCP協議(2) TCP 報文首部

1. TCP 報文首部

image.png

1.1 源端口和目標端口

每個TCP段都包含源端和目的端的端口號,用于尋找發端和收端應用進程。這兩個值加上IP首部中的源端IP地址和目的端IP地址唯一確定一個TCP連接

端口號分類

  • 熟知端口號(well-known port)
  • 已登記的端口(registered port)
  • 臨時端口號(ephemeral port)
1.1.1 熟知端口號(well-known port)

熟知端口號由專門的機構由 IANA 分配和控制,范圍為 0~1023。為了能讓客戶端能隨時找到自己,服務端程序的端口必須要是固定的。很多熟知端口號已經被用就分配給了特定的應用,比如 HTTP 使用 80端口,HTTPS 使用 443 端口,ssh 使用 22 端口。

1.1.2 已登記的端口(registered port)

已登記的端口不受 IANA 控制,不過由 IANA 登記并提供它們的使用情況清單。它的范圍為 1024~49151。

1.1.3 臨時端口號(ephemeral port)

如果應用程序沒有調用 bind() 函數將 socket 綁定到特定的端口上,那么 TCP 和 UDP 會為該 socket 分配一個唯一的臨時端口。IANA 將 49152~65535 范圍的端口稱為臨時端口(ephemeral port)或動態端口(dynamic port),也稱為私有端口(private port),這些端口可供本地應用程序臨時分配端口使用。

image.png

1.2 序列號

TCP 是面向字節流的協議,通過 TCP 傳輸的字節流的每個字節都分配了序列號,序列號(Sequence number)指的是本報文段第一個字節的序列號

序列號用來標識從T C P發端向T C P收端發送的數據字節流,它表示在這個報文段中的的第一
個數據字節。如果將字節流看作在兩個應用程序間的單向流動,則 T C P用序號對每個字節進
行計數。序號是32 bit的無符號數,序號到達23 2-1后又從0開始。

1.2.1 初始序列號(Initial Sequence Number, ISN)

在建立連接之初,通信雙方都會各自選擇一個序列號,稱之為初始序列號。在建立連接時,通信雙方通過 SYN 報文交換彼此的 ISN

當建立一個新的連接時, S Y N標志變1。序號字段包含由這個主機選擇的該連接的初始序號I S N(Initial Sequence Number)。該主機要發送數據的第一個字節序號為這個 I S N加1,因為
S Y N標志消耗了一個序號

1.3 確認號

TCP 使用確認號(Acknowledgment number, ACK)來告知對方下一個期望接收的序列號,小于此確認號的所有字節都已經收到。

既然每個傳輸的字節都被計數,確認序號包含發送確認的一端所期望收到的下一個序號。因此,確認序號應當是上次已成功收到數據字節序號加 1。只有A C K標志(下面介紹)為 1時確認序號字段才有效。

1.4 TCP Flags

TCP 有很多種標記,有些用來發起連接同步初始序列號,有些用來確認數據包,還有些用來結束連接。TCP 定義了一個 8 位的字段用來表示 flags,大部分都只用到了后 6 個

  • U R G 緊急指針(u rgent pointer)有效(見2 0 . 8節)。
  • A C K 確認序號有效。
  • P S H 接收方應該盡快將這個報文段交給應用層。
  • R S T 重建連接。
  • S Y N 同步序號用來發起一個連接。這個標志和下一個標志將在第 1 8章介紹。
  • F I N 發端完成發送任務。

1.5 窗口大小

T C P的流量控制由連接的每一端通過聲明的窗口大小來提供。窗口大小為字節數,起始
于確認序號字段指明的值,這個值是接收端正期望接收的字節。窗口大小是一個 16 bit字段,
因而窗口大小最大為 6 5 5 3 5字節。

TCP 協議引入了「TCP 窗口縮放」選項 作為窗口縮放的比例因子,比例因子值的范圍是 0 ~ 14,其中最小值 0 表示不縮放,最大值 14。比例因子可以將窗口擴大到原來的 2 的 n 次方,比如窗口大小縮放前為 1050,縮放因子為 7,則真正的窗口大小為 1050 * 128 = 134400。窗口縮放值在三次握手的時候指定,如果抓包的時候沒有抓到 SYN 包,wireshark 是不知道真正的窗口縮放值是多少的

1.6 緊急指針

只有當U R G標志置1時緊急指針才有效。緊急指針是一個正的偏移量,和序號字段中的值
相加表示緊急數據最后一個字節的序號。 T C P的緊急方式是發送端向另一端發送緊急數據的
一種方式

1.7 檢驗和

檢驗和覆蓋了整個的T C P報文段:T C P首部和T C P數據。這是一個強制性的字段,一定是
由發端計算和存儲,并由收端進行驗證。

1.8 可選項

常用的選項有以下幾個:

  • MSS:最大段大小選項,是 TCP 允許的從對方接收的最大報文段
    最常見的可選字段是最長報文大小,又稱為 MSS (Maximum Segment Size)。每個連接方通常都在通信的第一個報文段(為建立連接而設置 S Y N標志的那個段)中指明這個選項。它指明本端所能接收的最大長度的報文段。

  • SACK:選擇確認選項

  • Window Scale:窗口縮放選項

參考資料

《深入理解 TCP 協議:從原理到實戰》

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/391332.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/391332.shtml
英文地址,請注明出處:http://en.pswp.cn/news/391332.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux:vim中全選復制

全選(高亮顯示):按esc后,然后ggvG或者ggVG 全部復制:按esc后,然后ggyG 全部刪除:按esc后,然后dG 解析: gg:是讓光標移到首行,在vim才有效&#xf…

機器學習 預測模型_使用機器學習模型預測心力衰竭的生存時間-第一部分

機器學習 預測模型數據科學 , 機器學習 (Data Science, Machine Learning) 前言 (Preface) Cardiovascular diseases are diseases of the heart and blood vessels and they typically include heart attacks, strokes, and heart failures [1]. According to the …

程序2:word count

本程序改變自:http://blog.csdn.net/zhixi1050/article/details/72718638 語言:C 編譯環境:visual studio 2015 運行環境:Win10 做出修改的地方:在原碼基礎上修改了記錄行數的功能,刪去了不完整行數的記錄&…

重學TCP協議(3) 端口號及MTU、MSS

1. 端口相關的命令 1.1 查看端口是否打開 使用 nc 和 telnet 這兩個命令可以非常方便的查看到對方端口是否打開或者網絡是否可達。如果對端端口沒有打開,使用 telnet 和 nc 命令會出現 “Connection refused” 錯誤 1.2 查看監聽端口的進程 使用 netstat sudo …

Diffie Hellman密鑰交換

In short, the Diffie Hellman is a widely used technique for securely sending a symmetric encryption key to another party. Before proceeding, let’s discuss why we’d want to use something like the Diffie Hellman in the first place. When transmitting data o…

高效能程序猿的修煉

下載地址:http://download.csdn.net/detail/xiaole0313/8931785 高效能程序猿的修煉 《高效能程序猿的修煉是人民郵電出版社出版的圖書。本書是coding horror博客中精華文章的集合。全書分為12章。涉及邁入職業門檻、高效能編程、應聘和招聘、團隊協作、高效工作環境…

Spring 中的 LocalSessionFactoryBean和LocalContainerEntityManagerFactoryBean

Spring和Hibernate整合的時候我們經常會有如下的配置代碼 1&#xff0c;非JPA支持的配置 <!-- 配置 Hibernate 的 SessionFactory 實例: 通過 Spring 提供的 LocalSessionFactoryBean 進行配置 --> <!-- FacotryBean 配置的時候返回的不是本身而是返回的FactoryBean 的…

如何通過建造餐廳來了解Scala差異

I understand that type variance is not fundamental to writing Scala code. Its been more or less a year since Ive been using Scala for my day-to-day job, and honestly, Ive never had to worry much about it. 我了解類型差異并不是編寫Scala代碼的基礎。 自從我在日…

linux的/etc/passwd、/etc/shadow、/etc/group和/etc/gshadow

1./etc/passwd 存儲用戶信息 [rootoldboy ~]# head /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin 一行記錄對應著一個用戶&#xff0c;每行記錄被冒號:分隔為7個字段&#xff0c;這7個字段的具體含…

組織在召喚:如何免費獲取一個js.org的二級域名

之前我是使用wangduanduan.github.io作為我的博客地址&#xff0c;后來覺得麻煩&#xff0c;有把博客關了。最近有想去折騰折騰。先看效果&#xff1a;wdd.js.org 如果你不了解js.org可以看看我的這篇文章:一個值得所有前端開發者關注的網站js.org 前提 已經有了github pages的…

linkedin爬蟲_您應該在LinkedIn上關注的8個人

linkedin爬蟲Finding great mentors are hard to come by these days. With so much information and so many opinions flooding the internet, finding an authority in a specific field can be quite tough.這些天很難找到優秀的導師。 互聯網上充斥著如此眾多的信息和眾多…

重學TCP協議(4) 三次握手

1. 三次握手 請求端&#xff08;通常稱為客戶&#xff09;發送一個 S Y N段指明客戶打算連接的服務器的端口&#xff0c;以及初始序號。這個S Y N段為報文段1。服務器發回包含服務器的初始序號的 S Y N報文段&#xff08;報文段2&#xff09;作為應答。同時&#xff0c;將確認序…

[設計模式]State模式

《Java與模式》 又稱狀態對象模式。狀態模式是對象的行為模式。GOF95 一個對象的行為取決于一個或者多個動態變化的屬性&#xff0c;這樣的屬性叫做狀態。這樣的對象叫做有狀態的對象&#xff08;stateful&#xff09;。 狀態模式把一個所研究的對象的行為包裝在不同的狀態對象…

java溫故筆記(二)java的數組HashMap、ConcurrentHashMap、ArrayList、LinkedList

為什么80%的碼農都做不了架構師&#xff1f;>>> HashMap 摘要 HashMap是Java程序員使用頻率最高的用于映射(鍵值對)處理的數據類型。隨著JDK&#xff08;Java Developmet Kit&#xff09;版本的更新&#xff0c;JDK1.8對HashMap底層的實現進行了優化&#xff0c;例…

前置交換機數據交換_我們的數據科學交換所

前置交換機數據交換The DNC Data Science team builds and manages dozens of models that support a broad range of campaign activities. Campaigns rely on these model scores to optimize contactability, volunteer recruitment, get-out-the-vote, and many other piec…

aws 彈性三劍客_AWS和彈性:超越用戶需求

aws 彈性三劍客I’ll assume that, one way or another, you’re already familiar with many of AWS’s core deployment services. That means you now know about:我假設您已經熟悉許多AWS的核心部署服務。 這意味著您現在知道&#xff1a; ? EC2 instances and AMIs (Ama…

leetcode 368. 最大整除子集(dp)

給你一個由 無重復 正整數組成的集合 nums &#xff0c;請你找出并返回其中最大的整除子集 answer &#xff0c;子集中每一元素對 (answer[i], answer[j]) 都應當滿足&#xff1a; answer[i] % answer[j] 0 &#xff0c;或 answer[j] % answer[i] 0 如果存在多個有效解子集&a…

在Centos中安裝mysql

下載mysql這里是通過安裝Yum源rpm包的方式安裝,所以第一步是先下載rpm包 1.打開Mysql官網 https://www.mysql.com/, 點擊如圖選中的按鈕 點擊如圖框選的按鈕 把頁面拉倒最下面,選擇對應版本下載,博主這里用的是CentOS7 下載完成后上傳到服務器,由于是yum源的安裝包,所以…

碩士可以跟別的導師做實驗嗎_如何成為一名導師可以成為雙刃劍

碩士可以跟別的導師做實驗嗎Mentoring is the ability to give advise or train someone, often times, who is less knowledgeable in a particular field. This is pretty much common place in tech companies. There you usually have senior developers who, besides bein…

linux中權限對文件和目錄的意義

1.權限對文件的意義&#xff1a; 讀&#xff1a;可查看文件的內容 寫&#xff1a;可修改文件的內容&#xff08;但不能刪除文件&#xff09; 執行&#xff1a;可執行文件 2.權限對目錄的意義&#xff1a; 讀&#xff1a;可以查看目錄下的內容&#xff0c;即可以讀取該目錄下的結…