整理了 20 道常见的计算机网络面试题。
1.GET 请求和 POST 请求的区别
GET 请求是查询服务器指定的资源,POST 请求根据报文主体对请求的资源作出处理。
GET 请求的参数在 URL 中传递,参数数据类型为 ASCII 字符;POST 请求参数在request body中传递,没有数据类型的限制。
GET 请求是安全且幂等的,POST 请求不安全且不幂等。
GET 请求会被主动缓存,支持收藏为书签;POST 请求不会缓存,不能收藏为书签。
2.HTTP 和 HTTPS 的区别
HTTP 会存在三个问题:
请求信息是明文传输的,容易被窃听截取;
没有验证对方身份,存在被冒充的风险;
数据的完整性未校验,容易被中间人篡改。
HTTPS = HTTP + SSL/TLS
HTTP 是不安全的,HTTPS 是安全的。
HTTP 默认端口80,HTTPS 默认端口 443。
HTTP 不需要证书,HTTPS 需要证书。
3.HTTP 常用的状态码和含义
1xx:提示信息,表示目前是协议处理的中间状态,还需要后续的操作
2xx:成功,报文已经收到,并被正确处理
3xx:重定向,资源位置变动,需要客户端重新发送请求
4xx:客户端错误,请求报文有误,服务器无法处理
5xx:服务器错误,服务器在处理请求时内部发生了错误
常用的状态码:
200 OK 成功,一切正常
301 Moved Permanently 永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次访问。
302 Found 临时重定向,说明请求的资源还在,但暂时需要用另一个 URL 来访问。
400 Bad Request 客户端请求的报文有错误,但只是个笼统的错误。
403 Forbidden 表示服务器禁止访问资源,并不是客户端的请求出错。
404 Not Found 表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。
500 Internal Server Error 服务端错误
4.在浏览器地址输入一个 URL 后发生了什么
首先,根据 URL 解析出域名。
然后进行 DNS 域名解析,获取到 IP 地址。
然后进行 TCP 连接,三次握手建立连接。
向服务器发送 HTTP 请求。
服务器处理请求,返回响应。
浏览器根据响应渲染出页面内容。
TCP四次挥手断开连接。
DNS 域名解析过程:
浏览器会先在自身的缓存中查找有没有域名对应的 IP 地址,如果没有,就去操作系统的缓存中找,如果还是没有,就查看 host文件,如果也没有,就会访问本地 DNS 服务器-》根域名服务器-》顶级域名服务器-》权威域名服务器等一层层迭代查询,直到查到 IP 地址。
5.你了解的端口和对应的服务
21 FTP 文件传输服务
22 SSH
23 Telnet 远程登录服务
25 SMTP 简单邮件传输服务
53 DNS 域名解析服务
80 HTTP 协议
443 HTTPS 协议
1080 Sockets
3306 MYSQL 服务默认端口
6.计算机网络体系结构
OSI七层模型:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层
TCP/IP 四层模型:应用层,传输层,网络层,网络接口层
7.如何理解 HTTP协议是无状态的
简单来说就是服务器不知道你是谁。
无状态的好处是,不需要用额外的资源来记录状态,减轻服务器的负担,可以有更多的 CPU 和内存来对外提供服务。
无状态的坏处是,在有关联性的操作中会非常麻烦。比如说登录-》加购物车-》下单-》结算-》支付场景,在每次请求的时候都需要去询问身份信息。
解决的方法就是添加 COOKIE。
客户端第一次向服务器发送请求之后,服务器生成 cookie,跟随响应一起返回给客户端。客户端保存 cookie,下次请求的时候携带 cookie,服务器就能够识别客户端的身份了。
8.TCP 三次握手
一开始,客户端和服务端都处于 CLOSED 状态,先是服务端主动监听某个端口,处于 LISTEN 状态。
然后客户端主动发起连接 SYN,之后进入 SYN_SENT 的状态。
服务端收到发起的连接,返回 SYN,并且 ACK 客户端的 SYN,之后处于 SYN_RCVD 状态。
客户端收到服务端发送的 SYN 和 ACK 之后,发送对 SYN 确认的 ACK,之后处于 ESTABLISHED 状态,因为它一发一收成功了。
服务端收到 ACK 之后,处于ESTABLISHED 状态,因为它也一发一收成功了。
三次握手的目的是保证双方都有发送和接收的能力。
9.TCP四次挥手
客户端打算关闭连接,此时会发送一个TCP 首部 FIN标志位被置为 1的报文,之后客户端进入 FIN_WAIT_1 状态。
服务端收到该报文之后,就向客户端发送ACK应答报文,之后服务端进入 CLOSE_WAIT 状态。
客户端收到服务端的 ACK 应答报文之后,进入FIN_WAIT_2 状态。
等待服务端处理完数据之后,向客户端发送 FIN 报文,之后服务端进入 LAST_ACK 状态。
客户端收到服务端的 FIN 报文之后,回复一个 ACK 报文,之后进入TIME_WAIT 状态。
服务端收到 ACK 应答报文之后,就进入了 CLOSE 状态。
客户端经过 2MSL 时间之后,也进入 CLOSE 状态。
10.HTTP 如何实现长连接?什么时候会超时?
在头部 connection字段设置为keep-alive。
HTTP/1.0 默认短连接,可以强制开启长连接。HTTP/1.1 默认长连接。
HTTP 一般会有守护进程,可设置keep-alive timeout ,TCP 连接闲置超过这个时间就会关闭。
也可以在HTTP 的 header 里设置超时时间。
TCP 的keep-alive包含 3 个参数,当 TCP 连接之后,闲置了tcp_keepalive_time,则会发送侦测包,如果没有收到对方的 ACK,那么会每隔tcp_keepalive_intvl再发送一个,直到发送了tcp_keepalive_probes,就会丢弃该连接。
11.HTTPS 流程是怎么样的?
-
HTTPS = HTTP + SSL/TLS,也就是用SSL/TLS对数据进行加密和解密,Http进行传输。
-
SSL,即Secure Sockets Layer(安全套接层协议),是网络通信提供安全及数据完整性的一种安全协议。
-
TLS,即Transport Layer Security(安全传输层协议),它是SSL3.0的后续版本。
-
客户端发起Https请求,连接到服务器的443端口。
-
服务器必须要有一套数字证书(证书内容有公钥、证书颁发机构、失效日期等)。
-
服务器将自己的数字证书发送给客户端(公钥在证书里面,私钥由服务器持有)。
-
客户端收到数字证书之后,会验证证书的合法性。如果证书验证通过,就会生成一个随机的对称密钥,用证书的公钥加密。
-
客户端将公钥加密后的密钥发送到服务器。
-
服务器接收到客户端发来的密文密钥之后,用自己之前保留的私钥对其进行非对称解密,解密之后就得到客户端的密钥,然后用客户端密钥对返回数据进行对称加密,这样传输的数据都是密文。
-
服务器将加密后的密文返回到客户端。
-
客户端收到后,用自己的密钥对其进行对称解密,得到服务器返回的数据。
12.什么是证书?如何获取证书?
-
公钥和个人等信息,经过Hash摘要算法加密,形成消息摘要;将消息摘要拿到拥有公信力的认证中心(CA),用它的私钥对消息摘要加密,形成数字签名。
-
公钥和个人信息、数字签名共同构成数字证书。
13.对称加密和非对称加密有什么区别?
对称加密:指加密和解密使用同一密钥,优点是运算速度较快,缺点是如何安全将密钥传输给另一方。常见的对称加密算法有:DES、AES等。
非对称加密:指的是加密和解密使用不同的密钥(即公钥和私钥)。公钥与私钥是成对存在的,如果用公钥对数据进行加密,只有对应的私钥才能解密。常见的非对称加密算法有RSA。
14.DNS 解析过程
浏览器会先在自身的缓存中查找有没有域名对应的 IP 地址,如果没有,就去操作系统的缓存中找,如果还是没有,就查看 host文件,如果也没有,就会访问本地 DNS 服务器-》根域名服务器-》顶级域名服务器-》权威域名服务器等一层层迭代查询,直到查到 IP 地址。
15.常见的 HTTP请求方式
GET 从服务器获取指定的资源
POST 根据请求负荷(报文主体)对指定的资源做出处理
PUT 向服务器提交数据,以修改数据
HEAD 请求页面的首部,获取资源的元信息
DELETE 删除服务器上的某些资源
16.什么是 SQL 注入?如何预防 SQL 注入?
SQL注入是一种代码注入技术,一般被应用于攻击web应用程序。它通过在web应用接口传入一些特殊参数字符,来欺骗应用服务器,执行恶意的SQL命令,以达到非法获取系统信息的目的。它目前是黑客对数据库进行攻击的最常用手段之一。
1). 使用#{}而不是 ${}
2). 不要暴露一些不必要的日志或者安全信息,比如避免直接响应一些sql异常信息。
3). 不相信任何外部输入参数,过滤参数中含有的一些数据库关键词
可以加个参数校验过滤的方法,过滤union,or
等数据库关键词
4). 适当的权限控制
17.cookie和session的区别
-
Cookie是保存在客户端的一小块文本串的数据。客户端向服务器发起请求时,服务端会向客户端发送一个Cookie,客户端就把Cookie保存起来。在客户端下次向同一服务器再发起请求时,Cookie被携带发送到服务器。服务器就是根据这个Cookie来确认身份的。
-
用户第一次请求服务器时,服务器根据用户提交的信息,创建对应的Session,请求返回时将此Session的唯一标识信息SessionID返回给浏览器,浏览器接收到服务器返回的SessionID信息后,会将此信息存入Cookie中,同时Cookie记录此SessionID是属于哪个域名。
-
当用户第二次访问服务器时,请求会自动判断此域名下是否存在Cookie信息,如果存在,则自动将Cookie信息也发送给服务端,服务端会从Cookie中获取SessionID,再根据 SessionID查找对应的 Session信息,如果没有找到,说明用户没有登录或者登录失效,如果找到Session证明用户已经登录可执行后面操作。
-
Cookie 保存在客户端,session 保存在服务器;cookie 的数据类型是 ASCII 码,session 可以是任意数据类型。session 比 cookie 更安全;cookie 存储空间较小,session 占用的存储空间较大;cookie 的有效期较长,可以设置长时间保存,session 有效期较短,超时或者客户端关闭都会失效。
18.TCP 和 UDP 的区别
TCP 是面向连接的,UDP 是无连接的,发送数据之前不需要建立连接;
TCP 是可靠的,通过 TCP 传输的数据,无差错,不丢失,不重复,且按序到达,UDP 是不可靠的;
TCP传输较慢,UDP 传输快,UDP 没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等);
TCP 是面向字节流的,UDP 是面向报文的;
每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信;
TCP 适用场景,网页,邮件;UDP 适用场景,语音广播。
19.TCP 如何确保可靠性
连接和断开的可靠性(三次握手,四次挥手)、有状态(哪些数据发送了,哪些没发)、可控制(超时重传、流量控制、拥塞控制等)。
-
首先,TCP的连接是基于三次握手,而断开则是基于四次挥手。确保连接和断开的可靠性。
-
其次,TCP的可靠性,还体现在有状态;TCP会记录哪些数据发送了,哪些数据被接收了,哪些没有被接受,并且保证数据包按序到达,保证数据传输不出差错。
-
再次,TCP的可靠性,还体现在可控制。它有数据包校验、ACK应答、超时重传(发送方)、失序数据重传(接收方)、丢弃重复数据、流量控制(滑动窗口)和拥塞控制等机制。
20.ARP 协议的工作原理
网络层的 ARP 协议完成了 IP 地址与物理地址的映射。首先,每台主机都会在自己的 ARP 缓冲区中建立一个 ARP 列表,以表示 IP 地址和 MAC 地址的对应关系。当源主机需要将一个数据包要发送到目的主机时,会首先检查自己 ARP 列表中是否存在该 IP 地址对应的 MAC 地址:如果有,就直接将数据包发送到这个 MAC 地址;如果没有,就向本地网段发起一个 ARP 请求的广播包,查询此目的主机对应的 MAC 地址。
此 ARP 请求数据包里包括源主机的 IP 地址、硬件地址、以及目的主机的 IP 地址。网络中所有的主机收到这个 ARP 请求后,会检查数据包中的目的 IP 是否和自己的 IP 地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的 MAC 地址和 IP 地址添加到自己的 ARP 列表中,如果 ARP 表中已经存在该 IP 的信息,则将其覆盖,然后给源主机发送一个 ARP 响应数据包,告诉对方自己是它需要查找的 MAC 地址;源主机收到这个 ARP 响应数据包后,将得到的目的主机的 IP 地址和 MAC 地址添加到自己的 ARP 列表中,并利用此信息开始数据的传输。如果源主机一直没有收到 ARP 响应数据包,表示 ARP 查询失败。