网络传输Q&A | 豆包MarsCode AI刷题

117 阅读5分钟

1、往同网段如何发包/交互?

改目标ip的mac,改成目标ip查到的mac。

2、路由一定是对称的吗?

路由

路由不一定原路返回,可以绕路回去。

3、路由是工作在哪一层的协议?

路由协议简单理解工作在ip层,但其实不是,本身不是工作在IP层。

BGP动态路由协议,是属于传输层的协议,基于TCP/UDP制作的。

4、路由是改IP地址吗?

不是。路由是改mac地址,找到发包口。

改IP收不到包。路由是找中间的路,如果知道下一跳,可以做ARP请求,再把目标mac改成下一跳的mac,可以是别称同个网段,就可以传输。

路由mac

5、发包为什么需要指定网卡?

需要指定网卡的port。发包的时候以网卡为单位。

6、怎么找到下一跳的Mac?

通过ARP协议去找。逻辑同网段才能发送ARP,跨网段不可以,因为路由不是改IP。ARP是一级一级找下一跳,即中间节点,最终找到目标地址mac,然后疯狂迭代,手机端通过运营商网络接入运营商抖音服务器,最终再接到抖音机房。除非是同网段,不然一定要下一跳查找。

7、ARP

ARP本质上是查找下一跳的MAC,不是请求目标地址。

ARP请求广播广播,ARP应答单播。

免费ARP,不用请求,就告诉你ARP地址。比如局域网里面加机器,IP新加了,本身的mac地址,局域网的其他设备,之前没有查询过ARP,也就是没有缓存的,其他机器往新机器发包,效率会比较慢。这种场景下会发一个免费ARP,源地址和目标mac和ARP有区别。刷新一下mac就可以知道新增机器了。可以防止ip冲突。

ARP正向代理,发送ARP中间设备给你抢先应答。比如经过交换机被劫持,误导你ARP请求到其他目标响应,可以来做STN。

8、Mac地址不能代替IP地址吗?

Mac协议是一个二层协议,除了以太网协议,还有其他协议。需要有一个向下兼容的功能。

IP协议把不同网络统一,再网上封装一次,把不同的二层网络做了一个统一用一个IP地址表示。

9、IPv4不够用怎么解决?设备不支持IPv6怎么办?

除了IPv6,还有NAT。

10、家里的路由是怎么上网的?

家里路由器本质上就是一个NAT。

网络

NAT原理:内部用户通过NAT设备,改源地址,很多公司局域网都用192,里面可以重复用IP地址,但是要连到互联网地址的外部的设备,全局唯一外网地址,就是在NAT服务器上面,这样就可以把不同地址映射到同一个地址去做联网,这样就节约了IPv4的地址。

11、多个内网客户端访问同一个目标地址+端口,源端口恰好一样,冲突了。

NAT其实是IP+端口一起改变的,多个内网客户端访问同一个目标地址+端口,如果也修改源端口,防止冲突,在NAT设备上维护一张表,每次有现在正在存在的连接的时候,把它端口选另外一个,就可以解决。

12、如果用UDP传输视频流,需要考虑什么?为什么?

考虑的问题:UDP发包每次发多少?怎么避免分片?怎么知道没丢包?怎么权衡传输效率和质量?

(1)因为MTU传输有限制,所以要分片。为什么避免分片,因为他会重组,分片+重组的过程中是消耗你的CPU资源,所以要避免。

(2)UDP不是可靠的协议,发丢了你也不知道。

(3)在UDP没有做流控的工作,很难处理,相当于重新弄一个TCP协议。

总结:用UDP做传输的话,就是怎么保证协议可靠,就行了。

13、什么是TCP协议?

大型旗下协议基本以TCP为主,因为UDP不可靠。

TCP是一个虚拟的概念,他就是一个状态,保持了一个TCP连接状态。

拔了网线,连接会断吗?

拔了网线——与TCP没有什么强耦合关系——因为TCP是状态——TCP有探活(定期探测对方在连接状态)——TCP保活决定连接是否会断开

14、三次握手学习(mss)

Tcpdump+Wireshark 抓包+包分析

三次握手做了什么事情:

三次握手做了什么

15、TCP为什么总问Timewait?

Timewait是一个协议里面规定,但是又会影响你效率的地方,如果你的客户端/服务器有太多timewiat,很显然会占用端口。

Timewait recycle、Timewait reuse。有风险,万一冲突,可能会导致连接异常。

16、TCP丢包怎么办?

利用ACK的机制。

17、滑动窗口、流量控制/拥塞控制结合基础概念理解。

自学

18、为什么不直接用TCP通信呢?(主流HTTP1.1)

HTTP1.1让你关注你的业务本身,代码逻辑本身,而不是协议的实现。

其实TTP只是加多一层规矩。HTTP依然是TCP,只是这个规矩让用户更清晰。

HTTP1.1有哪些优化——长连接、部分传输、HOST、缓存等

19、传输中被插入网站怎么办?——HTTPS

HTTPS解密出来依然是HTTP。

20、HTTPS加密本质——SSL/TLS握手

SSL_TLS