1. 程式人生 > >msl、ttl及rtt的區別—— TCP控制欄位標誌

msl、ttl及rtt的區別—— TCP控制欄位標誌

一、 msl、ttl及rtt的區別
1、 MSL 是Maximum Segment Lifetime英文的縮寫,中文可以譯為“報文最大生存時間”,他是任何報文在網路上存在的最長時間,超過這個時間報文將被丟棄。因為tcp報文 (segment)是ip資料報(datagram)的資料部分,具體稱謂請參見《資料在網路各層中的稱呼》一文;

2、ip頭中有一個TTL域,TTL是 time to live的縮寫,中文可以譯為“生存時間”,這個生存時間是由源主機設定初始值但不是存的具體時間,而是儲存了一個ip資料報可以經過的最大路由數,每經 過一個處理他的路由器此值就減1,當此值為0則資料報將被丟棄,同時傳送ICMP報文通知源主機。RFC 793中規定MSL為2分鐘,實際應用中常用的是30秒,1分鐘和2分鐘等。

TTL與MSL是有關係的但不是簡單的相等的關係,MSL要大於等於TTL。

3、 RTT是客戶到伺服器往返所花時間(round-trip time,簡稱RTT),TCP含有動態估算RTT的演算法。TCP還持續估算一個給定連線的RTT,這是因為RTT受網路傳輸擁塞程式的變化而變化
4、2MSL即兩倍的MSL,TCP的TIME_WAIT狀態也稱為2MSL等待狀態,當TCP的一端發起主動關閉,在發出最後一個ACK包後,即第3次握 手完成後傳送了第四次握手的ACK包後就進入了TIME_WAIT狀態,必須在此狀態上停留兩倍的MSL時間,等待2MSL時間主要目的是怕最後一個 ACK包對方沒收到,那麼對方在超時後將重發第三次握手的FIN包,主動關閉端接到重發的FIN包後可以再發一個ACK應答包。在TIME_WAIT狀態 時兩端的埠不能使用,要等到2MSL時間結束才可繼續使用。當連線處於2MSL等待階段時任何遲到的報文段都將被丟棄。不過在實際應用中可以通過設定 SO_REUSEADDR選項達到不必等待2MSL時間結束再使用此埠。對於TCP中的各種控制欄位,接下來進行具體說明。

二、TCP控制欄位標誌:URG、ACK、PSH、RST、SYN、FIN
在TCP層,有個FLAGS欄位,這個欄位有以下幾個標識:SYN, FIN, ACK, PSH, RST, URG.
其中,對於我們日常的分析有用的就是前面的五個欄位。
它們的含義是:
URG:Urget pointer is valid (緊急指標欄位值有效)
SYN: 表示建立連線
FIN: 表示關閉連線
ACK: 表示響應
PSH: 表示有 DATA資料傳輸
RST: 表示連線重置。
其中,ACK是可能與SYN,FIN等同時使用的,比如SYN和ACK可能同時為1,它表示的就是建立連線之後的響應,如果只是單個的一個SYN,它表 示的只是建立連線。TCP的幾次握手就是通過這樣的ACK表現出來的。但SYN與FIN是不會同時為1的,因為前者表示的是建立連線,而後者表示的是斷開 連線。RST一般是在FIN之後才會出現為1的情況,表示的是連線重置。一般地,當出現FIN包或RST包時,我們便認為客戶端與伺服器端斷開了連線;而 當出現SYN和SYN+ACK包時,我們認為客戶端與伺服器建立了一個連線。PSH為1的情況,一般只出現在 DATA內容不為0的包中,也就是說PSH為1表示的是有真正的TCP資料包內容被傳遞。
TCP產生 RST響應的情況(屬於硬錯誤):
四次握手不是關閉 TCP連線的唯一方法. 有時,如果主機需要儘快關閉連線(或連線超時,埠或主機不可達),RST (Reset)包將被髮送. 注意在,由於RST包不是TCP連線中的必須部分, 可以只發送RST包(即不帶ACK標記). 但在正常的TCP連線中RST包可以帶ACK確認標記
1. syn傳送到伺服器主機,但是目的埠並未執行。則產生一個ECONRFUSED錯誤。客戶端立即返回。比如telnet 192.168.1.55 8889,條件:55主機在區域網上並且可達(也可以換成可以到達的網路ip地址),但是8889這個埠並未使用(可能伺服器已經關閉),則伺服器(對 方主機tcp核心)傳送一個rst相應給客戶端,於是客戶端立即關閉。 注意一下,如果輸入的網路ip不可達的話,客戶端將會持續傳送syn,最後產生一個etimeout的錯誤,大概75秒左右。這個時候客戶端的預設閘道器 (192.168.1.1 211.2.2.2)因為找不到下一路由,路由器(或者再過幾跳的路由器)會產生一個EHOSTUNREACH響應給客戶端(注 意,ENETUNREACH和EHOSTUNREACH通常被認為是一個錯誤,因為ENETUNREACH一般當作已過時),由於這是個軟錯誤(有可能是 網路暫時不通造成的)。客戶端會重發syn直到超時。
所以會有 telnet 192.168.1.55 8888 主機存在,但是埠未開,ECONRFUSED錯誤,立刻返回
telnet 192.168.1.56 * 主機不存在,UNROUTETOHOST錯誤,立刻返回
telnet 211.1.1.5 * 主機不存在,etimeout錯誤

  2. 最簡單的情況,伺服器主動傳送rst給客戶端關閉連線。客戶端read write直接返回rst錯誤。

  3. 伺服器收到一個不存在的連線返回rst響應。比如,伺服器重啟之後,先前的一個已連線的客戶端毫不之情的情況下,這就是半閉連線(跟半開連線最大的不同是,半閉連線是不能使用的,半開連線可以使用)。
   此時,如果客戶端read的話(接收緩衝無資料)產生一個EPEERRST錯誤
           如果客戶端write的話且傳送資料小於傳送緩衝區剩餘容量時,第一次write成功,第二次write或者read的時候就會產生一個 EPEERRST的錯誤。因為write傳送資料是直接把要傳送的資料拷貝到核心的tcp傳送緩衝區就立刻返回成功的。當然拷貝之前會先檢查一下tcp連 接有無錯誤。所以第二次傳送或者接收的時候,發現連線上已經有了EPEERRST的錯誤,所以就返回錯誤(話說回來,第一次傳送的資料實際上根本就沒有發 送成功,對方根本就沒接受它)

