套接字分析

2021-09-08 17:00:21 字數 782 閱讀 2347

listen函式的監聽佇列長度引數

listen函式將主動套接字轉換為被動監控套接字,其第二個引數backlog決定了核心的連線快取佇列長度。對於乙個給定的監聽套接字,核心維護兩個佇列:

① 未就緒佇列,存放沒有完成三路握手的連線,監聽套接字收到syn並返回ack+syn,連線處於syn_recv狀態,等待對端傳送ack。如果已完成隊 列非滿,則接收ack,連線握手完成,進入已完成佇列;如果已完成佇列滿則丟棄ack,對端重發ack(對端看到的連線是establised狀態),若 未就緒佇列中的syn_recv等待直到超時還沒進入已完成佇列則丟棄連線(對端不知道,只有在讀寫套接字時才知道)。

② 已完成佇列,存放已經完成三路握手的連線(established),等待accept取走連線。

backlog決定了兩個佇列的長度之和(並不是說兩個佇列之和等於backlog,而是存在個轉換,依賴於具體實現)。

如果未就緒佇列滿則忽略新到來的syn請求,對端重發,如果一直不能進入未就緒佇列則對端connect失敗返回。

當 監聽套接字關閉時:① 會對已完成佇列中的每個連線傳送復位分節rst,對端捕獲rst被動關閉連線;② 直接釋放未就緒佇列的連線,這時對端不知道,對端的連線狀態依然保持established狀態,直到對端主動關閉連線,由於監聽端已經關閉連線,所以以 rst響應對端的fin,對端收到rst直接關閉連線。(類似於半開啟連線)

listen()系統呼叫的backlog引數既是連線佇列的長度,也指定了半連線佇列的長度(不能說等於),而不是《unix網路程式設計》中講到的是半連線佇列和連線佇列之和的上限,也就是說這個說法對linux不適用

監聽套接字 連線套接字

摘要 對於伺服器程式設計中最重要的一步等待並接受客戶的連線,那麼這一步在程式設計中如何完成,accept函式就是完成這一步的。它從核心中取出已經建立的客戶連線,然後把這個已經建立的連線返回給使用者程式,此時使用者程式就可以與自己的客戶進行點到點的通訊了。accept函式等待並接受客戶請求 inclu...

包分析(原始套接字七)

緊接上節 decodeippack 函式完成包的解析 ip包解析 int decodeippack char buf,int ibufsize return true 上述程式解析ip包型別後又分別呼叫decodetcppack decodeu ack decodeicmppack 解析相應的tcp...

python套接字 python套接字基本使用

socket socket通常也稱作 套接字 用於描述ip位址和埠,應用程式通常通過 套接字 向網路發出請求或者應答網路請求,可以認為是一種計算機網路的資料結構,介面。它是網路程式設計的基礎 套接字還分為面向連線的和無連線的 第一種是指tcp型別套接字,在通訊前需要建立連線,這種連線是較為可靠的,使...