nftables

nftables 这里有张图 https://wiki.nftables.org/wiki-nftables/index.php/Netfilter_hooks nftables 是一个新式的数据包过滤框架,旨在替代现用的 iptables、ip6tables、arptables 和 ebtables 的新的包过滤框架。nftables 诞生于 2008 年,2013 年底合并到 Linux 内核,从 Linux 内核 3.13 版本开始大多数场景下 nftables 已经可以使用,但是完整的支持(即:nftables 优先级高于 iptables)应该是在 Linux 内核 3.15 版本。 nftables 旨在解决现有 {ip/ip6}tables 工具存在的诸多限制。相对于旧的 iptables,nftables 最引人注目的功能包括:改进性能、支持查询表、事务型规则更新、所有规则自动应用等等。 nftables 主要由三个组件组成:内核实现、libnl netlink 通信和 nftables 用户空间。其中内核提供了一个 netlink 配置接口以及运行时规则集评估,libnl 包含了与内核通信的基本函数,用户空间可以通过新引入的命令行工具 nft 和用户进行交互。 nft 可以通过在寄存器中储存和加载来交换数据。也就是说,它的语法与 iptables 不同。但 nft 可以利用内核提供的表达式去模拟旧的 iptables 命令,维持兼容性的同时获得更大的灵活性。简单来说,nft 是 iptables 及其衍生指令(ip6tables 和 arptables )的超集。 nftables 的特点 nftables 拥有一些高级的类似编程语言的能力,例如:定义变量和包含外部文件,即拥有使用额外脚本的能力。nftables 也可以用于多种地址簇的过滤和处理。 不同于 iptables, nftables 并不包含任何的内置表,需要哪些表并在这些表中添加什么处理规则一切由管理员决定。 表包含规则链,规则链包含规则。 nftables 相较于 iptables 的优点 更新速度更快 在 iptables 中添加一条规则,会随着规则数量增多而变得非常慢。这种状况对 nftables 而言就不存在了,因为 nftables 使用原子的快速操作来更新规则集合。 ...

2016-05-25 · 4 min · 801 words · -

http proxy, whistle, w2, http 调试代理

http proxy, whistle, w2, http 调试代理 whistle HTTP, HTTPS, Websocket debugging proxy tool in linux, like Fiddler for windows install whistle npm install -g whistle yarn global add whistle w2 command w2 help w2 start w2 stop 把代理指向127.0.0.1:8899 浏览器访问 http://127.0.0.1:8899/#network https://github.com/avwo/whistle https://github.com/avwo/whistle/blob/master/README-zh_CN.md https://www.npmjs.com/package/whistle https://avwo.github.io/whistle/install.html

2016-05-24 · 1 min · 44 words · -

OSI 七层协议, TCP/IP 四层协议, osi 7层, tcp/ip 4层

OSI 七层协议, TCP/IP 四层协议, osi 7层, tcp/ip 4层 OSI 七层协议和TCP/IP四层协议之比较 TCP/IP四层协议 数据链路层, Data Link Layer: ARP, RARP, PPPoE (Ethernet 以太网协议,MAC 地址) , 数据链路层和物理层合并为网络接口层 网络层, Network Layer: IP,ICMP,IGMP (IPv4 / IPv6 协议,IP 地址) 传输层: TCP(网络端口),UDP,UGP, QUIC, SCTP (流控制传输协议) 应用层: Telnet,FTP,SMTP,SNMP OSI 七层协议 物理层 Physical Layer: EIA/TIA-232, EIA/TIA-499, V.35, V.24, RJ45, Ethernet, 802.3, 8025, FDDI, NRZI, NRZ, B8ZS 数据链路层 Data Link Layer : Frame Relay, HDLC, PPP, IEEE 802.3/802.2, FDDI, ATM, IEEE 8025/802.2 网络层 Network Layer: IP, IPX, AppleTalk DDP 传输层 Transport Layer: TCP, UDP, SPX, QUIC, SCTP (流控制传输协议) 会话层 Session Layer: RPC, SQL, NFS, NetBIOS, names, AppleTalk, ASP, DECnet, SCP 表示层 Presentation Layer :TIFF,GIF,JPEG,PICT,ASCII,EBCDIC,encryption,MPEG,MIDI,HTML 应用层 Application Layer : FTP, WWW, Telnet, NFS, SMTP, Gateway, SNMP 应用层 为特定应用程序提供数据传输服务,例如 HTTP、DNS 等协议。数据单位为报文。 ...

2016-04-24 · 2 min · 319 words · -

Fiddler

Fiddler 1.为什么是Fiddler? 抓包工具有很多,小到最常用的web调试工具firebug,达到通用的强大的抓包工具wireshark.为什么使用fiddler?原因如下: a.Firebug虽然可以抓包,但是对于分析http请求的详细信息,不够强大。模拟http请求的功能也不够,且firebug常常是需要"无刷新修改",如果刷新了页面,所有的修改都不会保存。 b.Wireshark是通用的抓包工具,但是比较庞大,对于只需要抓取http请求的应用来说,似乎有些大材小用。 c.Httpwatch也是比较常用的http抓包工具,但是只支持IE和firefox浏览器 (其他浏览器可能会有相应的插件) ,对于想要调试chrome浏览器的http请求,似乎稍显无力,而Fiddler2 是一个使用本地 127.0.0.1:8888 的 HTTP 代理,任何能够设置 HTTP 代理为 127.0.0.1:8888 的浏览器和应用程序都可以使用 Fiddler。 2.什么是Fiddler? Fiddler是位于客户端和服务器端的HTTP代理,也是目前最常用的http抓包工具之一 。 它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据、设置断点、调试web应用、修改请求的数据,甚至可以修改服务器返回的数据,功能非常强大,是web调试的利器。 既然是代理,也就是说: 客户端的所有请求都要先经过Fiddler,然后转发到相应的服务器,反之,服务器端的所有响应,也都会先经过Fiddler然后发送到客户端,基于这个原因,Fiddler支持所有可以设置http代理为127.0.0.1:8888的浏览器和应用程序。使用了Fiddler之后,web客户端和服务器的请求如下所示: Fiddler 作为系统代理,当启用 Fiddler 时,IE 的PROXY 设定会变成 127.0.0.1:8888,因此如果你的浏览器在开启fiddler之后没有设置相应的代理,则fiddler是无法捕获到HTTP请求的。如下是启动Fiddler之后,IE浏览器的代理设置: 以Firefox为例,默认情况下,firefox是没有启用代理的 (如果你安装了proxy等代理工具或插件,是另外一种情况) ,在firefox中配置http代理的步骤如下: 工具->选项->高级->网络->设置 。并配置相应的代理如下: 就可以使用Fiddler抓取Firefox的HTTP请求了。 3.Fiddler使用界面简介 Fiddler主界面的布局如下: 主界面中主要包括四个常用的块: 1.Fiddler的菜单栏,上图绿色部分。包括捕获http请求,停止捕获请求,保存http请求,载入本地session、设置捕获规则等功能。 2.Fiddler的工具栏,上图红色部分。包括Fiddler针对当前view的操作 (暂停,清除session,decode模式、清除缓存等) 。 3.web Session面板,上图黄色区域,主要是Fiddler抓取到的每条http请求 (每一条称为一个session) ,主要包含了请求的url,协议,状态码,body等信息,详细的字段含义如下图所示: 4.详情和数据统计面板。针对每条http请求的具体统计 (例如发送/接受字节数,发送/接收时间,还有粗略统计世界各地访问该服务器所花费的时间) 和数据包分析。如inspector面板下,提供headers、textview、hexview,Raw等多种方式查看单条http请求的请求报文的信息: 而composer面板下,则可以模拟向相应的服务器发送数据的过程 (不错,这就是灌水机器人的基本原理,也可以是部分http flood的一种方式) 。 也可以粘贴一次请求的raw http headers,达到模拟请求的目的: Filter标签则可以设置Fiddler的过滤规则,来达到过滤http请求的目的。最简单如: 过滤内网http请求而只抓取internet的http请求,或则过滤相应域名的http请求。Fiddler的过滤器非常强大,可以过滤特定http状态码的请求,可以过滤特定请求类型的http请求 (如css请求,image请求,js请求等) ,可以过滤请求报文大于或则小于指定大小 (byte) 的请求: 请多的过滤器规则需要一步一步去挖掘。 http://blog.csdn.net/ohmygirl/article/details/17846199

