哪些 Linux 服务在数据包到达以太网后对其进行管理

哪些 Linux 服务在数据包到达以太网后对其进行管理

我试图了解 linux 服务/进程涉及哪些 tcp 3 向握手。例如谁发送 SYN 请求的拒绝标志 [R.]。

示例:端口 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.] SYN-ACK 8088?还有数据包如何到达监听器,流量是多少?添加防火墙规则(使用 iptables)以在 8089 上丢弃数据包时,流程会怎样?

提前致谢 :)

答案1

TCP 数据包中的标志不由服务和进程直接管理。

通常,开发人员使用标准 POSIX 接口来开发网络功能:socket()connect()listen()bind()accept()等...

Linux 内核是这些调用的主要接收者,它:

  • 将资源分配给服务(socket()例如,在调用时),并且如果资源已在使用中(例如:bind()使用已使用的地址/端口对),则会向调用进程返回错误相应的错误。

  • 管理真正的 TCP 堆栈内容,即开发人员调用时的 3 次握手connect(),或者如果没有服务绑定到请求的地址/端口对(或者如果服务拒绝连接),则返回 RST

  • 从外部接收数据包,并将其内容转发到适当的进程(已经完成bind()connect()来自地址/端口的进程,并且实际上正在相关套接字上调用recv()或。read()

请注意,在进入该过程之前,会触发防火墙以确保允许网络流。因此,即使您有一个服务在 TCP/8000 上侦听,如果您的防火墙不允许连接到它,那么您将得到:

  • ARST如果 iptables 策略或规则执行 a REJECT
  • 如果 iptables 策略或规则执行 则超时IGNORE

相关内容