相關推薦

mslttlrtt區別—— TCP控制標誌

一、 msl、ttl及rtt的區別 1、 MSL 是Maximum Segment Lifetime英文的縮寫,中文可以譯為“報文最大生存時間”,他是任何報文在網路上存在的最長時間,超過這個時間報文將被丟棄。因為tcp報文 (segment)是ip資料

mslttlrtt區別 TCP控制標誌

       四次握手不是關閉 TCP連線的唯一方法. 有時,如果主機需要儘快關閉連線(或連線超時,埠或主機不可達),RST (Reset)包將被髮送. 注意在,由於RST包不是TCP連線中的必須部分, 可以只發送RST包(即不帶ACK標記). 但在正常的TCP連線中RST包可以帶ACK確認標記     

HashMapHashTableConcurrentHashMap區別工作原理

前言 第一次寫部落格,水平有限可能有理解不到位或理解錯的地方。歡迎各位大神參與討論或指正。 Map在工作中的使用頻率較高,HashMap相關的問題在面試中也經常被問到。所以抽空在網上找資料對它們進行了系統的學習,作出以下幾點總結: HashMap、Hash

網市場雲建站 v4.6 更新,增加網站轉移外掛以及內容管理可無限擴充套件

網市場雲建站系統,結合各種產品,將一個網站的伺服器成本降低到0.1元!打破傳統建站的高成本,讓價格不再是阻礙的門檻,讓每個人都能有自己的網站!延續了帝國CMS、織夢CMS優秀的模版流程,模版頁面、模版變數等,讓熟悉帝國、織夢的朋友,直接就能使用! 線上快速體驗 網址:  http://wa

1:orm的增刪改建立表

1 orm介紹 1 tools--->Run manage.py Task   python3 manage.py makemigrations 只需要敲命令:makemigrations(記錄資料庫的修改記錄) python3 manage.py migrate

ORACLE 連線某個分組後取某個最大(最小)等實現方法

1.連線某個欄位 對於表A 我們有B和C兩個欄位 有時候,我們想B相同的,C欄位相連線的值,可以用WM_CONCAT和LISTAGG兩種方法。其中LISTAGG為11g中的新特性。 兩種用法如下: SELECT WM_CONCAT(V.USER_NAME) AS USER_

elasticsearch建立multi-fields修改非multi-fields為multi-fieldsmulti-field的不同的analyzer進行分析和搜尋

本文使用的elasticsearch是5.2.1,官方的multi-fields例子參見 https://www.elastic.co/guide/en/elasticsearch/reference/5.3/multi-fields.html 建立一個index及type