2016-03-17 · 1 min · 67 words · -

WNDR4300 openwrt

‘WNDR4300 openwrt’ https://wiki.openwrt.org/zh-cn/toh/netgear/wndr4300 WNDR4300 Flash容量: 128 MiB NAND RAM: 128 MiB mips, not mipsle go build … GOMIPS=softfloat WNDR4300有两种固件,一种为 …ubi-factory.img 格式,一种为 …squashfs-sysupgrade.tar 格式。 其中 img 格式只能用 tftp 的方法刷入。而 tar 只能通过已刷了Openwrt的WEB端进行刷入。 https://downloads.openwrt.org/releases/19.07.3/targets/ar71xx/nand/openwrt-19.07.3-ar71xx-nand-wndr4300-ubi-factory.img https://downloads.openwrt.org/releases/17.01.4/targets/ar71xx/nand/lede-17.01.4-ar71xx-nand-wndr4300-squashfs-sysupgrade.tar opkg update opkg install libopenssl opkg list_installed 下载img文件 http://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/nand/openwrt-15.05-ar71xx-nand-wndr4300-ubi-factory.img 进路由器界面,找到『固件升级』,然后上传这个包点确定。路由器就会自动刷成 openwrt 固件,等待它重启后再连路由器就大功告成了。 下载升级包: http://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/nand/openwrt-15.05-ar71xx-nand-wndr4300-squashfs-sysupgrade.tar稍后在 openwrt 系统里给升级。 基础设置 新的 openwrt 固件默认是不开 wifi 的,所以第一次你得用网线连上路由器,进去后应试能看到 luci 界面,这里会让你输入密码,用户名默认是 root,此时密码还是个空的,随便输一个回车进回界面, 先设置一密码吧,直接点 luci 界面上面的警告条后进入密码设置界面,输入一个你自己的密码,顺便把下面的 远程ssh给勾上。 让你的路由器连上网,按顶部菜单栏进入net-interface选择你的接口,通常是 WAN 口,点旁边的 eidt,然后选择 ppope,点切换,然后输入你的宽带帐号和密码,然后应用。 此时你的路由已经能上网了。 https://wiki.openwrt.org/zh-cn/toh/netgear/wndr4300 http://dlmao.com/wndr4300-%E6%8A%98%E8%85%BE-openwrt-%E8%AE%B0.html http://dlmao.com/wndr4300-zhe-teng-openwrt-ji-zhong-ji-xiu-zheng-ban.html https://bigeagle.me/2016/02/ipset-policy-routing/ https://php-rmcr7.rhcloud.com/openwrt-fq/ https://php-rmcr7.rhcloud.com/openwrt-fq/embed/#?secret=xcThHfkyLS https://cokebar.info/archives/948 https://cokebar.info/archives/948/embed#?secret=k8dinHiD9m https://forum.archive.openwrt.org/viewtopic.php?id=16599

2016-01-09 · 1 min · 76 words · -

tcpdump

tcpdump 用简单的话来定义 tcpdump, 就是: dump the traffic on a network, 根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump 可以将网络中传送的数据包的"头"完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供 and、or、not 等逻辑语句来帮助你去掉无用的信息。 tcpdump 工作在数据链路层 install #archlinux pacman -S tcpdump #redhat yum install -y tcpdump commands # tcpdump 默认读取第一个网络接口上所有流过的数据包。 tcpcump 过滤 tcp flag TCP 协议头中flags 域的可用取值: tcp-fin, tcp-syn, tcp-rst, tcp-push, tcp-ack, tcp-urg # 只捕获TCP SYN包: tcpdump -i <interface> "tcp[tcpflags] & (tcp-syn) != 0" # 只捕获TCP ACK包: tcpdump -i <interface> "tcp[tcpflags] & (tcp-ack) != 0" # 只捕获TCP FIN包: tcpdump -i <interface> "tcp[tcpflags] & (tcp-fin) != 0" # 之捕获TCP SYN或ACK包: tcpdump -r <interface> "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0" tcpdump -nn -i eth0 dst host 172.16.0.213 and 'tcp[tcpflags] & (tcp-rst) != 0' # 打印 TCP 会话中的的开始和结束数据包, 并且数据包的源或目的不是本地网络上的主机 .(nt: localnet, 实际使用时要真正替换成本地网络的名字)) tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet' https://blog.csdn.net/cbbbc/article/details/48897363 ...

2015-10-26 · 25 min · 5319 words · -

TCP 粘包 拆包

