“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 3 天,点击查看活动详情”
本文记录了自己在计算机网络学习过程中遇到的一些经典问题,同时也是面试常考点。
1. 四次挥手可以改成三次挥手吗 ?
可以,使用延迟ack。
2. Telnet是什么 ?
Telnet是进行远程登录的标准协议,它是当今Internet上应用最广泛的协议之一。 它把用户正在使用的终端或计算机变成网络某一远程主机的仿真终端,使得用户可以方便地使用远程主机上的软、硬件资源。 使用Telnet协议进行远程登录时需要满足以下条件:在本地计算机上必须装有包含Telnet协议的客户程序;必须知道远程主机的IP地址或域名;必须知道登录标识与口令。
我们注意到许多用户现在更愿意采用SSH协议而不是Telnet,因为在Telnet连接中发送的数据包括口令是没有加密的,使得Telnet易于受到窃听攻击。
3. 路由是工作在哪一层协议 ?
课本上写的是网络层,这也没啥问题。但这个问题不能简单去理解,动态路由协议(如BGP,OSPF)不简单是一个IP层的协议,它是一个应用层/传输层的协议。可能你用了一个路由,会去做四层的交互。
4. 路由是改IP地址吗 ?
不是,路由改的是MAC地址,找到发包口。源IP地址和⽬标IP地址在传输过程中是不会变化的,只有源 MAC 地址和⽬标 MAC ⼀直在变化。
5. 怎么去找下一跳的MAC ?
通过ARP协议去找的。
注意:逻辑同网段才能发送ARP。ARP请求广播,ARP应答单播。广播不能跨网段。ARP本质是查找下一跳的MAC,不是请求目标地址。
6. 免费ARP ?
不用请求我,我就告诉你ARP地址了。IPv6里面叫GARP。可以提前发现IP冲突。 该类型报文起到一个宣告作用,它以广播的形式将数据包发送出去,不需要得到回应,只为了告诉其他计算机自己的 IP 地址和 MAC 地址。
7. ARP代理 ?
劫持一个ARP请求,发往另一个地方,伪造一层东西。很多虚拟网络都是用的ARP代理。
8. Mac地址为什么不能代替IP地址 ?
Mac是一个二层的协议(以太网),但二层不止Mac一个协议,(比如电话拨号设备,我不支持Mac,互联网就要把我废弃吗?)所以再往上封装一层,用IP协议把不同的二层的网络做了一个统一,统一用IP地址去标识。
(IP也不能代替MAC:首先,局域网是为任意网络层协议而设计的,而不只是用于IP和因特网。其次,如果适配器使用网络层地址而不是MAC地址的话,网络层地址必须存储在适配器的RAM中,并且在每次适配器移动时要重新配置。总之,为了使网络体系结构中各层次成为极为独立的构建模块,不同层次需要有它们自己的寻址方案。(主机名、IP、MAC) —— 《计算机网络自顶向下方法》)
PS:网上搜到的:
- 为什么有了IP地址,我们还要获取MAC地址?
- 为什么我们初始不直接使用MAC地址作为终点地址?还要那么复杂的先引入IP,再通过ARP获取MAC地址... ...
然后我们就发现这个问题变得简单了:当年设计 IP 地址的目的是什么呢?当年设计出 IP 地址这个东西,就是因为随着网络中的设备逐渐增多,人们发现路由(也就是寻找数据包从发送方到接收方的路径)变得越来越困难了。于是人们想了一个办法,就是把网络划分成很多个子网。这样,在路由的时候,路由器可以把其他子网看成一个整体来进行计算。对于目的地在其他子网的数据包,路由器只需要让数据包到达那个子网即可,而剩下的工作就由子网内部解决了。虽然这种方法只能让寻找到的路径接近最优而不保证最优,不过它大大减少了路由器的计算量,利大于弊,所以被采用了。
那么为什么我们需要 IP 地址呢?因为如果我们只用 MAC 地址的话,我们会发现路由器需要记住每个 MAC 地址所在的子网是哪一个(不然每一次收到数据包的时候路由器都要重新满世界地去找这个 MAC 地址的位置)。而世界上有 2的48次方个 MAC 地址,这就意味着即使我们给每个 MAC 地址只留 1 字节的储存空间,每个路由器也需要 256 TB 的内存!这显然是不可能实现的。
这就是我们需要 IP 地址的原因了。和 MAC 不同的是,IP 地址是和地域相关的。对于位于同一个子网上的设备,我们给他们分配的 IP 地址前缀都是一样的。这个前缀就像邮政编码一样。这样,路由器过 IP 地址的前缀就能知道这个设备在哪个子网上了。现在,路由器只需要记住每个子网的位置即可,大大减少了路由器所需要的内存。
既然 IP 地址不能去掉,那么能不能去掉 MAC 地址呢?也不能。因为 IP 地址是要设备上线以后,才能根据他进入了哪个子网来分配的,在设备还没有 IP 地址的时候(或者分配 IP 地址的过程中),我们还需要用 MAC 地址来区分不同的设备。
总之,MAC 地址就像自己的 ID 号,而 IP 地址就像带着邮政编码的住址,各有各的用途。所以我们需要两个地址,缺一不可。
9. IPv4不够用怎么办 ?
IPv6 和 NAT。
10. 拔了网线,TCP连接会断吗 ?
TCP连接是一种状态,拔网线不影响结构体状态。断不断看有没有TCP保活(keep alive),等保活定时器过期才会断开。
11. TCP keep alive 机制具体是怎么样的 ?
定义一个时间段,在这个时间段内,如果没有任何连接相关的活动,TCP 保活机制会开始作用,每隔一个时间间隔,发送一个探测报文(心跳包),该探测报文包含的数据非常少,如果连续几个探测报文都没有得到响应,则认为当前的 TCP 连接已经死亡,系统内核将错误信息通知给上层应用程序。
12. (TCP)为什么老问你Timewait ?
Timewait作用:确保连接正常关闭。防止前一次ack丢失。确保资源在网络中完全传输到另一端。
但Timewait的存在经常会影响效率,占用端口,取巧的办法:以Linux为例,timewait_recycle和timewait_reuse
timewait_recycle:不等timewait字段,直接重复再利用 —— 有一定风险
timewait_reuse:类似timewait_recycle
13. 为什么不用TCP去通信呢 ?而去用HTTP ?
因为TCP负责的内容本身就够多了。HTTP让我们去关注业务本身,去关注代码逻辑本身,而不用去关注协议具体的实现。
HTTP只是多加了一层规矩,HTTP依然是TCP,只是这个规矩让用户更清晰 / 更简洁。
14. QUIC ?
UDP。Userspace。0 RTT。弱网优势。
那 QUIC 多路复用为什么能避免TCP和TLS队头阻塞问题呢?
- QUIC 最基本的传输单元是 Packet,不会超过 MTU 的大小,整个加密和认证过程都是基于 Packet 的,不会跨越多个 Packet。这样就能避免 TLS 协议存在的队头阻塞。
- Stream 之间相互独立,比如 Stream2 丢了一个 Pakcet,不会影响 Stream3 和 Stream4。不存在 TCP 队头阻塞。
15. 除了协议优化,网络路径能不能优化?
CDN,P2P,DSA,动态API,遗传,蚁群等。
16. HTTPS ?
Https协议是由 HTTP 加上 TLS /SSL 协议构建的可进行加密传输、身份认证的网络协议
17. ARP 协议在 TCP/IP 模型中属于 IP 层(网络层),在 OSI 模型中属于链路层。
18. 面向连接,有连接,无连接
- tcp是面向连接,udp是无连接
- 面向连接 != 有连接:
面向连接:端系统知道,它底下的协议栈tcp也知道,网络不知道,通信的状态只是在端系统中维护
有连接:端系统和中间所有路径上的节点都知道,都要维护它们的通信状态
19. SDN是什么?
SDN (Software Defined Network )即软件定义网络,是一种网络设计理念,或者一种推倒重来的设计思想。只要网络硬件可以集中式软件管理,可编程化,控制转发层面分开,则可以认为这个网络是一个SDN网络。所以说,SDN并不是一个具体的技术,不是一个具体的协议,**而是一个思想、一个框架 **。
20. 概念区分:ISP AS 广域网 局域网 子网 以太网
局域网(英语:Local Area Network,简称LAN)是连接住宅、学校、实验室、大学校园或办公大楼等有限区域内计算机的计算机网络。相比之下,广域网(英语:Wide Area Network,简称WAN)不仅覆盖较大的地理距离,而且还通常涉及固接专线和对于互联网的链接。 相比来说互联网则更为广阔,是连接全球商业和个人电脑的系统。
以太网和Wi-Fi(无线网络连接)是现今局域网最常用的两项技术:
以太网(英语:Ethernet)是一种计算机局域网技术。
Wi-Fi,又称“无线热点”或“无线网络”,是Wi-Fi联盟的商标,一个基于IEEE 802.11标准的无线局域网技术。
子网(英语:Subnetwork)在 (因特网协议Internet Protocol,IP) 中,子网指的是从分类网络中划分出来的一部分。具有相同的前半部分地址的一组IP地址,可以利用地址的前半部分划分组。在一个IP网络中划分子网使我们能将一个单一的大型网络——至少(逻辑上)看上去如此——分成若干个较小的网络。
局域网和子网与路由器都没有直接关系。局域网和地区有直接关系。子网和IP地址范围有直接关系。
自治系统或自治域(英文:Autonomous system, AS)是指在互联网中,一个或多个实体管辖下的所有IP网络和路由器的组合,它们对互联网执行共同的路由策略。
用于BGP路由中的每个自治系统都被分配一个唯一的自治系统编号(ASN) 。对BGP来说,因为ASN是区别整个相互连接的网络中的各个网络的唯一标识,所以这个自治系统编号非常重要。互联网地址分派机构将64512到65535的ASN编号保留给(私有)专用网络使用。
互联网服务供应商(英语:Internet Service Provider,简称ISP),又称因特网服务提供者、互联网服务提供商、网络服务供应商,即指提供互联网访问服务的公司。通常大型的电信公司都会兼任互联网服务供应商,一些ISP则独立于电信公司之外。
21. 访问baidu,会用到计算机网络哪一层 ?
浏览器中输入URL
浏览器要将URL解析为IP地址,解析域名就要用到DNS协议,首先主机会查询DNS的缓存,如果没有就给本地DNS发送查询请求。DNS查询分为两种方式,一种是递归查询,一种是迭代查询。如果是迭代查询,本地的DNS服务器,向根域名服务器发送查询请求,根域名服务器告知该域名的一级域名服务器,然后本地服务器给该一级域名服务器发送查询请求,然后依次类推直到查询到该域名的IP地址。DNS是基于UDP和TCP的,因此会用到UDP协议和TCP协议。
得到IP地址后,浏览器就要与服务器建立一个http连接。因此要用到http协议,http协议报文格式上面已经提到。http生成一个get请求报文,将该报文传给TCP层处理,所以会用到TCP协议。如果采用https还会使用https协议先对http数据进行加密。TCP层如果有需要先将HTTP数据包分片,分片依据路径MTU和MSS。TCP的数据包然后会发送给IP层,用到IP协议。IP层通过路由选路,一跳一跳发送到目的地址。当然在一个网段内的寻址是通过以太网协议实现(也可以是其他物理层协议,比如PPP,SLIP),以太网协议需要知道目的IP地址的物理地址,有需要ARP协议。
其中:
1、DNS协议,http协议,https协议属于应用层
应用层是体系结构中的最高层。应用层确定进程之间通信的性质以满足用户的需要。这里的进程就是指正在运行的程序。应用层不仅要提供应用进程所需要的信息交换和远地操作,而且还要作为互相作用的应用进程的用户代理,来完成一些为进行语义上有意义的信息交换所必须的功能。应用层直接为用户的应用进程提供服务。
2、TCP/UDP属于传输层
传输层的任务就是负责主机中两个进程之间的通信。因特网的传输层可使用两种不同协议:即面向连接的传输控制协议TCP,和无连接的用户数据报协议UDP。面向连接的服务能够提供可靠的交付,但无连接服务则不保证提供可靠的交付,它只是“尽最大努力交付”。这两种服务方式都很有用,备有其优缺点。在分组交换网内的各个交换结点机都没有传输层。
3、IP协议,ARP协议属于网络层
网络层负责为分组交换网上的不同主机提供通信。在发送数据时,网络层将运输层产生的报文段或用户数据报封装成分组或包进行传送。在TCP/IP体系中,分组也叫作IP数据报,或简称为数据报。网络层的另一个任务就是要选择合适的路由,使源主机运输层所传下来的分组能够交付到目的主机。
4、数据链路层
当发送数据时,数据链路层的任务是将在网络层交下来的IP数据报组装成帧,在两个相邻结点间的链路上传送以帧为单位的数据。每一帧包括数据和必要的控制信息(如同步信息、地址信息、差错控制、以及流量控制信息等)。控制信息使接收端能够知道—个帧从哪个比特开始和到哪个比特结束。控制信息还使接收端能够检测到所收到的帧中有无差错。
5、物理层
物理层的任务就是透明地传送比特流。在物理层上所传数据的单位是比特。传递信息所利用的一些物理媒体,如双绞线、同轴电缆、光缆等,并不在物理层之内而是在物理层的下面。因此也有人把物理媒体当做第0层。