1. 程式人生 > >socket的連線(三次握手)和關閉過程(四次握手)與伺服器各種關閉對客戶端的不同影響

socket的連線(三次握手)和關閉過程(四次握手)與伺服器各種關閉對客戶端的不同影響

之前對socket的TIME_WAIT看的很迷糊,今天在這裡總結下,以備今後檢視:

socket的連線(三次握手)和關閉過程(四次握手):


socket狀態變遷圖:


伺服器和客戶端各種狀態總結:

CLOSED:沒有使用該套接字
LISTEND:套接字正在監聽連線
SYN_SENT:套接字正在試圖主動建立連線
SYN_RECEIVED:正在處於建立連線的初始同步狀態
ESTABLISHED:連線已建立
CLOSED_WAIT:遠端套接字已關閉,正在等待關閉這個套接字
FIN_WAIT_1:套接字已關閉,正在關閉連線
CLOSING:套接字已關閉,遠端套接字正在關閉,暫時掛起關閉確認
LAST_ACK:遠端套集資已關閉,正在等待本地套接字的關閉確認
FIN_WAIT_2:套接字已關閉,正在等待遠端套接字關閉
TIME_WAIT:這個套接字已經關閉,正在等待遠端套接字的關閉傳送


伺服器各種終止對客戶端的影響:

1、伺服器程序終止:

  在不同主機上啟動伺服器和客戶端,並檢驗其正常連線;
  殺死伺服器子程序,這時這個伺服器子程序中開啟的描述字都會關閉,這引發了一個FIN傳送給客戶端,客戶端相應地以ACK響應;
  客戶端從伺服器接收FIN並響應ACK;
  此時,客戶端為CLOSE_WAIT狀態,伺服器為FIN_WAIT_2狀態;
  這時客戶端可以再次想伺服器傳送資料,原因是客戶端接收到FIN只表示無夫妻已關閉了連線伺服器一端,它不再發送任何資料,並沒有通知客戶端它已終止,當伺服器收到客戶端再次傳送的資料時,由於伺服器已經終止,所以以RST相應客戶端;
  但在客戶端呼叫writen後立即呼叫readline,由於在2)中接收了FIN,readline立即返回0(檔案結束符),所以客戶端看不到RST,會出現“server terminated prenaturely”錯誤。

2、伺服器主機崩潰:

  當伺服器主機崩潰時,已有網路連線發不出任何資料;
  在客戶端上輸入writen後,客戶機就會阻塞於readline,等待回射;
  這時,客戶端持續重發資料分節,試圖從伺服器端接收一個ACK,直到等待超時,返回一個錯誤“ETIMWDOUT”。

3、伺服器主機崩潰後重啟:

  啟動伺服器和客戶端,確認連線建立;
  伺服器主機崩潰並重啟;
  在客戶機上鍵入一行資料,發給伺服器主機;
  當伺服器主機崩潰後重啟時,它的TCP丟失了崩潰前所有連線資訊,所以伺服器對客戶以RST響應;
  當RST到達時,客戶端正阻塞於readline呼叫,導致它返回錯誤“ECONNREST”。

相關推薦

socket連線握手關閉過程握手伺服器各種關閉客戶不同影響

之前對socket的TIME_WAIT看的很迷糊,今天在這裡總結下,以備今後檢視: socket的連線(三次握手)和關閉過程(四次握手): socket狀態變遷圖: 伺服器和客戶端各種狀態總結: CLOSED:沒有使用該套接字 LISTEND:套接字正在監聽連線 SYN

vxlan vs GRE層組播二層組播如何對應起來

由器 ams 之間 數據信息 控制 格式 tunnel network 處理 www.huawei.com/ilink/cnenterprise/download/HW_401028 http://feisky.xyz/sdn/basic/vxlan.html 華為的v

【轉】TCP建立連接握手釋放連接握手