TCP 粘(nián)包 拆包 这两个词并没有一一对应的英文 tcp 文档中并不存在 粘包拆包的描述, 一般粘包抓包是指应用层协议的边界定义和数据报读取/处理的问题 tcp是面向流的协议, 在tcp上接收数据报(datagram) 就需要处理 流(stream) 到 数据报的过程. https://www.zhihu.com/question/20210025 TCP是面向字节流的协议,就是没有界限的一串数据,本没有“包”的概念,“粘包”和“拆包”一说是为了有助于形象地理解这两种现象。 粘包拆包发生场景 因为TCP是面向流,没有边界,而操作系统在发送TCP数据时,会通过缓冲区来进行优化,例如缓冲区为1024个字节大小。 如果一次请求发送的数据量比较小,没达到缓冲区大小,TCP则会将多个请求合并为同一个请求进行发送,这就形成了粘包问题。 如果一次请求发送的数据量比较大,超过了缓冲区大小,TCP就会将其拆分为多次发送,这就是拆包。 正常的理想情况,两个包恰好满足TCP缓冲区的大小或达到TCP等待时长,分别发送两个包; 粘包:两个包较小,间隔时间短,发生粘包,合并成一个包发送; 拆包:一个包过大,超过缓存区大小,拆分成两个或多个包发送; 拆包和粘包:Packet1过大,进行了拆包处理,而拆出去的一部分又与Packet2进行粘包处理。 粘包 TCP协议中,发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。 TCP网络通信时候会发生粘包/拆包的问题,接下来探讨其解决之道。 什么是粘包/拆包 一般所谓的 TCP 粘包是在一次接收数据不能完全地体现一个完整的消息数据。 TCP通讯为何存在粘包呢?主要原因是TCP是以流的方式来处理数据,再加上网络上 MTU 的往往小于在应用处理的消息数据,所以就会引发一次接收的数据无法满足消息的需要,导致粘包的存在。 处理粘包的唯一方法就是制定应用层的数据通讯协议,通过协议来规范现有接收的数据是否满足消息数据的需要。 情况分析 TCP 粘包通常在流传输中出现,UDP 则不会出现粘包,因为 UDP 有消息边界,发送数据段需要等待缓冲区满了才将数据发送出去,当满的时候有可能不是一条消息而是几条消息合并在换中去内,在成粘包;另外接收数据端没能及时接收缓冲区的包,造成了缓冲区多包合并接收,也是粘包。 解决办法 消息定长,报文大小固定长度,不够空格补全,发送和接收方遵循相同的约定,这样即使粘包了通过接收方编程实现获取定长报文也能区分。 包尾添加特殊分隔符,例如每条报文结束都添加回车换行符 (例如FTP协议) 或者指定特殊字符作为报文分隔符,接收方通过特殊分隔符切分报文区分。例如,FTP协议; 将消息分为消息头和消息体,消息头中包含表示信息的总长度 (或者消息体长度) 的字段 更复杂的自定义应用层协议 http://my.oschina.net/imhoodoo/blog/357290 为什么UDP没有粘包? 粘包拆包问题在数据链路层、网络层以及传输层都有可能发生。日常的网络应用开发大都在传输层进行,由于UDP有消息保护边界,不会发生粘包拆包问题,因此粘包拆包问题只发生在TCP协议中。 https://cloud.tencent.com/developer/article/1804413 Netty对粘包和拆包问题的处理 Netty对解决粘包和拆包的方案做了抽象,提供了一些解码器 (Decoder)来解决粘包和拆包的问题。如: LineBasedFrameDecoder:以行为单位进行数据包的解码; DelimiterBasedFrameDecoder:以特殊的符号作为分隔来进行数据包的解码; FixedLengthFrameDecoder:以固定长度进行数据包的解码; LenghtFieldBasedFrameDecode:适用于消息头包含消息长度的协议 (最常用); 基于Netty进行网络读写的程序,可以直接使用这些Decoder来完成数据包的解码。对于高并发、大流量的系统来说,每个数据包都不应该传输多余的数据 (所以补齐的方式不可取),LenghtFieldBasedFrameDecode更适合这样的场景。 小结 TCP协议粘包拆包问题是因为TCP协议数据传输是基于字节流的,它不包含消息、数据包等概念,需要应用层协议自己设计消息的边界,即消息帧 (Message Framing)。如果应用层协议没有使用基于长度或者基于终结符息边界等方式进行处理,则会导致多个消息的粘包和拆包。 虽然很多框架中都有现成的解决方案,比如Netty,但底层的原理我们还是要清楚的,而且还要知道有这么会事,才能更好的结合场景进行使用。

2015-09-17 · 1 min · 69 words · -

tcp 状态 LISTENING、ESTABLISHED、TIME_WAIT,CLOSE_WAIT

tcp状态 LISTENING, ESTABLISHED, TIME_WAIT, CLOSE_WAIT TCP协议规定, 对于已经建立的连接, 网络双方要进行四次握手才能成功断开连接, 如果缺少了其中某个步骤, 将会使连接处于假死状态, 连接本身占用的资源不会被释放。网络服务器程序要同时管理大量连接, 所以很有必要保证无用连接完全断开, 否则大量僵死的连接会浪费许多服务器资源。在众多TCP状态中, 最值得注意的状态有两个: CLOSE_WAIT 和 TIME_WAIT。 LISTENING 状态 TCP 服务启动后首先处于侦听 (LISTENING) 状态。 ESTABLISHED 状态 ESTABLISHED的意思是建立连接。表示两台机器正在通信。 CLOSE_WAIT 对方主动关闭连接或者网络异常导致连接中断, 这时我方的状态会变成 CLOSE_WAIT 此时我方要调用 close() 来使得连接正确关闭 TIME_WAIT 我方主动调用 close() 断开连接, 收到对方确认后状态变为 TIME_WAIT。 TCP 协议规定 TIME_WAIT 状态会一直持续 2MSL (即两倍的分段最大生存期), 以此来确保旧的连接状态不会对新连接产生影响。处于 TIME_WAIT 状态的连接占用的资源不会被内核释放, 所以作为服务器, 在可能的情况下, 尽量不要主动断开连接, 以减少 TIME_WAIT 状态造成的资源浪费。 目前有一种避免 TIME_WAIT 资源浪费的方法, 就是关闭 socket 的 LINGER 选项。但这种做法是 TCP 协议不推荐使用的, 在某些情况下这个操作可能会带来错误。 http://www.cppblog.com/prayer/archive/2009/04/01/78592.html http://www4.cs.fau.de/Projects/JX/Projects/TCP/tcpstate.html TIME_WAIT CLOSE_WAIT http://blog.csdn.net/kobejayandy/article/details/17655739 在服务器的日常维护过程中,会经常用到下面的命令: ...

2015-04-11 · 1 min · 173 words · -

tcp http 调试, 抓包工具, wireshark, Fiddler

