linux iptable 封包啥意思

linux iptable 封包啥意思,第1张

iptable是一种网络防火墙,在LINUX下使用,RedHat9.0版本以上自带。它可以实现NAT转换,可以做上网代理。

停止防火墙 service iptables stop

启动防火墙 service iptables start

查看防火墙配置 iptables -L -n

修改的内容只是暂时保存在内存中,如果重启后还要生效,则要保存一下 service iptables save

Internet用户使用的各种信息服务,其通讯的信息最终均可以归结为以IP包为单位的信息传送,IP包除了包括要传送的数据信息外,还包含有信息要发送到的目的IP地址、信息发送的源IP地址、以及一些相关的控制信息。当一台路由器收到一个IP数据包时,它将根据数据包中的目的IP地址项查找路由表,根据查找的结果将此IP数据包送往对应端口。下一台IP路由器收到此数据包后继续转发,直至发到目的地。路由器之间可以通过路由协议来进行路由信息的交换,从而更新路由表。

那么我们所关心的内容只是IP包中的数据信息,我们可以使用许多监听网络的工具来截获客户端与服务器之间的交换数据,下面就向你介绍其中的一种工具:WPE。

WPE使用方法:执行WPE会有下列几项功能可选择:

SELECT GAME选择目前在记忆体中您想拦截的程式,您只需双击该程式名称即可。

TRACE追踪功能。用来追踪撷取程式送收的封包。WPE必须先完成点选欲追踪的程式名称,才可以使用此项目。 按下Play键开始撷取程式收送的封包。您可以随时按下 | | 暂停追踪,想继续时请再按下 | | 。按下正方形可以停止撷取封包并且显示所有已撷取封包内容。若您没按下正方形停止键,追踪的动作将依照OPTION里的设定值自动停止。如果您没有撷取到资料,试试将OPTION里调整为Winsock Version 2。WPE 及 Trainers 是设定在显示至少16 bits 颜色下才可执行。

FILTER过滤功能。用来分析所撷取到的封包,并且予以修改。

SEND PACKET送出封包功能。能够让您送出假造的封包。

TRAINER MAKER制作修改器。

OPTIONS设定功能。让您调整WPE的一些设定值。

FILTER的详细教学

- 当FILTER在启动状态时 ,ON的按钮会呈现红色。- 当您启动FILTER时,您随时可以关闭这个视窗。FILTER将会

留在原来的状态,直到您再按一次 on / off 钮。- 只有FILTER启用钮在OFF的状态下,才可以勾选Filter前的方框来编辑修改。- 当您想编辑某个Filter,只要双击该Filter的名字即可。

最近研究命令行下,远程唤醒(Wake On LAN)家里的windows台式机。

linux下可以用 etherwake 这个软件,发送魔术封包(Magic Packet)远程唤醒机器。

我用的是树莓派,记录一下远程唤醒的方法。

首先安装 etherwake (基于Debian / Ubuntu )

安装完成后,可以用下面的命令远程唤醒

或者(下面两个命令我没有亲自尝试过)

比如你的MAC地址是 AA:BB:CC:DD:EE:FF ,就可以用

发送魔术封包唤醒远程机器。

其实还有其他一些细节,以后有机会慢慢补充吧。

参考文章:

[1] HowTo: Wake Up Computers Using Linux Command [ Wake-on-LAN ( WOL ) ]

一个报文的产生和发送,都需要硬件和软件的完美配合。

硬件层面接收到报文之后,做一系列的初始化 *** 作,之后驱动才开始把一个封包封装为skb。

当然这是在x86架构下,如果是在cavium架构下,封包是wqe形式存在。

不管是skb还是wqe,都仅仅是一种手段,一种达到完成报文传输所采用的一种解决方案,一种方法而已。

或许处理方案的具体实现细节差别万千,但是基本的原理,都是殊途同归,万变不离其宗。

skb的产生,让Linux协议栈旅程的开启,具备了最基本的条件,接下来的协议栈之旅,才会更加精彩。

写作本文的原因是现在本机网络 IO 应用非常广。

在 php 中 一般 nginx 和 php-fpm 是通过 127.0.0.1 来进行通信的;

在微服务中,由于 side car 模式的应用,本机网络请求更是越来越多。

所以,如果能深度理解这个问题在各种网络通信应用的技术实践中将非常的有意义。

今天咱们就把 127.0.0.1 本机网络通信相关问题搞搞清楚!

为了方便讨论,我把这个问题拆分成3问:

