Tcp的reset報文介紹

2021-01-09 紫金大課堂

Tcp在出現任何異常時候,會採用reset報文「復位」。RST報文的tcp頭裡RST標誌置位。

發送RST報文的場景包括以下幾種

1、 請求的tcp埠不存在

2、 協議棧任何異常

Tcp請求的埠不存在

對於udp,如果報文請求一個不存在的埠,將產生一個icmp報文通知埠不可達『

對於tcp報文,當請求一個不存在的埠,將會rst復位這個連結』

連結出現異常後

正常連結關閉,是通過fin方法「文雅」的方式關閉。Fin關閉所有數據已經發送完畢,沒有數據丟失。

使用rst關閉,一般出現異常情況了,這種關閉中途釋放連結,稱為異常關閉。

Rst關閉連結的特點:

1、 發送RST的一方,將丟棄任何待發送數據,立刻釋放連結。

2、 收到RST的連結將進入關閉狀態,不會回應任何響應

3、 收到RST後,協議棧通知應用程式api處理。

API 通過 "linger on close" 選項(即 SO_LINGER)提供了這種異常關閉的能力

Tcp狀態機裡的任何狀態收到RST都會關閉,但是Time_wait狀態收到RST報文,RFC 1337 提另一種方式,不關心這個RST,避免過早關閉。

協議棧在任何時間,覺得狀態不對或者莫名原因下,都會發送rst狀態。

比如,以前曾做一個項目,tcp報文被中間代理插入新數據,這樣tcp兩端發現序列號和ACK對應不起來,經過一番ack確認後,tcp協議棧發現序列號始終是錯誤的,就會RST復位連結。

半打開狀態

半打開連接是指,已經建鏈的連接,一端重啟,對方不知道,這種情況稱為半打開

比如工作中telnet場景,上班期間客戶端telnet伺服器,下班後客戶端關機後,如果伺服器不和客戶端發送數據,伺服器將不知道客戶端已經關閉。第二天上班客戶端重新telnet,那麼伺服器上將會有很多這種半打開的連結。這種情況,Tcp通過保活機制檢測對方是否正常工作。

比如,AB兩個協議棧正常建立了連結,A向B發送了FIN包要求關連接,B發送ACK後,這時網絡斷了,然後A重啟了。重啟後,網通了後,B又開始發數據包,A收到後就不知道這個(數據的)連接哪來的,A就會發RST包強制把連接關了。