對資料庫索引的理解適合建立索引的

問題 為什麼要給表加上主鍵? 為什麼加索引後會使查詢變快? 為什麼加索引後會使寫入、修改、刪除變慢? 什麼情況下要同時在兩個欄位上建索引? 這些問題他們可能不一定能說出答案。知道這些問題的答案有什麼好處呢?如果開發的應用使用的資料庫表中只有1萬條資

【SQL Server】匯出一張表的建表語句查詢某表的列()名

一、匯出一張表的建表語句 在《【Mysql】匯出一張已經存在的表的建表語句》(點選開啟連結)中曾經介紹過,如何在Mysql中匯出一張表的建表語句。 而在SQL Server中同樣有這樣的功能。 如下圖,首先右擊你要匯出表所在的資料庫,選擇任務、生成指令碼 之後點下一步,點到

springmvc使用jsonview動態控制是否參與序列化

jsonview使用步驟 1. 使用介面宣告多個檢視 2. 在實體類的get方法中新增jsonview以及介面實現檢視控制 3. 在controller方法中新增jsonview以及介面,實現欄

【iOS知識學習】_檢視控制物件生命週期-initviewDidLoadviewWillAppearviewDidAppearviewWillDisappear等的區別用途

iOS檢視控制物件生命週期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear的區別及用途 init-初始化程式 viewDidLoad-載入檢視 viewWil

TCPUDP的區別OSI與TCP/IP參考模型

TCP、UDP是什麼? TCP-傳輸控制協議(TransmissionControl Protocol) 工作在計算機網路OSI模型的傳輸層,是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議。 可靠性體現在TCP通過檢驗和、序列號、確認應答、重發控制、連線管理以及視窗

_檢視控制物件生命週期-initviewDidLoadviewWillAppearviewDidAppearviewWillDisappear等的區別用途

iOS檢視控制物件生命週期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear的區別及用途 init-初始化程式 viewDidLoad-載入檢視 view

MTUMSSMSLRTTTTLRTO

計算機網路相關術語 MTU Maximum Transfer Unit 最大傳輸單元 鏈路層的幀(frame)中的資料部分的最大位元組數 乙太網中的一般為1500位元組 MSS Maximu

TCPUDPHTTPSOCKET之間的區別

安全 其他 出錯 tcp、udp 應用程序 網絡層 傳輸協議 客戶端 連接 IP:網絡層協議; TCP和UDP:傳輸層協議; HTTP:應用層協議; SOCKET:TCP/IP網絡的API。 TCP/IP代表傳輸控制協議/網際協議,指的是一系列協議。 TCP和UDP使用IP

【轉】QT中QWidgetQDialogQMainWindow的區別

屏幕 編輯 派生 標記 裝飾 按鈕 set 沒有 idg QWidget類是所有用戶界面對象的基類。 窗口部件是用戶界面的一個基本單元:它從窗口系統接收鼠標、鍵盤和其它事件,並且在屏幕上繪制自己。每一個窗口部件都是矩形的,並且它們按Z軸順序排列。一個窗口部件可以被它的父窗口

DNS解析與Bind的使用(7)——子域授權轉發訪問控制列表配置

訪問控制 子域授權 轉發 十四、Bind軟件的子域授權全球網絡的DNS服務器都是由多級所構成的,每一臺主機通過域名服務找到所要訪問的主機IP地址都是通過一層層DNS服務器找到的。而這樣的結構就決定了,上級域名服務器必須具備找到子域的能力,例如tianxia.com.這個域名,在頂級域com.下就必

executeexecuteUpdateexecuteQuery三者的區別返回值)

更新 必須 定義 查詢語句 else 類型 表示 例如 單個 1. ResultSet executeQuery(String sql); 執行SQL查詢,並返回ResultSet 對象。 2.int executeUpdate(String s

RedisMongoDBMemcached的區別

Redis、MongoDB及MemcacRedis(內存數據庫)   是一個key-value存儲系統(布式內緩存,高性能的key-value數據庫)。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set -

分片分區復制的區別實現(mongodbmysql)

分片、分區、復制的區別及實現(mongo分片與分區的區別:a. 分片: 解決物理磁盤空間不足的問題(如果帶索引,還可以優化查詢,做到分區的功能) b. 分區: 優化查詢,防止一張表中過多的數據而導致查詢緩慢 c. 復制: 防止數據庫崩潰帶來的損失,保證數據庫的高可用 分片實現:a. mongodb: shar