tcp http 调试, 抓包工具, wireshark, Fiddler wireshark wireshark 的前身是Ethereal,2006年因为其创始人Gerald Combs的跳槽而改名为wireshark。它是一个跨平台的软件,可以在unix系列、linux、mac os、windows等多个平台上面进行网络协议抓包工作。同时他也是一个开源软件,有兴趣的话可以下载源码深入了解。我们可以通过wireshark官网进一步了解相关知识及下载该软件。 fiddler fiddler 的定位是网页调试工具,能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据。我们还可以为fiddler安装自己所需的插件,从而更好的利用fiddler的强大功能。详细介绍信息可以通过fiddler官网进一步了解, 做Web开发或者Web分析经常需要查看Http通讯的过程,项目实践中,很多Web相关的各种各样稀奇古怪的问题,最后都能通过分析HTTP流量得以解决。我到现在用过的比较好用的两个Http流量分析工具,一个是HTTP Watch,另外一个是Fiddler。 HTTP Watch HTTP Watch是我最早用过的HTTP流量分析工具。它只能用于IE和Firefox浏览器上。 它有两种使用界面,一种是以插件的形式附加在浏览器上面,供实时分析使用。你可以看到当前窗口中所有的HTTP请求/响应过程。另外它允许把实时分析的结果保存为后缀名为hwl的文件,然后用其自带的Http Watch Studio工具打开,这样既方便了以后对此过程再次进行分析,也方便与其他人共享,易于调试。下面是它的插件界面的截图,非常清新简洁: image 它的界面非常简单,主要分成三部分: 工具栏,HTTP消息概览,HTTP消息细节窗口。 工具栏主要是方便你快速过滤出你想要分析HTTP消息。 image 你可以按照HTTP流量内容类型去筛选,例如只查看图片相关的HTTP流量。或者根据Url是否包含某特定字符串进行过滤,等等。另外工具栏也提供了"清缓存"和"清Cookie"两个非常常见的操作。 HTTP消息概览栏可以让你快速查看当前窗口中的所有HTTP消息,每个HTTP消息花费的时间,以及服务器返回的状态码,请求的Url等等。默认它还会按照HTTP消息发起的页面进行分组,方便查看。 最底部就是每条HTTP消息的详细信息。最后面的Stream标签页显示的是最原始的HTTP请求/响应流。这里记录的信息是最详细的。 image 为了方便分析常见的需求,它将HTTP消息分成几个部分,也就是你上面看到的Headers、Cookies、QueryString、PostData等等标签页所展示的内容。下面的图展示了此次HTTP通讯涉及的Cookie,每个Cookie的键值,作用的主机域以及路径、过期时间等。 image HTTP Watch Studio就不做介绍了,基本和插件版本的一致,只不过可以脱离浏览器直接分析以前保存的HTTP通讯过程。 HTTP Watch提供了基础版本以及专业版本,其中基础版本是免费的。事实上基础版本提供的功能已经能够适用于大多数的情况了。 官方站点: http://www.httpwatch.com Fiddler Fiddler是微软推出的一个免费的HTTP流量分析工具。一开始我以为他只支持IE——毕竟是微软的东西——加之常见的功能HTTP Watch都已经够用了,就没怎么关注。这些天因为要调试Chrome浏览器上的一些问题,而Chrome自带的开发者工具又非常糟糕,搜着搜着又再次找到了Fiddler。 image Fiddler的界面和HTTP Watch差不多,都是分成三部分,工具栏+HTTP通讯总览+HTTP消息细节。只不过默认情况下它把HTTP消息细节窗口放到了右边。 用了一阵子发现,HTTP Watch能做到的,基本在Fiddler上都可以实现。不过Fiddler的界面显得比HTTP Watch要复杂一些,因为它提供了一些HTTP Watch没有的功能。下面主要介绍的是它和HTTP Watch不一样的地方,一样的功能就略过了。 Fiddler能够监视所有本地进程的HTTP消息,而不仅限于IE、Firefox这些浏览器。这比HTTP Watch适用范围更广。下图显示了google talk和Visual Studio发起的HTTP请求. image 安装完Fiddler之后你会发现IE还有Firefox中都多了个Fiddler的插件,Fiddler的原理实际上是在本地启动HTTP代理服务器,因为除了Firefox以外,很多应用程序包括其他浏览器都会应用IE上设置的代理。所以Fiddler只需要设置IE和Firefox这两个浏览器的代理服务器即可。这个插件做的事情实际上就是起到动态切换代理服务器的作用。 选中左侧某条特定的HTTP请求,Fiddler会在右侧帮你统计一下当前选中的HTTP消息的一些性能指标,例如发送/接受字节数,发送/接收时间,还有粗略统计世界各地访问该服务器所花费的时间。 image 在右侧窗口中,你可以采用各种视图去解析同一个HTTP请求/响应。例如以纯文本视图,或者图片视图,十六进制视图等等。它还提供了一个压缩测试工具,告诉你如果启用了Gzip或者deflate等压缩之后能够节省多少传输字节。 image Fiddler会记录下每次HTTP通讯的过程,然后允许你在不将请求发送给服务器的情况下返回之前记录的响应结果。 Fiddler还允许你对HTTP请求下断点,然后你可以根据情况来决定每个请求所返回的响应。 如果你想测试一些特殊的HTTP请求或者修改当前请求一些报头的时候,你不需要自己再写一个小程序去实现这样的功能,因为在Fiddler提供了直接编写HTTP请求的功能。你可以模拟浏览器去发送HTTP消息。 Fiddler支持插件机制,如果你觉得它提供的功能还不够用,那么你可以安装各种插件以增强它的功能或者编写自己的插件。官网上提供了几个不错的插件供免费下载。一个可以用于对HTML和Javascript代码进行语法着色,还有一个可以监视Web应用程序的安全隐患。 官方站点: http://www.fiddler2.com 总结 总的来说,HTTP Watch的使用相比Fiddler更简洁、容易上手。但是只适用于IE和Firefox。Fiddler功能更为强大,适用范围更广,而且还是免费的。具体用哪个就得看实际需求了。 1.为什么是Fiddler? ...

2013-12-13 · 1 min · 139 words · -

socket, 套接字, 套接口

socket, 套接字, 套接口 应用层通过传输层进行数据通信时,TCP 和 UDP 会遇到同时为多个应用程序进程提供并发服务的问题。多个 TCP 连接或多个应用程序进程可能需要通过同一个 TCP 协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与 TCP/IP 协议交互提供了称为 socket (Socket) 的接口,区分不同应用程序进程间的网络通信和连接。 生成 socket ,主要有3个参数: 通信的目的 IP 地址、使用的传输层协议(TCP或UDP)和使用的端口号。Socket原意是"插座"。通过将这3个参数结合起来,与一个"插座"Socket绑定,应用层就可以和传输 层通过 socket 接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。 Socket可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket中,使这段信息能传送到其他程序中。 Host A上的程序A将一段信息写入Socket中,Socket的内容被Host A的网络管理软件访问,并将这段信息通过Host A的网络接口卡发送到Host B,Host B的网络接口卡接收到这段信息后,传送给Host B的网络管理软件,网络管理软件将这段信息保存在Host B的Socket中,然后程序B才能在Socket中阅读这段信息。 要通过互联网进行通信,至少需要一对 socket ,一个运行于客户机端,称之为ClientSocket,另一个运行于服务器端,称之为serverSocket。 根据连接启动的方式以及本地 socket 要连接的目标, socket 之间的连接过程可以分为三个步骤: 服务器监听,客户端请求,连接确认。 服务器监听: 是服务器端 socket 并不定位具体的客户端 socket ,而是处于等待连接的状态,实时监控网络状态。 客户端请求: 是指由客户端的 socket 提出连接请求,要连接的目标是服务器端的 socket 。为此,客户端的 socket 必须首先描述它要连接的服务器的 socket ,指出服务器端 socket 的地址和端口号,然后就向服务器端 socket 提出连接请求。 连 接确认: 是指当服务器端 socket 监听到或者说接收到客户端 socket 的连接请求,它就响应客户端 socket 的请求,建立一个新的线程,把服务器端 socket 的描述发给客 户端,一旦客户端确认了此描述,连接就建立好了。而服务器端 socket 继续处于监听状态,继续接收其他客户端 socket 的连接请求。 ...

2013-11-17 · 2 min · 260 words · -

iptables basic

