Tcp
哪些 linux 服務在數據包登陸乙太網後管理數據包
我試圖了解進行 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 的服務,如果你的防火牆不允許連接到它,那麼你會得到:
- A
RST
如果 iptables 策略或規則執行REJECT
.- 如果 iptables 策略或規則執行
IGNORE
.