Tcp

哪些 linux 服務在數據包登陸乙太網後管理數據包

  • February 13, 2020

我試圖了解進行 tcp 3 次握手所涉及的 linux 服務/程序。例如誰發送拒絕標誌

$$ R. $$用於 SYN 請求。 範例:埠 8088 正在偵聽並且 8089 已打開。在兩個埠上發出連接請求後,下面的 tcpdump 輸出。

對於 8089

$ sudo tcpdump -i any -nn port 8088 or port 8089
04:23:12.260621 IP 192.168.112.129.52298 > 192.168.112.129.8089: Flags [S], seq 300539809, win 43690, options [mss 65495,sackOK,TS val 19840756 ecr 0,nop,wscale 7], length 0
04:23:12.260637 IP 192.168.112.129.8089 > 192.168.112.129.52298: Flags [R.], seq 0, ack 300539810, win 0, length 0

對於 8088

$ sudo tcpdump -i any -nn port 8088 or port 8089
04:23:21.680070 IP 192.168.112.129.42814 > 192.168.112.129.8088: Flags [S], seq 670408355, win 43690, options [mss 65495,sackOK,TS val 19850176 ecr 0,nop,wscale 7], length 0
04:23:21.680087 IP 192.168.112.129.8088 > 192.168.112.129.42814: Flags [S.], seq 1185731197, ack 670408356, win 43690, options [mss 65495,sackOK,TS val 19850176 ecr 19850176,nop,wscale 7], length 0
04:23:21.680098 IP 192.168.112.129.42814 > 192.168.112.129.8088: Flags [.], ack 1, win 342, options [nop,nop,TS val 19850176 ecr 19850176], length 0

所以這裡發送哪個linux服務發送

$$ R. $$對於 8089 和$$ S. $$8088 的 SYN-ACK?數據包如何到達偵聽器,流量是多少?添加防火牆規則(使用 iptables)以在 8089 上丟棄數據包時的流程是什麼? 提前致謝 :)

TCP 數據包中的標誌不直接由服務和程序管理。

通常,開發人員使用標準 POSIX 介面來開發網路功能:socket(), connect(), listen(), bind(), accept(), 等…

Linux 核心是這些呼叫的主要接收者,它:

  • 將資源分配給服務(socket()例如在呼叫時),如果資源已經在使用中(例如:bind()-ing 已經使用的地址/埠對),它會向呼叫程序返回錯誤適當的錯誤。
  • 管理真正的 TCP 堆棧內容,即開發人員呼叫時的 3 次握手connect(),或者如果沒有服務綁定到請求的地址/埠對(或者如果服務拒絕連接)則返回 RST
  • 從外部接收數據包並將其內容轉發到適當的程序(已經完成bind()connect()到/從地址/埠並實際呼叫recv()read()在相關套接字上的程序。

請注意,在進入程序之前,會觸發防火牆以確保允許網路流。所以,即使你有一個監聽 TCP/8000 的服務,如果你的防火牆不允許連接到它,那麼你會得到:

  • ARST如果 iptables 策略或規則執行REJECT.
  • 如果 iptables 策略或規則執行IGNORE.

引用自:https://unix.stackexchange.com/questions/567337