前言
本篇文章为本人面试以及空闲时间整理的计网面试常见问题。供本人复习之用。分享给大家。大家可以评论补充哦!
因为面试常见问题一般都是网络层,传输层以及应用层。所以我就按自上而下的顺序,来分享
最后一次更新时间:2021.12.30
一、应用层常见问题
1.DNS如何得到ip地址
假定域名为 m.xyz.com 的主机想知道另一台主机( 域名为 y.abc.com )的 IP 地址。例如,主机 m.xyz.com 打算发送邮件给主机 y.abc.com。这时候就必须知道主机 y.abc.com 的 IP 地址。查询步骤:
① 主机 m.xyz.com 先向其本地域名服务器 dns.xyz.com 进行递归查询。
② 本地域名服务器采用迭代查询。它先向一个根域名服务器查询。
③ 根域名服务器告诉本地域名服务器,下一次应查询的顶级域名服务器 dns.com 的 IP 地址。
④ 本地域名服务器向顶级域名服务器 dns.com 进行查询。
⑤ 顶级域名服务器 dns.com 告诉本地域名服务器,下一次应查询的权限域名服务器 dns.abc.com 的 IP 地址。
⑥ 本地域名服务器向权限域名服务器 dns.abc.com 进行查询。
⑦ 权限域名服务器 dns.abc.com 告诉本地域名服务器,所查询的主机的 IP 地址。
⑧ 本地域名服务器最后把查询结果告诉主机 m.xyz.com 注:
①使用了 8 个 UDP 报文。
②m.xyz.com的主机名是m。顶级域名是com
③用迭代查询好处:可大大减轻根域名服务器的负荷,使互联网上的 DNS 查询请求和回答报文的数量大为减少。
上图
2.http和https的区别
①最大的区别就是https建立在ssl之上,对传输的数据进行了加密(对称加密和非对称加密结合)。而http没有
②https需要申请证书,一般免费证书较少,所以会产生一定费用
③https和http的端口分别是443和80
④一般来说http页面响应速度比https快。因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
3.http1.0、http1.1、http2.0的区别
(1)
HTTP 1.0 浏览器与服务器只保持短暂的连接,每次请求都需要与服务器建立一个TCP连接。如果需要建立长连接,需要设置一个非标准的字段,keep-alive (2)
①HTTP1.1中,默认支持长连接(Connection: keep-alive)
②HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求。但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容
③HTTP1.1增加了更多的请求头和响应头。以及新的请求方法,如put。
(3)
①HTTP/2.0支持多路复用。复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应,这样就避免了”队头堵塞”
(http1.1虽然允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信是按次序进行的,服务器只有处理完一个请求,才会接着处理下一个请求。如果前面的处理特别慢,后面就会有许多请求排队等着。HTTP2.0是完全多路复用,而非有序并阻塞的。)
②HTTP2.0支持首部压缩。即利用首部表。存储之前发送的键值对,对于相同的数据,不再通过每次请求和响应发送。
③HTTP2.0支持服务器推送。
4.在浏览器中输入www.baidu.com后执行的全部过程
①浏览器向DNS服务器发出解析域名的请求;(ip协议、UDP协议,ARP协议,OSPF协议)
②DNS服务器将域名解析为对应的IP地址,并返回给客户端;
③浏览器与服务器建立TCP连接(默认端口为80,https为443);
④浏览器发出HTTP请求报文;
⑤服务器回复HTTP响应报文;
⑥浏览器解析响应报文,并显示在Web网页上;
⑦收发报文结束, 释放TCP连接。
二、运输层常见问题
1.TCP是如何实现可靠传输的
①建立连接:三次握手
②发送数据:
采用窗口去发送和接收数据(数据有序号),有确认机制,超时重传机制。除此之外,还有流量控制和拥塞控制。
③连接释放:四次握手
2.TCP三次握手过程
看图就明白
为什么采用3次握手,而不是2次呢?
采用三次握手是为了防止失效的连接请求报文段突然又传送到主机B,因而产生错误。失效的连接请求报文段是指:主机A发出的连接请求没有收到主机B的确认,于是经过一段时间后,主机A又重新向主机B发送连接请求,且建立成功,顺序完成数据传输。考虑这样一种特殊情况,主机A第一次发送的连接请求并没有丢失,而是因为网络节点导致延迟达到主机B,主机B以为是主机A又发起的新连接,于是主机B同意连接,并向主机A发回确认,但是此时主机A根本不会理会,主机B就一直在等待主机A发送数据,导致主机B的资源浪费。
3.TCP四次挥手全过程
看图就明白
注意:
(1)为什么需要四次挥手?因为TCP是全双工的,客户端发送给服务端FIN的时候,说明客户端不往服务端发数据了,但是服务端可以往客户端发数据,客户端还可以接收数据。
(2)四次挥手,不一定非得是四次,中间两步,有可能合并
(3)为什么需要TIME_WAINTING状态?
①处于TIME_WAINTING状态时,不允许应用释放端口,等TIME_WAINTING的时间,服务器会把数据全部传完,此时再释放
②如果客户端发送的分手确认信号,即第四次挥手,丢失了,那么服务端会再次发送,如果不等TIME_WAINTING的时间,那么服务端发送的第三次挥手,客户端就接受不到了
4.TCP拥塞控制
(1)如何判断拥塞?换句话说,什么情况会让拥塞窗口减少?
①重传定时器超时(说明已经拥塞了)
②收到三个相同的ACK(说明可能要出现拥塞了)
(2)当拥塞出现的时候,如何进行控制,或者说如何预防拥塞?
方式:慢开始, 拥塞避免,快重传,快恢复
5.TCP的流量控制和拥塞控制区别
流量控制通过接收窗口实现,一般是考虑接收方,接收方通过发送确认报文,去调控发送方的发送窗口。并不是一个全局的。
拥塞控制通过拥塞窗口来实现,一般是考虑线路。去控制全局的,既考虑接收方,也考虑发送方,也考虑接收方和发送方中间的线路。线路拥塞的时候,线路就会调控拥塞窗口。
所以最终的发送窗口由 接收方的接收窗口和线路的拥塞窗口的 最小值 决定
6.TCP拆包/粘包是什么
拆包,就是一分多,粘包,就是多合一。也就是TCP复用和分用
如何解决TCP的粘包拆包特性?
①消息弄成定长的
②或者消息头包括消息的长度
③使用特殊的分隔符(比如ftp协议,对不用消息,使用回车换行符,来区分不同的消息)
7.UDP用在哪
①需要多播的,TCP只能单播
②丢包不影响正常使用的软件
③对实时性要求较高的软件
UDP实现的软件,不想让他丢包,怎么办?
上层应用自己来实现可靠性传输。如UDT。据说HTTP3会用UDT来实现
8.TCP和UDP的区别是什么
TCP面向连接,有三次握手和四次挥手,UDP没有连接,所以也可用于广播
TCP有可靠性,具体为超时重传(根据往返时延来计算等多久需要重传)和应答确认
TCP有数据排序,即在对端,各个组结合的时候,如何根据编号排序
TCP有流量控制(滑动窗口)和拥塞控制
一般来说,UDP发送数据较快,实时性比TCP要强
9.socket是啥
操作系统把底层的所有与网络通信相关的细节都隐藏起来了,用socket来进行操作,它是一个门面模式,调用connect方法就连接了。TCP用主机的IP地址加上主机上的端口号作为TCP连接的端点,这种端点就叫做套接字。
可以理解为它把传输层,及以下的协议,全都封装起来了。从应用层视角往下层看,就是socket
三、网络层常见问题
1.IP地址的分类
A类地址:以0开头, 第一个字节范围:1~126(1.0.0.0 - 126.255.255.255);
B类地址:以10开头, 第一个字节范围:128~191(128.0.0.0 - 191.255.255.255);
C类地址:以110开头, 第一个字节范围:192~223(192.0.0.0 - 223.255.255.255);
D类地址:以1110开头,第一个字节范围:224~239(224.0.0.0 - 239.255.255.255);(作为多播使用)
主机号全为1的为广播地址
ip地址和子网掩码按位与,得到网络号
2.ARP协议工作原理
①首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。
②当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机 IP地址,源主机MAC地址,目的主机的IP 地址。
③当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。
④源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
广播发送ARP请求,单播发送ARP响应。
3.路由选择协议相关问题
RIP,OSPF,BGP分别属于哪一层,其实还是有争议。我认为RIP,BGP应该在应用层,OSPF在传输层比较好。因为RIP用UDP,BGP用TCP,OSPF用IP。所以这样划分
(1)内部网关协议
①RIP是内部网关协议。它认为一个好的路由就是它通过的路由器的数目少,即距离短。最多不超过15跳。
三个特点
定期只和相邻路由器交换彼此的全部信息
更新算法:画图解释
②OSPF是为客服RIP缺点研发的。即“最短路径优先”,利用了迪杰斯特拉算法
RIP只能适用于规模很小的网络,OSPF能适用于规模很大的网络。它将一个自治系统分为若干个更小的范围。
(2)外部网关协议
BGP是不同自治系统之间的路由选择协议,会选出类似于一个“发言人”的角色去交换路由信息。
四、通用的问题
1.每一层的设备
物理层:中继器,集线器
数据链路层:网桥,交换机
网络层:路由器
传输层:网关
2.协议
OSI分层 (7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
TCP/IP分层(4层):网络接口层、 网际层、运输层、 应用层。
五层协议 (5层):物理层、数据链路层、网络层、运输层、 应用层。
网络安全相关问题
1.各种劫持
DNS劫持,意思就是把DNS解析来的ip地址,换成一个错误的ip地址,有可能是钓鱼网站
HTTP劫持,意思就是劫持http请求报文或者响应报文。解决办法:用https
2.洪泛攻击
洪泛攻击就是客户端第一次发送的报文,源ip地址是假的,所以服务器发送了确认报文之后,就一直得不到回应,就一直等待,浪费着资源