#68 网络知识十全大补丸 【 Go 夜读 】

#68 网络知识十全大补丸 【 Go 夜读 】

大纲

  1. 网络硬件介绍
  2. 网络部署模式
  3. Linux协议栈
  4. Linux防火墙
  5. 前沿网络传输技术

https://www.bilibili.com/video/BV1vJ41127p2?from=search&seid=5299111189138180641

分享的 pdf 地址 https://github.com/nandyliu/public-lecture/blob/master/2019-%E7%BD%91%E7%BB%9C%E7%9F%A5%E8%AF%86%E5%A4%A7%E8%A1%A5%E4%B8%B8.pdf

建议的参考书籍:

  1. W·Richard Stevens, TCP/IP详解 卷1:协议, TCP/IP ILLustrated Volume 1: The Protocols, 1994
  2. Christian Benvenuti, 深入理解LINUX网络技术内幕, Understanding Linux Network Internals, 2005
  3. Gnv Vibhav Reddy, G.Vijay Kumar, L.Roshini, Congestions and Control Mechanisms in Wired and Wireless Networks, 2014
  4. Neal Cardwell, Yuchung Cheng, BBR: Congestion-Based Congestion Control, acmqueue, 2016
  5. QUIC: a multiplexed stream transport over UDP, https://www.chromium.org/quic
  6. HTTP/3: draft-ietf-quic-http-latest, https://quicwg.org/base-drafts/draft-ietf-quic-http.html

 问题答疑:

1. tap 虚拟网卡么?

虚拟网卡有很多种,比如loopback的lo,docker容器的veth,tap也是其中一种。

2. https 也能检测到数据包吗?

https因为有加密所以一般不能检测数据包,强行检测需要使用中间人攻击伪造证书,会被客户端发现。

3. 老师想问下,跨网通讯,目的 mac 地址只填网关 mac 地址就可以了么,然后让网关自己去跳?

发往同网段的话通过 arp 或路由表填充目的 mac 地址,那么发送跨网段数据包-目的 mac 地址不需要填直接发给网关么,让网关来跳

本机通过路由,把跨网段的数据包在二层发给网关,所以目的MAC地址是网关的MAC地址,网关收到这个数据包后进入自己的协议栈的第三层,查找路由转发给下一跳的节点。

4. mac 地址不是随着数据包换的吗?

MAC地址是二层网络使用的地址,二层网络属于一个邻居系统,只支持邻居之间的通信,所以MAC地址在二层网络中转发时不变,跨越二层经过三层设备的时候就会改变。

5. 网关与网桥感觉很像?

网关工作于三层,网桥工作于二层,网关是内网和外网之间的三层路由节点,网桥将两个二层网络连接为一个更大的二层网络。

6. 我觉得 VPN 和电路层代理很像,大佬可以讲讲?

VPN工作于三层或以上,电路层代理是什么概念?是想问socket代理吗?四层的SSL VPN跟socket代理从概念到使用的技术都非常类似。

7. 请问一个问题,最近发现集群的网卡 drop 包很多,我们监控了一下平均每分钟都有几个,会有哪些问题导致的呢?驱动会不会影响这个参数?

drop的原因很多,流量太大,负载过高,网卡的buffer满了,就可能会drop,可以通过降低流量来观察drop会不会减少并消失。

8. 混杂模式下抓也会漏包

一般不会漏,不过上层的交换机如果只把属于抓包的这台机器的数据包转发过来,不属于你的数据你就抓不到了。如果想抓整个局域网的数据包,要使用ARP欺骗技术,把自己伪装成局域网的网关,实现中间人攻击。

  1. 看一下上层是不是收不过来了
  2. mtu?

有mtu问题的可能性,不过也不是太大。

9. 软中断就是 汇编中的 int 吧

中断下半部
Int 就是一个中断指令吧

软中断这个概念是用来处理中断任务的下半部(bottom half),简化硬件中断程序的处理逻辑,让硬中断程序只处理简单的IO操作,之后复杂的逻辑留给软中断程序来处理,减少硬中断占用CPU的时间,提高CPU对其他中断的处理实时性,简单的说就是一个任务分成两部分,上半部分是紧急处理阶段,下半部分是非紧急处理阶段,下半部分在具体实现上可以使用软中断的模式,软中断可以用int指令来主动触发,从而让CPU来处理下半部的逻辑。

10. I/O 的 select 还是 poll 模式,是在哪个环节有区别呢?