iptables basic iptables 是 Linux 内核集成的 IP 信息包过滤系统。该系统用于在 Linux 系统上控制 IP 数据包过滤和防火墙配置 iptables 操作的是 2.4 以上内核的 netfilter。所以需要 linux 的内核在 2.4 以上。其功能与安全性远远比其前辈 ipfwadm, ipchains 强大,iptables大致是工作在OSI七层的二、三、四层,其前辈ipchains不能单独实现对tcp/udp port以及对mac地址的的定义与操作 iptables-nft iptables vs. iptables-nft https://developers.redhat.com/blog/2020/08/18/iptables-the-two-variants-and-their-relationship-with-nftables#the_iptables_rules_appear_in_the_nftables_rule_listing iptables 包含4个表,5个链 其中表是按照对数据包的操作区分的,链是按照不同的Hook点来区分的,表和链实际上是netfilter的两个维度. 4个表: filter, nat, mangle, raw,默认表是 filter (没有指定表 ( -t ) 的时候就是filter表) 。 表的处理优先级: raw>mangle>nat>filter 4 个表 filter: 一般的过滤功能, 这是默认的表,包含了内建的链 INPUT (处理进入的包)、FORWARD (处理通过的包) 和OUTPUT (处理本地生成的包) 。 nat: 用于nat功能 (端口映射,地址映射等),对应的链: PREROUTING (修改到来的包)、OUTPUT (修改路由之前本地的包) 、POSTROUTING (修改准备出去的包) ,centos6没有input链,centos7 有 input 链。 mangle: 用于对特定数据包的修改, 对应的链: PREROUTING (修改路由之前进入的包) ,input, OUTPUT (修改路由 IPTABLES 之前本地的包), forward, postrouting raw: 优先级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能 5 个链: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING PREROUTING: 数据包进入路由表之前 INPUT: 通过路由表后目的地为本机 FORWARD: 通过路由表后, 目的地不为本机 OUTPUT: 由本机产生, 向外转发 POSTROUTIONG: 发送到网卡接口之前 iptables 规则的语法 iptables [-t table] COMMAND chain CRETIRIA -j ACTION -t table : 3个filter nat mangle COMMAND: 定义如何对规则进行管理 chain: 指定你接下来的规则到底是在哪个链上操作的,当定义策略的时候,是可以省略的 CRETIRIA:指定匹配标准 -j ACTION :指定如何进行处理 iptables [-t table] COMMAND chain CRETIRIA -j ACTION iptables [-t table] -[AD] chain rule-specification [options] iptables [-t table] -I chain [rulenum] rule-specification [options] iptables [-t table] -R chain rulenum rule-specification [options] iptables [-t table] -D chain rulenum [options] iptables [-t table] -[LFZ] [chain] [options] # 创建新的链 iptables [-t table] -N chain iptables [-t table] -X [chain] iptables [-t table] -P chain target [options] iptables [-t table] -E old-chain-name new-chain-name # 创建链 iptables -t mangle -N chain0 指定链 iptables -t filter -L FORWARD nf_conntrack iptalbes 会使用 nf_conntrack 模块跟踪连接,而这个连接跟踪的数量是有最大值的,当跟踪的连接超过这个最大值,就会导致连接失败。 通过命令查看 ...

2013-11-10 · 7 min · 1412 words · -

网络地址转换 NAT,Network Address Translation

网络地址转换 NAT,Network Address Translation NAT 属接入广域网(WAN)技术, 是一种将私有(保留)地址转化为公有(合法)IP地址的转换技术, 它被广泛应用于各种类型Internet接入方式和各种类型的网络中。 原因很简单,NAT 不仅完美地解决了 IP 地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。 基本网络地址转换 (Basic NAT) 是一种将一组 I P地址映射到另一组 IP 地址的技术,这对终端用户来说是透明的。 网络地址端口转换 (NAPT) 是一种将群体网络地址及其对应 TCP/UDP 端口翻译成单个网络地址及其对应TCP/UDP端口的方法。 这两种操作,即传统 NAT 提供了一种机制,将只有私有地址的内部领域连接到有全球唯一注册地址的外部领域。 由于保密原因或 IP 在外网不合法,网络的内部 IP 地址无法在外部网络使用,就产生了 IP 地址转换的需求。局域网络以外的网络的拓扑结构能以多种方式改变: 公司更换供应商;重组公司主干网络或者供应商合并或散伙。一旦外部拓扑结构改变,本地网络的地址分配也必须改变以反映外部变化。通过将这些变化集中在单个地址转换路由器中,局域网用户并不需知道这些改变。基本地址转换允许主机从内部网络中透明地访问外部网络,并容许从外部访问选定的本地主机。对于一个机构其网络主要用于内部服务而仅有时用于外部访问, 这种配置是很适用的。 使用这种转换方法是有一定限制的,即会话的请求及响应的发送必须经过相同的 NAT路由器。在边界路由器上安装 NAT 能确保这一过程,边界路由器在该域中是唯一的,而所有经过的 IP 包要么来自于此域要么到达此域。此外还可使用多重 NAT 设备确保这一过程。 NAT 解决方法有其不足之处,仅以增强的网络状态作为补充,而忽略了 IP 地址端对端的重要性。结果是,由于存在 NAT 设备,由 IPSec 保证的端对端 IP 网络级安全无法应用到终端主机。此方法的优势是不需要改变主机或路由器就可以直接安装 NAT 。 转换方式 NAT的实现方式有三种,即静态转换 Static Nat、动态转换 Dynamic Nat和端口多路复用OverLoad。 静态转换是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。借助于静态转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。 动态转换是指将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址时,就可以进行动态转换。动态转换可以使用多个合法外部地址集。当ISP提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式。 端口多路复用(Port address Translation,PAT)是指改变外出数据包的源端口并进行端口转换,即端口地址转换(PAT,Port Address Translation).采用端口多路复用方式。内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自internet的攻击。因此,目前网络中应用最多的就是端口多路复用方式。 相关实现 ...

2013-11-10 · 1 min · 206 words · -

TCP Keep-Alives

TCP Keep-Alives https://zhuanlan.zhihu.com/p/28894266 https://datatracker.ietf.org/doc/html/rfc1122#page-101 当客户端端等待超过一定时间后自动给服务端发送一个空的报文,如果对方回复了这个报文证明连接还存活着,如果对方没有报文返回且进行了多次尝试都是一样,那么就认为连接已经丢失,客户端就没必要继续保持连接了。如果没有这种机制就会有很多空闲的连接占用着系统资源。 KeepAlive并不是TCP协议规范的一部分,但在几乎所有的TCP/IP协议栈(不管是Linux还是Windows)中,都实现了KeepAlive功能。 如何设置它? 在设置之前我们先来看看KeepAlive都支持哪些设置项 KeepAlive默认情况下是关闭的,可以被上层应用开启和关闭 tcp_keepalive_time: KeepAlive的空闲时长,或者说每次正常发送心跳的周期,默认值为7200s(2小时) tcp_keepalive_intvl: KeepAlive探测包的发送间隔,默认值为75s tcp_keepalive_probes: 在tcp_keepalive_time之后,没有接收到对方确认,继续发送保活探测包次数,默认值为9(次) 在Linux内核设置 KeepAlive默认不是开启的,如果想使用KeepAlive,需要在你的应用中设置SO_KEEPALIVE才可以生效。 查看当前的配置: cat /proc/sys/net/ipv4/tcp_keepalive_time cat /proc/sys/net/ipv4/tcp_keepalive_intvl cat /proc/sys/net/ipv4/tcp_keepalive_probes 在Linux中我们可以通过修改 /etc/sysctl.conf 的全局配置: net.ipv4.tcp_keepalive_time=7200 net.ipv4.tcp_keepalive_intvl=75 net.ipv4.tcp_keepalive_probes=9 添加上面的配置后输入 sysctl -p 使其生效,你可以使用 sysctl -a | grep keepalive 命令来查看当前的默认配置 如果应用中已经设置SO_KEEPALIVE,程序不用重启,内核直接生效

2013-10-20 · 1 min · 41 words · -

POP3、SMTP、IMAP和Exchange