eight 請求 置1 計時器 響應 發送數據 出現 期望 本地 在談及TCP建立連接和釋放連接過程,先來簡單認識一下TCP報文段首部格式的的幾個名詞(這裏只是簡單說明,具體請查看相關教程) 序列號seq:占4個字節,用來標記數據段的順序,TCP把連接中發送的所有數

支援向量機SVMpython實現

6. python實現 根據前面的一步步推導獲得的結果,我們就可以使用python來實現SVM了 這裡我們使用iris資料集進行驗證,由於該資料集有4維,不容易在二維平面上表示,我們先使用LDA對其進行降維,又因為該資料集有3類樣本,我們編寫的SVM是二分類的,所以我們將

Friends and Berries URAL - 2067 計算點共線計算的時候的注意點

題目連結:https://cn.vjudge.net/problem/URAL-2067 具體思路:判斷三點共線就可以了,只有一對點能滿足,如果一對就沒有那就沒有滿足的. 在計算的時候,要注意,如果是按照斜率算的話,可以把除法轉換為乘法,防止精度的損失. 如果是按照距離算的話,一定要

MySQL學習、分組查詢多表查詢

一、分組查詢1.MySQL查詢函式    函式的分類:    1,單行函式:將每條資料進行獨立的計算,然後每條資料得到一條結果。    2,多行函式:多條資料同時計算,最終得到一條結果資料。也成為聚集函式、分組函式, 主要用於完成一些統計功能。2.什麼是分組?    針對於班

sk_buff整理筆記、記憶體申請釋放

        承接上一篇blog--sk_buff整理筆記(二、操作函式),這篇是要來講解下sk_buff結構的記憶體申請和釋放函式。因為sk_buff結構是比較複雜的(並不是其本身結構複雜,而是其所指的資料區以及分片結構等,合在一起就變複雜了),所以在記憶體申請和釋放

Linux中軟連線Symbolic Link硬連結Hard Link的區別

Linux連結分兩種,一種被稱為硬連結(Hard Link),另一種被稱為符號連結(Symbolic Link)。預設情況下,ln命令產生硬連結。--硬連線硬連線指通過索引節點來進行連線。在Linux的檔案系統中,儲存在磁碟分割槽中的檔案不管是什麼型別都給它分配一個編號,稱為索引節點號(Inode Inde

GLSL矩陣變換詳解、view matrixprojection matrix

我們在前一篇部落格GLSL矩陣變換詳解(二、旋轉變換、平移變換以及QMatrix4x4)的基礎上再增加對攝像機位置、姿態的設定功能,以及成像區域的定義功能。QMatrix4x4::lookAt(camera, center, upDirection)定義了攝像機的位置與姿態,

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

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

android學習-第二講修改項目名稱圖標,log,過濾器

pre activit png activity 圖標 alt 類名 mage ani 一、在app/src/main/res下有 AndroidManifest.xml打開,打開後如下圖1 二、日誌工具log log.v() log.d() log.i() l

同步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的依賴管理中,有兩種方式可以對依賴關

C#學習2017-9-26讀取文本文件讀取二進制文件Notes9

text reader 技術分享 com c# 技術 ges utf not 讀寫文本文件:StreamReader類和StreamWriter類 StreamReader類派生自TextReader類,使用StreamReader類讀取標準文本文件的各自信息,Stre

實驗計算分段函數 第計算分段函數循環NEW 第五分支+循環加強版 實驗報告

scan amp 函數 寬度 中大 解決方法 sca -1 三次 一.實驗題目,設計思路,實現方法 第四次分支+循環 加強版 (2-2計算個人所得稅,2-7 裝睡,2-8計算天數) 設計思路:2-2 用if-else的語句,與計算分段函數的題類似的做法;2-7 運用for語

轉發forward重定向redirect的區別

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

KubernetesK8s安裝部署過程--創建高可用etcd集群

方式安裝 10.9 修改配置 取消 roo initial code clas list 這裏的etcd集群復用我們測試的3個節點,3個node都要安裝並啟動,註意修改配置文件 1、TLS認證文件分發:etcd集群認證用,除了本機有,分發到其他node節

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

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