计算机网络常见面试问题
# 计算机网络常见面试问题
计算机网络常见面试问题
# 1 DNS解析过程
- 浏览器先检查自身缓存中有没有解析过这个域名对应的 IP 地址,如果有,解析结束。
- 浏览器检查操作系统缓存中有没有对应的解析结果,在 C 盘的 hosts 文件夹里有 networks。如果有,解析结束。
- 请求本地域名服务器(LDNS)来解析域名,这台服务器一般位于你的城市,距离不会很远,服务器的性能也很好,一般会缓存域名解析结果,大约 80% 的域名解析都在这里完成。
- 如果 LDNS 未命中,直接跳到根域名服务器请求解析,根域名服务器是最高层次的,它不直接用于域名解析,它会返回一个所查询域的顶级域名服务器(如 com cn org)地址。
- 请求顶级域名服务器,它会返回对应的服务名地址,就是权限域名服务器。
- 在权限域名服务器中找到目标的 IP 地址,返回给本地域名服务器 LDNS。
- LDNS 缓存这个域名和对应的 IP。
- LDNS 把解析的结果返回给用户,并缓存在本地系统中。
# 2 浏览器输入URL返回页面的过程
- 浏览器解析URL:生成发送给Web服务器的请求信息。包括:协议(HTTP、HTTPS)、web服务器、访问的资源路径
- DNS解析域名:在发送报文之前需要查询服务器域名对应的IP地址,这个过程需要DNS解析。
- TCP连接:三次握手
- 浏览器发送HTTP请求:如get请求包含主机(Host)、用户代理(User-Agent),用户代理就是自己的浏览器,它是你的"代理人",Connection(连接属性)中的keep-alive。又是还可能包含cookies
- 服务器处理请求并响应:服务器接收到请求会解析请求头,生成一个响应头和具体的响应内容,响应头会告诉浏览器一些重要的信息(比如,状态码)。响应内容就是要请求的页面内容。
- 浏览器解析渲染页面
- 关闭TCP连接:四次挥手
# 3 HTTP如何保存用户状态
HTTP 是无状态协议,也就是说 HTTP 协议自身不对请求和响应之间的通信状态进行保存。Session 机制的存在就是为了解决这个问题,Session 的主要作用就是通过服务端记录用户的状态。
典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,服务端给特定的用户创建特定的 Session 之后,将 Session ID 保存到浏览器的 Cookie 中,在发送请求的时候携带 Session ID,服务器就知道是哪个用户了。一般情况下,服务器会在一定时间内保存这个 Session,过了时间限制,就会销毁这个 Session。
在服务端保存 Session 的方法很多,最常用的就是内存和数据库,比如 redis。大部分情况通过在 Cookie 中附加一个 Session ID 来实现跟踪。当 Cookie 被禁用时,可以利用 URL 重写把 Session ID直 接附加在 URL 路径的后面。
# 4 Cookie和Session的作用
Cookie 和 Session 都是浏览器用来跟踪用户身份的,但是应用场景不同。
Cookie 一般用来保存用户信息:
- 在 Cookie 中保存已经登陆过的用户信息,下次访问网站的时候,页面可以自动把登录的基本信息填好。
- 一般网络会保持登录状态,下次访问无需再次登录,因为用户登录的时候可以存放一个 Token 在 Cookie 中,下次登录的时候只需根据 Token 值来查找用户即可。(为了安全考虑,重新登陆一般要重写 Token)
登录一次网站后访问网站其他页面不需要重新登录。Session的主要作用就是通过服务端记录用户的状态。典型的场景就是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,服务器给特定的用户创建特定的 Session 之后就可以标识这个用户并且跟踪这个用户了。
# 5 Cookie和Session的区别
- 作用范围不同:Cookie 保存在客户端,Session 保存在服务器
- 有效期不同:Cookie 可以设置长时间保存,比如默认登陆;session 一般时间较短,客户端关闭或 Session 超时都会失效。
- 隐私策略不同:Cookie 存储在客户端,容易被窃取;Session 存储在服务器,安全性相比 Cookie 会好一点。
- 存储大小不同;单个 Cookie 保存的数据不能超过 4K;对 Sesssion 来说没有上线,但要处于服务器的性能考虑,Session 内不要存放过多的数据,需要设置 Session 删除机制。
# 6 Cookie的存活时间
- 默认情况,浏览器关闭,Cookie 数据被销毁
- 持久化存储,把 Cookie 数据写到硬盘的文件。设置最大存活时间
setMaxAge()
# 7 对称加密和非对称加密
对称加密:通信双方使用相同的密钥进行加密。特点是加密速度快,但是缺点是密钥泄露会导致密文数据被破解。
非对称加密:需要生成两个密钥,公钥和私钥。公钥是公开的,任何人都可以获得,而私钥是私人保管的,不能泄露。公钥负责加密,私钥负责解密;非对称加密算法是RSA算法。这种加密算法安全性高,但是计算量相比对称加密大很多,加密和解密过程都很慢。
通过非对称加密发送对称加密的密钥,案例如下:
- A需要与银行做交易,浏览器生成一个随机数作为对称密钥。
- A的浏览器向银行网站请求公钥。
- 银行将公钥发送给A。
- A的浏览器使用银行的公钥对对称密钥进行加密。
- A的浏览器将加密后的密钥发送给银行。
- 银行使用私钥解密得到A浏览器的对称密钥
- A与银行直接使用对称加密来进行沟通了。
# 8 SMTP:简单邮件传输协议
简单邮件传输(发送)协议,SMTP,Simple Mail Transfer Protocal基于TCP协议,用来发送电子邮件。
SMTP是发送电子邮件的协议,接收电子邮件的协议是POP3协议、IMAP协议。
# 9 电子邮件的发送过程
比如我的邮箱是“123456@163.com”,我要向“xiaoming@qq.com"发送邮件,整个过程分为下面几个步骤:
- 通过SMtp协议,将写好的邮件交给 163 邮箱服务器(邮局)。
- 163邮箱服务器检测到我发送的邮箱是 QQ 邮箱,然后它使用SMTP协议将我的邮件转发给 QQ 邮箱服务器。
- QQ邮箱服务器接收到邮件后就通知“xiaoming@qq.com"的用户来收邮件,然后用户就通过 POP3/IMAP 协议将邮件取出。
# 10 如何判断邮箱是真正存在的
利用SMTP协议来检测:
- 查找邮箱域名对应的SMTP服务器地址。
- 尝试与服务器建立连接。
- 连接成功后向需要验证的邮箱发送邮件。
- 根据返回结果判定邮箱地址的真实性。
# 11 FTP文件传输协议
提供文件传输服务,基于TCP实现可靠的传输。使用FTP传输文件的好处是可以屏蔽操作系统和文件存储方式。
FTP是基于客户-服务器(C/S)模型而设计的,在客户端与FTP服务器之间建立两个连接。
# 12 URI 和 URL 的区别
- URI, Uniform Resource Identifier,统一资源标志符,可以唯一标识一个资源
- URL,Uniform Resource Locator,统一资源定位符,可以提供该资源的路径。它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。
URI的作用像身份证一样,URL的作用更像家庭住址一样。URL是一个具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。
# 13 转发与重定向
转发:由服务器进行页面跳转。浏览器发送请求,服务器经过第一次处理,添加一些参数后转发,经过第二次处理,再响应给浏览器。(服务器内部的重定向)。
重定向:由客户端进行页面跳转。请求获得响应后,再次发送一个新的请求。
区别 | 转发forward() | 重定向sendRedirect() |
---|---|---|
根目录 | 包含项目访问地址 | 没有项目访问地址 |
地址栏 | 不会发生变化 | 会发生变化 |
哪里跳转 | 服务器端进行的跳转 | 浏览器端进行的跳转 |
请求域中数据 | 不会丢失 | 会丢失 |
# 14 request、session、application的区别
作用域request < session < application
- request:在一次请求上生效,当把信息返回给客户端,该对象就被销毁。
- session:用于跟踪用户的状态。应用:登录、购物车
- application:一个服务器就一个 application,用户共享一个 application,当服务器停止时 application 销毁。应用:网站访问次数。