POP3, SMTP, IMAP 和 Exchange 当前常用的电子邮件协议有 SMTP、POP3、IMAP4, 它们都隶属于TCP/IP协议簇, 默认状态下, 分别通过 TCP 端口 25、110 和 143 建立连接 SMTP, Simple Mail Transfer Protocol SMTP 是一种提供可靠且有效电子邮件传输的应用层协议。SMTP 协议属于TCP/IP协议族, 主要用于传输系统之间的邮件信息并提供来信有关的通知。 SMTP 目前已是事实上的 E-Mail 传输的标准。 SMTP端口587 SMTP 即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。 它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器, 就可以把E-mail寄到收信人的服务器上了, 整个过程只要几分钟。 SMTP 服务器则是遵循 SMTP 协议的发送邮件的服务器, 用来发送或中转发出的电子邮件。 SMTP认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器, 这就使得那些垃圾邮件的散播者无可乘之机。增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。 SMTP 独立于特定的传输子系统,且只需要可靠有序的数据流信道支持。SMTP 重要特性之一是其能跨越网络传输邮件,即" SMTP 邮件中继"。通常,一个网络可以由公用互联网上 TCP 可相互访问的主机、防火墙分隔的 TCP/IP 网络上 TCP 可相互访问的主机,及其它 LAN/WAN 中的主机利用非 TCP传输层协议组成。使用 SMTP ,可实现相同网络上处理机之间的邮件传输,也可通过中继器或网关实现某处理机与其它网络之间的邮件传输。 在这种方式下,邮件的发送可能经过从发送端到接收端路径上的大量中间中继器或网关主机。域名服务系统 (DNS) 的邮件交换服务器可以用来识别出传输邮件的下一条 IP 地址。 在传输文件过程中使用端口: 25 是因特网电子邮件系统首要的应用 层协议。它使用由TCP提供的可靠的数据传输服务把邮件消息从发信人的邮件服务器传送到收信人的邮件服务器。跟大多数应用层协议一样,SMTP也存在两个 端: 在发信人的邮件服务器上执行的客户端和在收信人的邮件服务器上执行的服务器端。SMTP的客户端和服务器端同时运行在每个邮件服务器上。当一个邮件服 务器在向其他邮件服务器发送邮件消息时,它是作为SMTP客户在运行。当一个邮件服务器从其他邮件服务器接收邮件消息时,它是作为SMTP服务器在运行。 ...

2013-05-20 · 1 min · 207 words · -

二级域名

二级域名 二级域名是指顶级域名之下的域名,在国际顶级域名下,它是指域名注册人的网上名称;在国家顶级域名下,它是表示注册企业类别的符号。我国在国际互联网络信息中心 (Inter NIC) 正式注册并运行的顶级域名是CN,这也是我国的一级域名。在顶级域名之下,我国的二级域名又分为类别域名和行政区域名两类。类别域名共6个,包括用于科研机构的ac;用于工商金融企业的com;用于教育机构的edu;用于政府部门的gov;用于互联网络信息中心和运行中心的net;用于非盈利组织的org。而行政区域名有34个,分别对应于我国各省、自治区和直辖市。 二级域名就是主域名分出来域名。 1)二级域名是寄存在主域名之下的域名。 2)二级域名属于一个独立的分支,他有自己的收录、快照、PR值、反链等。 3)当主域名受到惩罚,二级域名[1]也会连带惩罚。 1、形如"abc com/bbs"的采取目录形式的不能够称为二级域名,一般网民称之为"子页面"。 2、形如".com cn、.net cn、.org cn、.gd cn"的在注册域名时可以见到的也不能够称为二级域名,一般专业人士称之为"二级域"。 3、二级域名的权重高于二级目录,二级域名是作为一个独立的域名出现在互联网上,而二级目录是以网站子页面出现的,所以很多人认为两者之间的权重相同,这种认识是错误的。 4、二级域名比较适用于大型网站,像58同城,赶集网,千龙网,意动时代等大型网站。因为使用二级域名可以减短网址途径的长度,也许会对收录起到很好的效果。全站交织衔接,可以使搜索引擎能检索到,还主动生成网站地图。 5、很多人都误把带www当成一级域名,把其他前缀的当成二级域名,是非常错误的。正确的域名划分为: baidu .com 主(一级)域名 www.baidu .com 二级域名 bbs.baidu .com 二级域名 tieba.baidu .com 二级域名 什么时候使用二级域名好 如果你的营销团队决定推广一个内容或目的完全不同的url,并且决定使用一个吸引人的子域名,那么使用子域名可能是现实选择。如maps.domain这样的网站,就是出于营销考虑使用的子域名成为可接受选择的例子。一个有很好理由使用子域名的情况是,有时候与主域名区隔开的子域名看起来更有权威性。 要小心新闻媒体对域名的关注,因为没有经验的用户经常不理解子域名的概念或者网站域名可以没有www。使用子目录,少一些华丽的营销比通过品牌和广告教育别人要便宜的多了。所以也需要好好研究一番。 如果在域名中使用关键词至关重要的话,子域名也可能是个很合理的选择。搜索引擎似乎确实给予url中的关键词不少权重,而且子域名中完全匹配的关键词权重比子目录要高一些。一般来说权重肯定是一级域名>二级域名>二级目录,但是很多网站都设置了301重定向,就是点击一级域名的时候,由于设置了301重定向,会直接跳转到设置好的二级域名上,这时一级域名的所有权重都转移到二级域名上,这时候一级域名的权重就和二级域名权重是相同的

2013-04-12 · 1 min · 35 words · -

队头阻塞, head-of-line blocking

