计算机网络面试题(不定期更新)
经典面试题:从 URL 输入到页面展现到底发生什么之会话顺序?
域名解析,其实就是根据用户输入的网址去寻找它对应的IP地址,比如输入www.baidu.com的网址就会经历以下过程
- 先从浏览器缓存里找IP,因为浏览器会缓存DNS记录一段时间
- 如没找到,再从Hosts文件查找是否有该域名和对应IP
- 如没找到,再从路由器缓存找
- 如没好到,再从DNS缓存查找
- 如果都没找到,浏览器域名服务器向根域名服务器(baidu.com)查找域名对应IP,还没找到就把请求转发到下一级,直到找到IP
TCP三次握手,四次挥手,短连接time_wait问题(附有案例分析)
检验和
TCP检验和的计算与UDP一样,在计算时要加上12byte的伪首部,检验范围包括TCP首部及数据部分,但是UDP的检验和字段为可选的,而TCP中是必须有的。计算方法为:在发送方将整个报文段分为多个16位的段,然后将所有段进行反码相加,将结果存放在检验和字段中,接收方用相同的方法进行计算,如最终结果为检验字段所有位是全1则正确(UDP中为0是正确),否则存在错误。
涉及到的协议
(1) 应用层:HTTP(WWW访问协议),DNS(域名解析服务)
(2) 传输层:TCP(为HTTP提供可靠的数据传输),UDP(DNS使用UDP传输)
(3) 网络层:IP(IP数据数据包传输和路由选择),ICMP(提供网络传输过程中的差错检测),ARP(将本机的默认网关IP地址映射成物理MAC地址)
从 URL 输入到页面展现到底发生什么之分布式DNS原理及解析顺序,浏览器如何通过域名去查询 URL 对应的 IP
路由器是一种三层设备,主要使用ip地址进行网间路由查询与ip包的转发。而交换机是一种二层设备,使用MAC地址进行寻址,实现一个网络内的数据帧的转发。
A类网络为1到126
B类网络为129到191
C类网络为192到223
IPV4是一个32位的地址,用4个十进制数字表示。以C类地址192.168.24.1为例,其中前24位是网络地址,后8位是主机地址。如果两个IP地址在同一个子网内,则网络地址一定相同。
机器A的ip地址为 202.96.128.130,子网掩码为255.255.255.128,则IP地址的网络号为202.96.128,主机号为130
二层交换机工作于OSI模型的第二层数据链路层(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层),它可以识别数据包中的MAC地址信息,根据MAC地址
进行转发,并将这写地址与对应的连接端口记录在自己内部的一个地址表中。
三层交换机(路由器)
三层交换机工作于OSI模型中的第三层网络层,主要目的是加快大型局域网内部的数据交换。二层交换机是根据MAC地址进行处理数据, 三层交换机是根据IP地址
进行处理数据
子网掩码:子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分.通过AND按位与运算即可确定。
DNS是应用层协议
网关是从一个网络到另一个网络的关口,或者说是从一个网络通向其他网络的IP地址。比如有网络A和网络B,A的IP范围192.168.1.1
~ 192.168.1.254
,子网掩码255.255.255.0
,B的IP范围是192.168.2.1
~ 192.168.2.254
,子网掩码为255.255.255.0
.在没有路由器的情况下,A网络和B网络是不能进行TCP?IP通信的。TCP/IP协议会判定两个网络中的主机属于不同的网络。如果网络A中的主机发现数据包的目的主机不在自己所属的网络中,它就会把数据包发送给自己的网关,再由网关转发给网络B的网关,最终网络B的网关再转发个网络B中的某个主机。
- 只要知道了目标地址的IP,就可以想这个目标IP发送数据包,但是,在网络层以下的链路层,实际进行通信的还是MAC,实际上也就是两个网卡之间的通信。ARP地址解析协议以IP地址为线索,用来定位下一个应该接收数据包的主机的MAC地址。ARP是根据IP地址获取MAC地址的一个网络层协议。
A类地址:第1到8位是网络地址,首位以二进制0开头,后24位二进制是主机地址。
B类地址:第1到16位是网络地址,前两位是二进制10,后16位二进制是主机地址。
C类地址:第1到24位是网络地址,前三位是二进制110,后8位二进制是主机地址。
D类地址:第1到32位是网络地址,前四位是二进制1110,没有主机地址。
所以只有设置好网关的IP,TCP/IP协议才能实现不同网络之间的通信。网关的IP地址是具有路由功能的设备的IP地址,也就是路由器。
Socket连接过程
服务端:
- 创建socket,绑定端口
- 开始监听(listen)
- 等待并接受客户端连接请求,返回新的socket(accept)
- 由新socket与客户端进行io交互。
- 关闭连接(可能主动,也可能被动)
客户端:
- 1.创建socket(绑定本机随机端口,这个系统自行完成)
- 2.连接服务器(connect) 与服务器进行io交互
- 3.关闭连接(可能主动,也可能被动)
为什么连接的时候是三次握手,关闭的时候却是四次握手?
因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同 步的。但是关闭连接时,当Server端
收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你 发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我
才能发送FIN报文,因此不能一起发送。故需要四步握手。
DNS的原理
HTTP报文格式、头部字段等
- 请求方法“方法URL议/版本”:
GET/sample.jsp HTTP/1.1
- 请求头(Request Header)
请求头包含许多有关的客户端环境和请求正文的有用信息。请求头可以声明浏览器所用的语言,请求正文的长度等。
Accept:image/gif.image/jpeg.*/*
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)
Accept-Encoding:gzip,deflate.
- 请求正文
请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。请求正文中可以包含客户提交的查询字符串信息:username=jinqiao&password=1234
session和cookie
cookie是Web服务器发送给浏览器的一块信息。浏览器会在本地文件中给每一个Web服务器存储cookie。以后浏览器在给特定的Web服务器发请求的时候,同时会发送所有为该服务器存储的cookie。下面列出了session和cookie的区别:
- 无论客户端浏览器做怎么样的设置,session都应该能正常工作。客户端可以选择禁用cookie,但是,session仍然是能够工作的,因为客户端无法禁用服务端的session。
- 在存储的数据量方面session和cookies也是不一样的。session能够存储任意的Java对象,cookie只能存储String类型的对象。
IPv4和IPv6
- 地址空间不同,IPv4中规定IP地址长度为32,而IPv6中IP地址的长度为128。
- 路由表大小不同,IPv6的路由表相比IPv4的更小。
- 安全性不同,IPv6的安全性更高,在使用IPv6的网络时,用户可对网络层的数据进行加密。
数字证书如何生成
DHCP动态主机配置协议,是一种让系统得以连接到网络上,并获取所需的配置参数的手段
- ICMP ping检测网络通信故障和实现链路追踪
- ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。
从网络加载一个10M的图片,说**意事项
我们首先获得目标View所需的大小,然后获得图片的大小,最后通过计算屏幕与图片的缩放比,按照缩放比来解析位图。
图解TCP的3次握手和四次挥手
为什么需要***
在tcp通信中,发送方发送任何消息,都必须带上***,同时,接收方必须返回确认号,确认号是***+1(除了建立链接第一次握手的时候),这样,双方就能保证数据不丢失。
TCP协议如何来保证传输的可靠性
如何验证证书的合法性
Get与POST的区别
- get请求参数在url地址上,直接暴露,post请求的参数放body部分,按F12也直接暴露了
- GET产生一个TCP数据包;POST产生两个TCP数据包。长的说:对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200ok(返回数据)。
- get传输量小,因为受URL长度限制,但效率较低。post可以传输大量数据,所以上传文件时只能用post方式
TCP的拥塞处理
TCP是如何进行流量控制
TCP和UDP分别对应的常见应用层协议
IP地址的分类
有了唯一的Mac地址为啥还需要IP地址?
交换机、集线器与路由器有什么区别?
网桥的作用
网桥工作在数据链路层,将两个LAN连起来,根据MAC地址来转发帧,可以看作一个“低层的路由器”(路由器工作在网络层,根据网络地址如IP地址进行转发
- 过滤通信量。网桥可以使用局域网的一个网段上各工作站之间的信息量局限在本网段的范围内,而不会经过网桥溜到其他网段去。
- 扩大了物理范围,也增加了整个局域网上的工作站的最大数目。
- 可使用不同的物理层,可互连不同的局域网。
- 提高了可靠性。如果把较大的局域网分割成若干较小的局域网,并且每个小的局域网内部的信息量明显地高于网间的信息量,那么整个互连网络的性能就变得更好
网桥缺点 - 由于网桥对接收的帧要先存储和查找站表,然后转发,这就增加了时延。
- 在MAC子层并没有流量控制功能。当网络上负荷很重时,可能因网桥缓冲区的存储空间不够而发生溢出,以致产生帧丢失的现象。
- 具有不同MAC子层的网段桥接再一起时,网桥在转发一个帧之前,必须修改帧的某些字段的内容,以适合另一个MAC子层的要求,增加时延。
- 网桥只适合于用户数不太多(不超过几百个)和信息量不太大的局域网,否则有时会产生较大的广播风暴。
网络接口卡(网卡)的功能?
网络接口卡即网卡也就是网络适配器,接收上一层的ip数据报,并将其封装成帧发送到局域网中。一般的适配器都包含物理层和数据链路层这两层的功能。网络接口卡实现的是TCP/IP四层参考模型中的网络接口层,对应OSI七 层参考模型中的 物理层协议和数据链路层协议。
URI和URL的区别
URI标记了一个网络资源,仅此而已; URL标记了一个WWW互联网资源(用地址标记),并给出了他的访问地址
GET请求中URL编码的意义
首先 url 在网络中传输时使用ascll编码的,也就是说,在浏览器中一个请求发出去最终是使用ascll编码的,这样子要是我们发出去的请求中包含有非ascll字符的话,就会被浏览器编码,但是,但是,各个浏览器对于url的编码方式是不一样的!!!这就会导致很大的问题,同一个url在不同的浏览器中实际发出的url都不一样了,服务器还要怎么解析这些请求的?要解决这个问题效率最最高的方法就是在前端中对要发出的url使用js 进行编码,编码后的url就只剩下ascll编码中有的字符了。这就是URL编码。
URL编码指的是对网址上的不安全的字符,例如中文,进行编码,编码后的中文方便在网络上传输。URL编码是负责把URL里面的空格和其他的特殊字符替换成对应的十六进制表示,反之就是解码。
APPlication,Session和Cookie的区别
彻底弄懂session,cookie,token
http缓存机制,浏览器缓存到底是什么
强制缓存的优先级更高,如果没失效,就直接用缓存数据库里的东西
如果时间已经失效了,就看用的是哪种标识(Etag服务端生成的唯一标识,还是last-modified资源最后修改时间标识)返回304就用缓存里的,返回200就返回body和新的header
一般来说,无论如何都会协商缓存,浏览器必备的缓存不可能没有~
sdn.net/zouzixuan/article/details/84677548
如何避免浏览器缓存
什么是分块传送。
如果 HTTP 整块传输,需要提前设置 Content-Length。
分块传输编码(Chunked transfer encoding)允许服务端在不预先给出报文长度的情况下,分块将输出发送给客户端。输出空段表示报文结束。
TCP传输中的粘包问题
TCP是通过Segment报文段传输,若连续发送两个,可能会发送两个报文段粘在一起的问题,解决方法如下
- 定长发送报文段
- 在报文段的后面使用尾部边界标识
- 在报文头确认报文段的长度(推荐)
几种网络攻击方法
- XSS (跨站脚本攻击) 【攻击者在 Web 页面中插入恶意脚本,当用户浏览页面时,促使脚本执行,从而达到攻击目的】
(1)客服端及服务端用户的输入数据进行双重验证(2)对所有的数据进行适当的编码(3)设置 HTTP Header: “X-XSS-Protection:1”
- DDos 分布式拒绝服务,【发送大量请求,使服务器瘫痪】
服务器加带宽(成本昂贵)2.使用DDos 防御产品
- CSRF 跨站请求伪造 【用户本地存储cookie,攻击者利用用户的cookie进行认证,然后伪造用户发出请求】
检查标准请求头 ,确认是否同源(2)检查CSRF token
- SQL注入(通过用户输入,拼接成恶意Sql,并执行)
预编译SQL 2.验证用户输入3.用户输入编码
XXS攻击和SQL注入
HTTP 常见面试题
http协议有哪几种请求方式?
- GET:用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器
- POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式
- PUT:传输文件,报文主体中包含文件内容,保存到对应URI位置
- HEAD:获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效
- DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件
- OPTIONS:查询响应URI支持的HTTP方法
HTTP1.0的缺陷
- 每个请求都需单独建立连接(keep-alive能解决部分问题但不能交叉推送)
- 每个请求和响应都需要完整的头信息
- 数据未加密
HTTP2.0的优势
- 多路复用 —— 即可以交叉推送
- 压缩头信息
- 请求划分优先级
- 支持服务器端主动推送 —— js, css 等文件不需要客户端解析完HTLM后再请求
http和https区别?
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
总的来说: HTTPS=SSL+HTTP
- https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
- http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
(这个只是默认端口不一样,实际上端口是可以改的) - http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
HTTP请求报文与响应报文格式
请求报文包含三部分:
- 请求行:包含请求方法、URI、HTTP版本信息
- 请求头部(headers)字段
- 请求内容实体(body)
响应报文包含三部分:
- 状态行:包含HTTP版本、状态码、状态码的原因短
- 响应头部(headers)字段
- 响应内容(body)实体
HTTP状态码
-
200 请求已成功,请求所希望的响应头或数据体将随此响应返回。
-
201 请求已经被实现,而且有一个新的资源已经依据请求的需要而建立,且其 URI 已经随Location 头信息返回
-
202 服务器已接受请求,但尚未处理
-
301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
-
302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
-
303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
-
304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
-
305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。
-
307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
-
401 当前请求需要用户验证。如果当前请求已经包含了 Authorization 证书,那么401响应代表着服务器验证已经拒绝了那些证书
-
403 服务器已经理解请求,但是拒绝执行它。与401响应不同的是,身份验证并不能提供任何帮助,而且这个请求也不应该被重复提交
-
404 请求失败,请求所希望得到的资源未被在服务器上发现
-
500 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器的程序码出错时出现。
-
501 服务器不支持当前请求所需要的某个功能。当服务器无法识别请求的方法,并且无法支持其对任何资源的请求。
-
502 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
-
503 由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复。
传输层和网络层的区别
在协议栈中,传输层位于网络层之上,传输层协议为不同主机上运行的进程提供逻辑通信,而网络层协议为不同主机提供逻辑通信。
网络层像是中美的官方邮局,传输层像是本地义务帮组大家分发信件的人员
- 主机(也称为终端系统)=房子
- 进程=堂兄妹
- 应用程序消息=信封里的信
- 网络层协议=邮递服务(包括邮递员)
- 传输层协议=Ann和Bill
传输层中他们不负责各个邮递中心的邮件分类工作以及将邮件从一个中心送到另一个中心的工作。传输层协议所提供的服务也通常受限于位于其下方的网络层协议。如果网络层协议不能提供主机之间传送的4—PDU的延迟和带宽保证,那么传输层协议也不能提供进程之间传送的消息的延迟和带宽保证。 然而,即使当下面的网络层协议使得网络层并不能提供某些相应服务时,传输层协议仍然可以提供某些特定服务。例如,即使下面的网络层协议并不是可靠的,也就是说,即使网络层协议丢失、篡改或者复制了传送的数据包,传输层协议也可以提供可靠的数据传输服务。另一个例子是,即使网络层不能保证4—PDU的保密性,传输层协议也可以通过加密的方式来保证应用程序消息不被入侵读取。
推荐阅读
-
PHP开发中的错误收集,不定期更新。
-
2020 java Redis面试题及答案(最全版本持续更新)
-
2020 java MySQL面试题及答案(最全版本持续更新)
-
2020 java Elasticsearch面试题及答案(最全版本持续更新)
-
2020 java Memcached面试题及答案(最全版本持续更新)
-
2020 java ZooKeeper 面试题及答案(最全版本持续更新)
-
2020 java Dubbo面试题及答案(最全版本持续更新)
-
c++:论如何成功把自己搞懵【二叉树特辑①】(不定期更新)
-
怎么从一名码农成为架构师的必看知识点:目录大全(不定期更新)
-
史上最全python面试题详解(四)(附带详细答案(关注、持续更新))