1)127.0.0.1 本机网络 IO 需要经过网卡吗?

2)和外网网络通信相比,在内核收发流程上有啥差别?

3)使用 127.0.0.1 能比 192.168.x.x 更快吗?

在上面这幅图中,我们看到用户数据被拷贝到内核态,然后经过协议栈处理后进入到了 RingBuffer 中。随后网卡驱动真正将数据发送了出去。当发送完成的时候,是通过硬中断来通知 CPU,然后清理 RingBuffer。

当数据包到达另外一台机器的时候,Linux 数据包的接收过程开始了。

当网卡收到数据以后,CPU发起一个中断,以通知 CPU 有数据到达。

当CPU收到中断请求后,会去调用网络驱动注册的中断处理函数,触发软中断。

ksoftirqd 检测到有软中断请求到达,开始轮询收包,收到后交由各级协议栈处理。

当协议栈处理完并把数据放到接收队列的之后,唤醒用户进程(假设是阻塞方式)。

关于跨机网络通信的理解,可以通俗地用下面这张图来总结一下:

前面,我们看到了跨机时整个网络数据的发送过程 。

在本机网络 IO 的过程中,流程会有一些差别。

为了突出重点,本节将不再介绍整体流程,而是只介绍和跨机逻辑不同的地方。

有差异的地方总共有两个,分别是路由和驱动程序。

对于本机网络 IO 来说,特殊之处在于在 local 路由表中就能找到路由项,对应的设备都将使用 loopback 网卡,也就是我们常见的 lO。

从上述结果可以看出,对于目的是 127.0.0.1 的路由在 local 路由表中就能够找到了。

对于是本机的网络请求,设备将全部都使用 lo 虚拟网卡,接下来的网络层仍然和跨机网络 IO 一样。

本机网络 IO 需要进行 IP 分片吗?

因为和正常的网络层处理过程一样,如果 skb 大于 MTU 的话,仍然会进行分片。

只不过 lo 的 MTU 比 Ethernet 要大很多。

通过 ifconfig 命令就可以查到,普通网卡一般为 1500,而 lO 虚拟接口能有 65535。

为什么我把“驱动”加个引号呢,因为 loopback 是一个纯软件性质的虚拟接口,并没有真正意义上的驱动。

在邻居子系统函数中经过处理,进入到网络设备子系统,只有触发完软中断,发送过程就算是完成了。

在跨机的网络包的接收过程中,需要经过硬中断,然后才能触发软中断。

而在本机的网络 IO 过程中,由于并不真的过网卡,所以网卡实际传输,硬中断就都省去了。直接从软中断开始,送进协议栈。

网络再往后依次是传输层,最后唤醒用户进程,这里就不多展开了。

我们来总结一下本机网络通信的内核执行流程:

回想下跨机网络 IO 的流程:

通过本文的叙述,我们确定地得出结论,不需要经过网卡。即使了把网卡拔了本机网络是否还可以正常使用的。

总的来说,本机网络 IO 和跨机 IO 比较起来,确实是节约了一些开销。发送数据不需要进 RingBuffer 的驱动队列,直接把 skb 传给接收协议栈(经过软中断)。

但是在内核其它组件上可是一点都没少:系统调用、协议栈(传输层、网络层等)、网络设备子系统、邻居子系统整个走了一个遍。连“驱动”程序都走了(虽然对于回环设备来说只是一个纯软件的虚拟出来的东东)。所以即使是本机网络 IO,也别误以为没啥开销。

先说结论:我认为这两种使用方法在性能上没有啥差别。

我觉得有相当大一部分人都会认为访问本机server 的话,用 127.0.0.1 更快。原因是直觉上认为访问 IP 就会经过网卡。

其实内核知道本机上所有的 IP,只要发现目的地址是本机 IP 就可以全走 loopback 回环设备了。

本机其它 IP 和 127.0.0.1 一样,也是不用过物理网卡的,所以访问它们性能开销基本一样!

How SKBs work - Linux kernel

http://vger.kernel.org/~davem/skb.html

一篇解读Linux网络协议栈

https://zhuanlan.zhihu.com/p/475319464

你真的了解127.0.0.1和0.0.0.0的区别?

http://www.52im.net/thread-2928-1-1.html

深入 *** 作系统,彻底搞懂127.0.0.1本机网络通信

http://www.52im.net/thread-3590-1-1.html


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7110964.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-01
下一篇 2023-04-01

发表评论

登录后才能评论

评论列表(0条)

保存