队头阻塞, head-of-line blocking 队头阻塞一般指的是TCP协议中的队头阻塞,HTTP1.1中也有一个类似TCP队头阻塞的问题 TCP队头阻塞 队头阻塞 (head-of-line blocking)发生在一个TCP分节丢失,导致其后续分节不按序到达接收端的时候。该后续分节将被接收端一直保持直到丢失的第一个分节被发送端重传并到达接收端为止。该后续分节的延迟递送确保接收应用进程能够按照发送端的发送顺序接收数据。这种为了达到完全有序而引入的延迟机制非常有用,但也有不利之处。 假设在单个TCP连接上发送语义独立的消息,比如说服务器可能发送3幅不同的图像供Web浏览器显示。为了营造这几幅图像在用户屏幕上并行显示的效果,服务器先发送第一幅图像的一个断片,再发送第二幅图像的一个断片,然后再发送第三幅图像的一个断片;服务器重复这个过程,直到这3幅图像全部成功地发送到浏览器为止。 要是第一幅图像的某个断片内容的TCP分节丢失了,客户端将保持已到达的不按序的所有数据,直到丢失的分节重传成功。这样不仅延缓了第一幅图像数据的递送,也延缓了第二幅和第三幅图像数据的递送。 HTTP队头阻塞 上面用浏览器请求图片资源举例子,但实际上HTTP自身也有类似TCP队头阻塞的情况。要介绍HTTP队头阻塞,就需要先讲讲HTTP的管道化 (pipelining)。 HTTP管道化是什么 HTTP1.1 允许在持久连接上可选的使用请求管道。 这是相对于 keep-alive 连接的又一性能优化。在响应到达之前,可以将多条请求放入队列,当第一条请求发往服务器的时候,第二第三条请求也可以开始发送了,在高延时网络条件下,这样做可以降低网络的环回时间,提高性能。 HTTP管道化产生的背景 在一般情况下,HTTP遵守“请求-响应”的模式,也就是客户端每次发送一个请求到服务端,服务端返回响应。这种模式非常容易理解,但是效率并不是那么高,为了提高速度和效率,人们做了很多尝试: 最简单的情况下,服务端一旦返回响应后就会把对应的连接关闭,客户端的多个请求实际上是串行发送的。 除此之外,客户端可以选择同时创建多个连接,在多个连接上并行的发送不同请求。但是创建更多连接也带来了更多的消耗,当前大部分浏览器都会限制对同一个域名的连接数。 从HTTP1.0开始增加了持久连接的概念 (HTTP1.0的 Keep-Alive 和HTTP1.1的 persistent),可以使HTTP能够复用已经创建好的连接。客户端在收到服务端响应后,可以复用上次的连接发送下一个请求,而不用重新建立连接。 现代浏览器大多采用并行连接与持久连接共用的方式提高访问速度,对每个域名建立并行地少量持久连接。 而在持久连接的基础上,HTTP1.1进一步地支持在持久连接上使用管道化 (pipelining)特性。管道化允许客户端在已发送的请求收到服务端的响应之前发送下一个请求,借此来减少等待时间提高吞吐;如果多个请求能在同一个TCP分节发送的话,还能提高网络利用率。但是因为HTTP管道化本身可能会导致队头阻塞的问题,以及一些其他的原因,现代浏览器默认都关闭了管道化。 HTTP管道化的限制 管道化要求服务端按照请求发送的顺序返回响应 (FIFO),原因很简单,HTTP请求和响应并没有序号标识,无法将乱序的响应与请求关联起来。 客户端需要保持未收到响应的请求,当连接意外中断时,需要重新发送这部分请求。 只有幂等的请求才能进行管道化,也就是只有GET和HEAD请求才能管道化,否则可能会出现意料之外的结果 HTTP管道化引起的请求队头阻塞 前面提到HTTP管道化要求服务端必须按照请求发送的顺序返回响应,那如果一个响应返回延迟了,那么其后续的响应都会被延迟,直到队头的响应送达。 如何解决队头阻塞 如何解决HTTP队头阻塞 对于HTTP1.1中管道化导致的请求/响应级别的队头阻塞,可以使用HTTP2解决。HTTP2不使用管道化的方式,而是引入了帧、消息和数据流等概念,每个请求/响应被称为消息,每个消息都被拆分成若干个帧进行传输,每个帧都分配一个序号。每个帧在传输时属于一个数据流,而一个连接上可以存在多个流,各个帧在流和连接上独立传输,到达之后在组装成消息,这样就避免了请求/响应阻塞。 当然,即使使用HTTP2,如果HTTP2底层使用的是TCP协议,仍可能出现TCP队头阻塞。 如何解决TCP队头阻塞 TCP中的队头阻塞的产生是由TCP自身的实现机制决定的,无法避免。想要在应用程序当中避免TCP队头阻塞带来的影响,只有舍弃TCP协议。 比如google推出的quic协议,在某种程度上可以说避免了TCP中的队头阻塞,因为它根本不使用TCP协议,而是在UDP协议的基础上实现了可靠传输。而UDP是面向数据报的协议,数据报之间不会有阻塞约束。 此外还有一个SCTP (流控制传输协议),它是和TCP、UDP在同一层次的传输协议。SCTP的多流特性也可以尽可能的避免队头阻塞的情况。 总结 从TCP队头阻塞和HTTP队头阻塞的原因我们可以看到,出现队头阻塞的原因有两个: 独立的消息数据都在一个链路上传输,也就是有一个“队列”。比如TCP只有一个流,多个HTTP请求共用一个TCP连接 队列上传输的数据有严格的顺序约束。比如TCP要求数据严格按照序号顺序,HTTP管道化要求响应严格按照请求顺序返回 所以要避免队头阻塞,就需要从以上两个方面出发,比如quic协议不使用TCP协议而是使用UDP协议,SCTP协议支持一个连接上存在多个数据流等等。 作者:熊纪元 链接:https://juejin.cn/post/6844903853985366023 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 作者:熊纪元 链接:https://juejin.cn/post/6844903853985366023 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2013-03-24 · 1 min · 60 words · -

CNI

CNI 常见的 CNI 插件包括 Calico、flannel、Terway、Weave Net 以及 Contiv。 在对CNI插件们进行比较之前,我们可以先对网络中会见到的相关术语做一个整体的了解。不论是阅读本文,还是今后接触到其他和CNI有关的内容,了解一些常见术语总是非常有用的。 一些最常见的术语包括: 第2层网络: OSI (Open Systems Interconnections,开放系统互连)网络模型的“数据链路”层。第2层网络会处理网络上两个相邻节点之间的帧传递。第2层网络的一个值得注意的示例是以太网,其中MAC表示为子层。 第3层网络: OSI网络模型的“网络”层。第3层网络的主要关注点,是在第2层连接之上的主机之间路由数据包。IPv4、IPv6和ICMP是第3层网络协议的示例。 VXLAN:代表“虚拟可扩展LAN”。首先,VXLAN用于通过在UDP数据报中封装第2层以太网帧来帮助实现大型云部署。VXLAN虚拟化与VLAN类似,但提供更大的灵活性和功能 (VLAN仅限于4096个网络ID)。VXLAN是一种封装和覆盖协议,可在现有网络上运行。 Overlay网络:Overlay网络是建立在现有网络之上的虚拟逻辑网络。Overlay网络通常用于在现有网络之上提供有用的抽象,并分离和保护不同的逻辑网络。 封装:封装是指在附加层中封装网络数据包以提供其他上下文和信息的过程。在overlay网络中,封装被用于从虚拟网络转换到底层地址空间,从而能路由到不同的位置 (数据包可以被解封装,并继续到其目的地)。 网状网络:网状网络 (Mesh network)是指每个节点连接到许多其他节点以协作路由、并实现更大连接的网络。网状网络允许通过多个路径进行路由,从而提供更可靠的网络。网状网格的缺点是每个附加节点都会增加大量开销。 BGP:代表“边界网关协议”,用于管理边缘路由器之间数据包的路由方式。BGP通过考虑可用路径,路由规则和特定网络策略,帮助弄清楚如何将数据包从一个网络发送到另一个网络。BGP有时被用作CNI插件中的路由机制,而不是封装的覆盖网络。 CNI比较 Flannel 链接:https://github.com/coreos/fla… 由CoreOS开发的项目Flannel,可能是最直接和最受欢迎的CNI插件。它是容器编排系统中最成熟的网络结构示例之一,旨在实现更好的容器间和主机间网络。随着CNI概念的兴起,Flannel CNI插件算是早期的入门。 与其他方案相比,Flannel相对容易安装和配置。它被打包为单个二进制文件flanneld,许多常见的Kubernetes集群部署工具和许多Kubernetes发行版都可以默认安装 Flannel. Flannel可以使用Kubernetes集群的现有etcd集群来使用API存储其状态信息,因此不需要专用的数据存储。 Flannel配置第3层IPv4 overlay网络。它会创建一个大型内部网络,跨越集群中每个节点。在此overlay网络中,每个节点都有一个子网,用于在内部分配IP地址。在配置pod时,每个节点上的Docker桥接口都会为每个新容器分配一个地址。同一主机中的Pod可以使用Docker桥接进行通信,而不同主机上的pod会使用flanneld将其流量封装在UDP数据包中,以便路由到适当的目标。 Flannel有几种不同类型的后端可用于封装和路由。默认和推荐的方法是使用VXLAN,因为VXLAN性能更良好并且需要的手动干预更少。 总的来说,Flannel是大多数用户的不错选择。从管理角度来看,它提供了一个简单的网络模型,用户只需要一些基础知识,就可以设置适合大多数用例的环境。一般来说,在初期使用Flannel是一个稳妥安全的选择,直到你开始需要一些它无法提供的东西。 Calico 链接:https://github.com/projectcal… Calico是Kubernetes生态系统中另一种流行的网络选择。虽然Flannel被公认为是最简单的选择,但Calico以其性能、灵活性而闻名。Calico的功能更为全面,不仅提供主机和pod之间的网络连接,还涉及网络安全和管理。Calico CNI插件在CNI框架内封装了Calico的功能。 在满足系统要求的新配置的Kubernetes集群上,用户可以通过应用单个manifest文件快速部署Calico。如果您对Calico的可选网络策略功能感兴趣,可以向集群应用其他manifest,来启用这些功能。 尽管部署Calico所需的操作看起来相当简单,但它创建的网络环境同时具有简单和复杂的属性。与Flannel不同,Calico不使用overlay网络。相反,Calico配置第3层网络,该网络使用BGP路由协议在主机之间路由数据包。这意味着在主机之间移动时,不需要将数据包包装在额外的封装层中。BGP路由机制可以本地引导数据包,而无需额外在流量层中打包流量。 除了性能优势之外,在出现网络问题时,用户还可以用更常规的方法进行故障排除。虽然使用VXLAN等技术进行封装也是一个不错的解决方案,但该过程处理数据包的方式同场难以追踪。使用Calico,标准调试工具可以访问与简单环境中相同的信息,从而使更多开发人员和管理员更容易理解行为。 除了网络连接外,Calico还以其先进的网络功能而闻名。 网络策略是其最受追捧的功能之一。此外,Calico还可以与服务网格Istio集成,以便在服务网格层和网络基础架构层中解释和实施集群内工作负载的策略。这意味着用户可以配置强大的规则,描述pod应如何发送和接受流量,提高安全性并控制网络环境。 如果对你的环境而言,支持网络策略是非常重要的一点,而且你对其他性能和功能也有需求,那么Calico会是一个理想的选择。此外,如果您现在或未来有可能希望得到技术支持,那么Calico是提供商业支持的。一般来说,当您希望能够长期控制网络,而不是仅仅配置一次并忘记它时,Calico是一个很好的选择。