相關焦點

  • tcp——Nagle算法介紹
    問題交互數據會產生眾多小片報文,過多小分組可能增加網絡擁塞的可能。 Nagle算法Nagle算法規定,一個tcp連結上最多只能有一個未被確認的小分組。如果ack響應到達前,tcp暫時收集待發數據,等到響應ack到達後使用一個分組將待發數據發送出去。Nagle算法啟動的條件,當一個ack會來之前,就有待發送數據。
  • 近兩萬字 TCP 硬核知識,教你吊打面試官!
    ,那麼可以把 tcp_abort_on_overflow 設置為 1,這時如果在客戶端異常中可以看到很多 connection reset by peer 的錯誤,那麼就可以證明是由於服務端 TCP 全連接隊列溢出的問題。
  • 他連 TCP 這幾個參數都不懂
    RST包給 client,表示廢掉這個握手過程和這個連接;如果要想知道客戶端連接不上服務端,是不是服務端 TCP 全連接隊列滿的原因,那麼可以把 tcp_abort_on_overflow 設置為 1,這時如果在客戶端異常中可以看到很多connection reset
  • 網絡報文分析工具的使用 - 跟小智一起學網絡(4)
    現在我們開始抓包,首先打開兩個連接虛擬機的終端窗口,在第一個窗口,執行 tcpdump 的抓包命令:tcpdump -i ens33 tcp -n -v -w http.pcap在第二個窗口,我們用 curl 工具訪問http://info.cern.ch/網站的首頁,觸發 Linux 作業系統發出網絡報文:
  • TCP性能和發送接收Buffer的關係
    這個截圖和前一個類似,是在Server上(3003埠)抓到的包,不同的是接收窗口為0後,server端多次探測(Server上抓包能看到),但是client端沒有回覆 ZeroWindow(也有可能是回復了,但是中間環節把ack包丟了,或者這個探測包client沒收到),造成server端認為client死了、不可達之類,進而反覆重傳,重傳超過15次之後,server端認為這個連接死了,粗暴單方面斷開(沒有reset
  • 網際網路基礎-TCP網絡「握手」協議
    tcp連接狀態變化過程這裡有幾個問題需要注意:1、為什麼建立連接時還需要第3次確認主要防止已經失效的連接請求報文突然又傳送到了伺服器,從而產生錯誤。如果伺服器已經發送了FIN+ACK報文請求斷開了,但還沒有收到客戶端的回應,伺服器會認為自己發送的請求斷開報文丟失,於是伺服器又會重新發送一次;而客戶端就能在這個2MSL時間段內收到這個重傳的報文,接著給出回應報文,並且會重啟2MSL計時器。防止類似於「三次握手」中提到了的「已經失效的連接請求報文段」出現在本連接中。
  • 計算機網絡|計算TCP/UDP報文協議
    TCP報文段是在運輸層抽象的端到端邏輯信道中傳送,這種信道是可靠的全雙工信道。其他——ICMP報文格式ICMP 報文的種類有兩種,即 ICMP 差錯報告報文和 ICMP 詢問報文。ICMP 報文的前 4 個字節是統一的格式,共有三個 欄位:即類型、代碼和檢驗和。
  • Linux數據報文的來龍去脈
    因第三步設置了NET_RX_SOFTIRQ,則執行報文接收軟中斷。5. 在NET_RX_SOFTIRQ軟中斷中,執行NAPI操作,回調第三步掛載的驅動poll函數。6. 驅動會對interface進行poll操作,檢查網卡是否有接收完畢的數據報文。7. 將網卡中已經接收完畢的數據報文取出,繼續在軟中斷進行後續處理。
  • TCP/IP(三):ARP報文格式詳解
    1、概述ARP,即地址解析協議(Address Resolution Protocol),是根據 IP 地址獲取物理地址的一個 TCP/IP 協議,報文位於乙太網幀的數據段內網絡設備給另一臺設備發送數據時,需要知道對方的網絡層地址(IP 地址),但是僅有 IP 地址是無法發送數據的,IP 報文需要封裝為乙太網幀才能通過數據鏈路層發送,而乙太網幀需要知道對方的 MAC 地址,因此發送端需要知道目的 MAC 地址。ARP 命令可用於查詢本機 ARP 緩存中 IP 地址和 MAC 地址的對應關係。
  • TCP長連接和心跳那些事
    在 Java 中,使用 TCP 通信,大概率會涉及到 Socket、Netty,本文會借用它們的一些 API 和設置參數來輔助介紹。長連接與短連接TCP 本身並沒有長短連接的區別,長短與否,完全取決於我們怎麼用它。
  • 35 張圖解被問千百遍的 TCP 三次握手和四次揮手面試題
    tcp_syncookies的方式可以應對 SYN 攻擊的方法:net.ipv4.tcp_syncookies = 1tcp_syncookies 應對 SYN 攻擊當 「 SYN 隊列」滿之後,後續伺服器收到 SYN 包,不進入「 SYN 隊列」;計算出一個 cookie 值,再以 SYN + ACK 中的「序列號」返回客戶端,服務端接收到客戶端的應答報文時
  • 解Bug之路-NAT引發的性能瓶頸|埠|tcp|nginx|ip|ack_網易訂閱
    (篇幅可能會有點長,耐心看完,絕對物有所值~)  0 2  環境介紹  先來介紹一下出問題的環境吧,調用拓撲如下圖所示:  調用拓撲圖這樣,可以有效解決tcp_timestamps和tcp_tw_recycle在NAT情況下導致的連接失敗問題。具體見筆者之前的博客:  https://my.oschina.net/alchemystar/blog/3119992  04  Bug現場  好了,介紹完環境,我們就可以正式描述Bug現場了。
  • 深入原理學習之–TCP長連接與心跳保活
    在 Java 中,使用 TCP 通信,大概率會涉及到 Socket、Netty,本文會借用它們的一些 API 和設置參數來輔助介紹。KeepAlive 機制開啟後,在一定時間內(一般時間為 7200s,參數tcp_keepalive_time)在鏈路上沒有數據傳送的情況下,TCP 層將發送相應的KeepAlive探針以確定連接可用性,探測失敗後重試 10(參數tcp_keepalive_probes)次,每次間隔時間 75s(參數tcp_keepalive_intvl),所有探測失敗後,才認為當前連接已經不可用。
  • 普及帖——終於搞懂了 TCP 的 11 種狀態
    CLOSED:初始狀態,表示TCP連接是」關閉著的」或」未打開的」LISTEN:表示伺服器端的某個SOCKET處於監聽狀態,可以接受客戶端的連接SYN_RCVD:表示伺服器接收到了來自客戶端請求連接的SYN報文
  • Linux TCP/IP協議棧,數據發送接收流程,TCP協議特點
    流程如下: 用戶應用程式調用write系統調用 確認文件描述符 拷貝數據到socket buffer中 創建tcp片段,計算checksum 添加IP頭,執行ip路由,計算checksum 添加乙太網協議頭部,執行ARP 告訴網卡晶片要發送數據了 網卡從內存中獲取數據發送,發送完成中斷告訴CPU數據接收
  • 理解TCP/IP三次握手與四次揮手的正確姿勢
    但未必被動方所有的數據都完整的發送給了主動方,所以被動方不會馬上關閉SOCKET,它可能還需要發送一些數據給主動方後,再發送FIN報文給主動方,告訴主動方同意關閉連接,所以這裡的ACK報文和FIN報文多數情況下都是分開發送的。
  • 高級掃描技術及原理介紹
    一、高級ICMP掃描技術  Ping就是利用ICMP協議走的,我們在這裡主要是利用ICMP協議最基本的用途:報錯,根據網絡協議,如果按照協議出現了錯誤,那麼接收端將產生一個ICMP的錯誤報文。這些錯誤報文並不是主動發送的,而是由於錯誤,根據協議自動產生。
  • 25、大話HTTP協議-用Wireshark研究一個完整的TCP連接
    過濾器很有用,例如我們要追蹤 TCP 連接,就可以設置過濾器只顯示 TCP 的數據包(上圖中的 TCP only: tcp),而不顯示例如 UDP 的數據包或其他會干擾我們的數據包HTTP報文交互。是請求報文和響應報文。紅色字體的是請求報文,藍色字體的是響應報文。