select和poll用来操作socket,是协议栈传输层以上的处理逻辑,用于轮询socket,检查轮询的一批socket的发送和接受缓冲区是否可读可写。

11. 老师对 dpdk 了解吗 一直不知道处于哪个步骤

dpdk技术在网卡驱动程序中就已经介入,网卡收发数据包直接使用dpdk设定好的内存区域,这个内存区域再映射到应用层,实现应用层直接与网卡驱动的数据交换,绕过操作系统协议栈,实现高性能网络数据处理

cpu 绑定?
硬直通 ovs evs 都可以绑定 cpu

可以通过二进制掩码的形式,实现IRQ Affinity,指定中断由哪些CPU来处理,也叫中断的CPU绑定

12. local_in 就是 iptables 的 input 链吧

是的

13. iptables 可以用来做限速吗?比如模拟丢包,弱网

tc

tc命令用于在二层构建数据发送队列,支持队列的各种调度,比如增加延时,设定丢包的概率模型,可以模拟常见的网络场景,实际上很多广域网模拟器的硬件,就是通过linux + tc在一个嵌入式的小盒子里实现的。

14. mangle 表一般可以做一些什么事情

用于对数据包进行修改,比如修改IP包头的TTL字段

15. 劫持是用 mangle吗?

mangle通常只对单个包做简单的修改,复杂的劫持逻辑不方便在内核中实现,一般会在nat中做一个dnat,将需要劫持的流量的目的IP定向到本机,然后在本机监听对应的端口,实现中间人或代理劫持。

16. 那个经典了计算机网络的绿皮书 讲 tcp 很不错

17.

https://www.7down.com/soft/179692.html

18. bbr 一般用于 1080 优化?

bbr可以抗丢包,在有丢包的情况下依然能保持大带宽,所以对于1080p或更高清的视频传输,也是有很好的效果的。

19. 我在公司让 sa 帮忙把一台机器设置了 BBR,升级了内核,但是用 iperf 测试效果不是很好,一直没算弄清楚原因

sysctl -w net.ipv4.tcp_congestion_control=bbr

先要检查看你内核使用的是不是BBR算法,另外BBR只对发送端有效果,如果你开启BBR的是接收端,发送端没有开启BBR,是没有意义的。BBR最大的优势在于抗丢包,如果网络中没有随机丢包(非拥塞导致的丢包),BBR相对传统TCP算法并没有明显优势。

20. 有比 BBR 更优秀的?

拥塞控制算法有自己的适用场景,另外是否优秀也有很多评价标准,有人认为BBR还不够激进,需要提高侵略性,也有人认为BBR抢占其他算法的带宽不公平。

21. 插个问题,我们用 1.1,但是也用了 WSS,这个时候 WSS 不知道是握手还是连接超时,到了六秒中,这个时候同一个页面其他的请求都没有收到,这个应该是 1.1 中阻塞了吧

我们用 1.1,但是也用了 WSS,这个时候 WSS 不知道是握手还是连接超时,到了六秒中,这个时候同一个页面其他的请求都没有收到,这个应该是 1.1 中阻塞了吧?建立连接的时候 WS 还是 HTTP 协议,只不过走 upgrade 升级,服务端收到 upgrade 后切换协议,大概这样的,WS 刚刚通过 HTTP 传的时候会不会新建 TCP?

不一定 ws会和页面其他请求用不同的 tcp 连接

websocket会一直使用同一条TCP连接,你说的超时是晚到还是一直没有到?如果是一直不到,可能中间的链路对websocket有干扰,比如企业网出口的http代理,有可能把websocket当做普通http请求来处理,不支持websocket的upgrade操作,建议排查客户端的网络环境,比如让客户端通过手机开热点上网,对照测试,用排除法排查。

基于 quic 的 http3.0
我 F12 看了一下,WSS 那个响应出来以后,其他请求就都出来了

问题的描述有些混乱。

向前纠错
好像也不对,建立连接的时候 WS 还是 HTTP 协议,只不过走 upgrade 升级,服务端收到 upgrade 后切换协议,大概这样的
纠察码的感觉?

FEC也是一种纠错算法

那 fec 包也丢了咋办?

FEC不是正常的业务包,丢了不影响业务的传输,没有关系。加入多少比例的FEC要看实际丢包率,FEC要有足够的比例来填丢包的坑。

 

 

你可能感兴趣的:(go)