2012-09-26 · 1 min · 48 words · -

使用 arpalert 来做被动式arp防火墙

使用 arpalert 来做被动式arp防火墙 http://forum.ubuntu.org.cn/viewtopic.php?f=116&t=110347&sid=ae4c75fe6a8b5aa1672e8a05bc6f7d85 我说的被动式是指在探测到欺骗时做出防护动作 在局域网环境中 arp 欺骗是个很头疼的问题, 尤其是网关不是自己控制的时候. 虽然自己可以绑定网关, 但是网关就没办法了. 结果导致网关的东西传不回来, 无法上网. 原理: arpalert 监听网卡收到的 arp 包, 并根据规则(黑白名单等)调用一个防护脚本. 安装: 安装以下包: libnet-arp-perl arpalert(建议用最新的 2.0.11 版, 2.0.10 前的版本处理名单时有问题) 另外将以下文本存为 /usr/local/sbin/arpdef.pl 加上可执行权限(755) [perl] #!/usr/bin/perl -w use strict; if ( $< ) { print “$0n”; system(“sudo”,($0,@ARGV)); exit; } my $mac = $ARGV[0]; my $ip = $ARGV[1]; my ($gateip,$gatemac) = (“192.168.6.1”,“00:04:80:FA:3C:00”); exit 0 if ((“U$mac” eq “U$gatemac”) && ($ip eq $gateip)); #logging .. my $date=`date +"%F %T"`; ...

2012-09-19 · 5 min · 1059 words · -

子网, 子网掩码

子网, 子网掩码 子网掩码 subnet mask 子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。 https://www.zhihu.com/question/21064101 IP和子网掩码 IP 是由四段数字组成 3 类常用的 IP A 类IP段 0.0.0.0 到 127.255.255.255 B 类IP段 128.0.0.0 到 191.255.255.255 C 类IP段 192.0.0.0 到 223.255.255.255 A 类的默认子网掩码 255.0.0.0 一个子网最多可以容纳 1677 万个 IP B 类的默认子网掩码 255.255.0.0 一个子网最多可以容纳 6 万个 IP C 类的默认子网掩码 255.255.255.0 一个子网最多可以容纳 254 个 IP 要想在同一网段,只要网络标识相同就可以了,那要怎么看网络标识呢?首先要做的是把每段的IP转换为二进制。 (有人说,我不会转换耶,没关系,我们用 windows 自带计算器就行。打开计算器,点查看>科学型,输入十进制的数字,再点一下"二进制"这个单选点,就可以切换至二进制了。) 把子网掩码切换至二进制,我们会发现,所有的子网掩码是由一串连续的1和一串连续的0组成的 (一共4段,每段8位,一共32位数) 。 255.0.0.0 11111111.00000000.00000000.00000000 255.255.0.0 11111111.11111111.00000000.00000000 255.255.255.0 11111111.11111111.11111111.00000000 这是A/B/C三类默认子网掩码的二进制形式,其实,还有好多种子网掩码,只要是一串连续的1和一串连续的0就可以了 (每段都是8位) 。如11111111.11111111.11111000.00000000,这也是一段合法的子网掩码。子网掩码决定的是一个子网的计算机数目,计算机公式是2的m次方,其中,我们可以把m看到是后面的多少颗0。如255.255.255.0 转换成二进制,那就是11111111.11111111.11111111.00000000,后面有8个0,那m就是8,255.255.255.0 这个子网掩码可以容纳2的8次方 (台) 电脑,也就是256台,但是有两个IP是不能用的,那就是最后一段不能为0和255,减去这两台,就是254台。我们再来做一个。 255.255.248.0这个子网掩码可以最多容纳多少台电脑? 计算方法: 把将其转换为二进制的四段数字 (每段要是8位,如果是0,可以写成8个0,也就是00000000) 11111111.1111111.11111000.00000000 然后,数数后面有几颗0,一共是有11颗,那就是2的11次方,等于2048,这个子网掩码最多可以容纳2048台电脑。 一个子网最多可以容纳多少台电脑你会算了吧,下面我们来个逆向算法的题。 一个公司有530台电脑,组成一个对等局域网,子网掩码设多少最合适? 首先,无疑,530台电脑用B类IP最合适 (A类不用说了,太多,C类又不够,肯定是B类) ,但是B类默认的子网掩码是255.255.0.0,可以容纳6万台电脑,显然不太合适,那子网掩码设多少合适呢?我们先来列个公式。 2的m次方=560 首先,我们确定2一定是大于8次方的,因为我们知道2的8次方是256,也就是C类IP的最大容纳电脑的数目,我们从9次方一个一个试2的9次方是512,不到560,2的10次方是1024,看来2的10次方最合适了。子网掩码一共由32位组成,已确定后面10位是0了,那前面的22位就是1,最合适的子网掩码就是: 11111111.11111111.11111100.00000000,转换成10进制,那就是255.255.252.0。 ...

2012-09-19 · 1 min · 133 words · -

tcp, quic

tcp, quic, 流量复制 tcp, quic @startuml [tcp client] as tc [tq] as tq note left: tcp server:2000 [qt] as qt note left: quic server: 2001 [tcp server] as ts note left: tcp server: 2002 tc --> tq tq --> qt qt --> ts @enduml t2q2t https://github.com/flano-yuki/t2q2t.git

2012-08-31 · 1 min · 46 words · -