面试-计算机网络

面试题

面试题:浏览器输入网址后会发生什么

  1. DNS域名解析
  2. HTTP协议生成报文
  3. TCP将报文分段传输
  4. IP协议进行分组转发
  5. TCP重组报文
  6. HTTP对请求进行处理

面试题:Https和Http的区别

Https通过SSL协议实现了对传输数据的加密处理

Https使用的默认端口是443,Http使用的默认端口是80

Https传输的数据安全性高,Http传输的数据是明文

Https传输效率相对较低(加密解密带来的影响),Http协议传输速度较快

Https服务器需要SSL证书来证明身份(SSL协议就是一个公钥私钥对),Http不需要

面试题:SSL证书验证失败可能有哪些原因

  1. SSL证书过期
  2. 发行SSL证书的机构不受信任
  3. SSL证书与域名不匹配

面试题:客户端禁用cookie后怎么办

禁用cookie会导致客户端的session失效,但是可以在url中传递sessionid

面试题:DNS域名解析流程

  1. 浏览器检查缓存中是否存在该域名映射
  2. 查询操作系统中是否有该域名的IP地址映射
  3. 向本地DNS域名服务器发送请求,本地域名服务器会先查询自己是否缓存了该域名的映射,没有就向根域名服务器发送请求。
  4. 根域名服务器会返回该域名对应的主域名服务器

面试题:http协议状态码301和302区别

301是永久重定向,302是临时重定向。

永久重定向的意思是当前网页的资源已经永久性的转移到另外一个位置去了,搜索引擎会抓取新的内容并且将网址替换为新的网址。

临时重定向的意思是当前网页的资源临时转移到了另一个位置,搜索引擎会抓取新网址的内容,但保留旧的网址。这可能会导致URL劫持问题。

关键点:临时重定向网址不会变

面试题:time wait状态是什么意思

在Http协议中,断开链接需要四次挥手,例如客户端A在接受到服务端B的第三次挥手的FIN包时,会返回一个ACK的确认包,发送ACK包后会客户端A进入time-wait状态,客户端A会等待2MSL的时间,如果在2MSL时间内没有再收到服务端B的FIN包,则客户端A认为断开链接成功,如果继续接受到了服务端的FIN包说明第四次挥手发送的ACK包没有发送成功或堵塞在网络中了,客户端A会继续发送ACK包并重新计时

面试题:TCP/IP五层模型

物理层、数据链路层、网络层、传输层、应用层

物理层主要负责将上层的数据转换为01的信号通过物理媒介传输

数据链路层主要讲网络层中的数据封装成帧,并且对物理层传输的数据进行校验

网络层主要负责在网间找到正确的路由并传输

传输层主要负责实现两个主机间的通信

应用层主要负责应用进程间的通信来完成特定的任务

面试题:TCP UDP位于那一层

TCP和UDP位于传输层

面试题:Socket位于哪一层

socket是传输层和应用层之间

面试题:TCP和UDP的区别

  • TCP是有链接的,UDP是无连接的
  • TCP保证数据传输的可靠性,UDP不保证数据传输一定可靠
  • TCP是基于字节流(应用层的数据会被TCP协议切分为大小不等的数据包进行发送),UDP是基于报文的
  • TCP是一对一的通信,UDP可以是一对一或者多对多的‘
  • TCP传输效率比较低,UDP传输效率较高
  • 一般在可靠性要求比较高的场景用TCP,实时性要求比较高的情况下使用UDP

面试题:TCP可靠性保证

  • 序列号:对数据进行分组并且标号,序列号是递增的
  • 校验和:TCP会对传输数据进行反码相加作为校验字段,接收方对接受数据进行校验
  • 确认应答:接受方在每次接受到数据之后会返回一个确认报文
  • 超时重传:发送方发送数据之后会放入重传队列并设置一个计时器,如果超时仍未接收到确认包则重新发送
  • 连接管理:三次握手、四次挥手
  • 流量控制:接收端接收处理数据的速度是有限的,接收端每次在确认包中会带上自己当前空闲的区域大小,发送方根据空闲空间来调整发送速度
  • 拥塞控制:发送方为了避免网络堵塞导致大量丢失数据,采用的一种机制。

面试题:拥塞控制

拥塞控制主要分为:慢启动、拥塞避免、快重传、快恢复

慢启动:发送方一开始会发送一个单位的数据包来探测网络的质量,随后每次按指数级别提高发送的数据量

拥塞避免:发送数据量提升到一定阈值之后会进入线性增长,避免大量的数据发送导致网络堵塞

快重传:每次发送数据时都会设置一个计时器,如果超时重发数据

快恢复:如果第二次重传时在计时时间内返回了确认数据,则维持当前的发送速度,如果在计时内还是没有收到确认包,又会重新进入慢启动阶段

计算机网络体系结构

OSI七层模型

七层模型主要分为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

物理层:原始比特流的传输

数据链路层:通过一些协议保证物理层传输的数据不出差错(差错校验)

TCP/IP四层

四层模型主要分为:网络接口层(物理层、数据链路)、网际层、传输层、应用层

TCP/IP五层

五层模型主要分为:物理层、数据链路层、网络层、传输层、应用层

物理层

物理层主要通过物理媒介,传输01二进制的数据

数据链路层

数据链路层主要对物理层的数据进行封装成帧、并且校验数据是否正确

网络层

选择合适的网间路由将数据报发送出去

运输层

主要负责两台主机间进程同信数据的传输

应用层

通过应用进程间的交互来完成具体的任务

DNS域名解析流程

DNS主要作用就是将域名转换成IP地址

  1. 浏览器查看缓存中是否有该域名的IP地址映射,如果有直接转换
  2. 查询操作系统中是否有该域名的IP地址映射,windows系统下有个host文件可以修改我们常用的localhost就是在这里进行映射的
  3. 向本地DNS域名服务器发送请求,本地域名服务器会先查询自己是否缓存了该域名的映射,没有就向根域名服务器发送请求。
  4. 根域名服务器会返回该域名对应的主域名服务器

TCP和UDP

TCP和UDP的区别

TCP是面向链接的,可靠的数据传输。具有超时重传等一系列机制来确保信息的发送。

UDP是无连接的,不可靠的数据传输,UDP发送数据是通过广播出去的,不需要先建立链接就可以发送。UDP一般使用在实时性要求较高或广播通信中

TCP是基于字节流的,UDP是基于数据报的

如何使用UDP实现TCP

TCP如何保证安全性

TCP的可靠性保证机制主要有七种

  1. 检验和

    发送方将要传输的数据反码相加做为校验字段,接收方接收到数据后对数据进行校验

  2. 序列号

    TCP为每个字节的数据进行编号,发送数据后,将数据包放入重传队列,发送方接收到对应编号的响应后,将数据从重传队列中移除,如果某个数据超时未响应则重传。接收端也可以根据序列号判断数据是否完整。

  3. 确认应答

    发送方在TCP首部添加标志位ACK,如果接收方对按序到达的数据确认后,将返回ACK+1的标识,接收方收到确认后继续发送后续,否则进行重传。

  4. 超时重传

    当发送方发送的报文一定时间内未接收到确认,发送方进行重传。

  5. 链接管理

    三次握手+四次挥手

    三次握手:客户端向服务端发送序列号x,服务端接收到后返回确认序列号x+1以及序列号y,客户端接收后返回确认序列号y+1

    四次挥手:①客户端向服务端发送断开链接,序列号u ②服务端接收后返回确认序列号u+1,客户端收到响应后关闭客户端到服务端的传输通道。TCP链接处于半关闭状态。③服务端数据传输完毕后向客户端发送序列号w和u+1④客户端接收后返回序列号w+1,客户端进入关闭状态撤销传输控制块TCB,服务端收到确认号后也进入关闭状态撤销传输控制块TCB

  6. 流量控制

    接收端处理数据的速度有限时,发送端发送数据过快会导致数据丢包,TCP根据接收端的处理速度来决定发送端的发送速度,这就是流量控制。接收端每次接收数据后在应答报文中带上当前缓冲区的空闲空间大小,发送端根据空间大小来控制数据发送。当空闲空间为0时,发送端停止发送,并定期发送窗口探测,检测是否还有空闲空间

  7. 拥塞控制

    拥塞控制主要解决网络堵塞而产生的丢包问题,拥塞控制主要由四个核心算法组成:慢启动、拥塞避免、快速重传、快速恢复

    慢启动:发送方在一开始会发送一个数据包以测探网络的状况,网络正常时随即以指数时增长发送数据

    拥塞避免:指数增长到一定阈值后降低到线性增长

    快速重传:发送方每次发送数据时都会设置一个计时器,如果超时则会立即重传

    快速恢复:发送数据超时后,重传仍然会设置一个计时器,如果正常返回了则直接进入拥塞避免阶段,如果仍然超时则会降低到慢启动阶段

TCP三次握手和四次挥手

三次握手

三次握手的原因

三次握手的主要目的就是确认双方是否都有发送和接收消息的能力,如果只有两次握手,服务端是不知道客户端是否有接收消息的能力的。



三次握手流程

  1. 第一次握手:客户端向服务端发送SYN包并携带一个SEQ序列号,随即客户端进入SYN_SENT状态
  2. 第二次握手:服务端收到SYN包后,服务端会返回一个ACK包(客户端的SEQ序列号+1)和一个自己的SYN包(同样是一个SEQ序列号),随机服务端进入SYN_RCVD状态
  3. 第三次握手:客户端收到服务端的SYN包后,继续发送一个ACK包,随机客户端进入ESTAB_LISHED状态,同时服务端接受到后也进入ESTAB_LISHED状态

三次握手不是百分百能建立链接的

三次握手也仍然不能保证百分百的正确建立链接,没有完全能保证百分百建立链接的握手,三次握手是性能和安全的综合考虑

建立链接后

三次握手确认链接后,客户端在一定时间内没有发送消息(默认是两个小时,服务端接收到客户端的消息后会重置这个时间),服务端会发送探测报文确认客户端是否正常,如果还没有响应,就会断开。

四次挥手

四次挥手的原因

因为TCP的链接是全双工的,即客户端和服务端都可以向对方传输数据,所以在断开链接时需要断开两边的传输通道。一方主动发起断开链接时,可能另一方还在传输数据,所以要分两次来断开。

断开链接的请求可以由客户端发起也可以由服务端发起

四次挥手流程

  1. 第一次挥手:客户端向服务端发送FIN包(携带序列号)表明客户端到服务端这边的数据已经传输完毕了。发送FIN包后客户端随即进入FIN-WAIT-1

  2. 第二次挥手:服务端接受到FIN包后会返回一个ACK确认包,服务端随即进入CLOSE-WAIT状态,客户端接受到后进入FIN-WAIT-2状态

    注意:此时此时TCP链接并没有完全断开,只断开了客户端到服务端的传输通道。

  3. 第三次挥手:服务端到客户端的数据传输完毕后,服务端会主动向客户端发送一个FIN包,表示服务端的数据传输完毕要关闭通道,服务端随机进入LAST-ACK状态

  4. 第四次挥手:客户端接受到FIN包后,会发送一个ACK确认包,随机客户端进入TIME-WAIT状态

    并且等待2MSL的时间(数据在网络中传输一个来回的最大时间),2MSL时间内没有再收到任何服务端传过来的消息后客户端即进入关闭状态

TIME-WAIT状态的理解

因为网络传输数据是不可靠的,客户端不确定最后的ACK包一定能传输到服务端,如果ACK包丢了,服务端就不知道客户端已经收到了它请求关闭的FIN包,服务端会重发FIN包,所以客户端在发送ACK包后会等待2MSL的时间,如果没有再收到了FIN包了,客户端就认为ACK包是发送成功了的,才会进入关闭状态

HTTP和HTTPS

HTTP和HTTPS的区别

HTTP全称超文本传输协议,用于浏览器和服务器之间传递消息,HTTP是以明文发送内容(被拦截后信息不安全)。而HTTPS是在HTTP的基础上加入了SSL协议,SSL协议依靠证书来验证服务器身份,并用于传输信息时对信息加密。

HTTPS的主要作用就是保证了信息传输的安全性和网站的真实可靠。

区别HTTPHTTPS
协议运行在TCP之上,明文传输,客户端与服务端无法验证对方身份HTTP+SSL协议,SSL运行在TCP之上
端口80443
资源消耗较少由于传输数据时需要对数据加解密,消耗资源较多
开销不需要证书需要向认证机构购买证书
加密机制非对称加密+对称加密
安全性由于加密机制,安全性强

HTTPS如何加密

Https传输的数据都是经过加密的数据,数据加密方式采用的对称加密

对称加密

加密和解密使用相同的密钥,加解密性能要比非对称加密高,相对的安全级别要低一些,一般用来传输数据。

非对称加密

加密和解密使用不同的密钥,公钥只能对数据进行加密,私钥对数据解密。安全级别比对称加密要高,但加解密的性能比较低,不适合用来传输大量的数据。

HTTPS的加密流程

  • 客户端向服务端发送请求(客户端支持的协议)
  • 服务端向客户端返回自己的SSL证书(证书中包括公钥),以及选择加密协议
  • 客户端的SSL层对服务端返回的证书进行校验(是否过期等)
  • 客户端使用服务端的公钥对对称加密的密钥进行加密发送给服务端
  • 服务端根据自己私钥对数据解密获取到真正使用的密钥
  • 后续将使用对称加密来传输数据

HTTP状态码

状态码主要原因
1xx请求正在处理
2xx请求正常处理完毕
3xx重定向
4xx服务器无法处理请求
5xx服务器处理请求出错

常见状态码

  • 200:请求正常处理结束

  • 301:重定向

    浏览器会抓取新网址的内容并且将网址更改

  • 302:临时重定向

    浏览器会抓取新网址的内容但不会替换网址(会造成URL劫持)

  • 400:客户端请求信息错误(格式错误)

  • 401:客户端请求未经过授权

  • 403:服务器拒绝处理请求

  • 404:资源未找到

  • 500:服务器内部发生错误

  • 501:服务器不支持请求所需要的功能

  • 503:服务器正在维护

Get和Post请求的区别

  • Get请求没有请求体,get请求的参数都拼接在url上
  • post的数据都在放在请求体中
  • get请求因为信息直接拼接在url上,相比post来说不安全
  • get请求能携带的数据有限,超过部分的数据不会被服务器接收
  • get请求携带的参数会被保留在浏览器中,post请求参数不会主动被保留(可以设置)
  • Post请求可以传输的数据类型有很多,get请求能传输ASCII字符

Get请求和Post请求在发送数据时的区别

Get会产生一个TCP数据包,而Post会产生两个

Get会将请求头和数据一次发送过去而Post会先发送请求头的数据包然后再发送数据(有些浏览器还是一次性发送)

Session和Cookie

两者都是常用的会话跟踪技术。Cookie是将信息存放到客户端,Session是将信息放到服务端。HTTP协议本身是无状态的协议。理论上一次请求结束后,HTTP链接断开,下一次再请求时服务端是没有办法区分用户的。Session和Cookie就是为了解决这类问题。

Cookie是将信息保存到客户端,每次请求时服务端根据客户端的Cookie信息来进行认证,其缺点是不安全,信息比较容易泄漏。

Session是将信息保存到服务端的一种技术,服务端将用户信息统一存放再Session中,每次根据请求的标识来获取对应用户的信息。Session的缺点是大量的用户信息会给服务端带来较大压力。

Session一般是和Cookie混合使用的,用户信息存放在Session中并且为每个用户分配一个sessionid放到cookie中。服务端每次通过sessionid来获取用户信息。

Session的生命周期

Session是保存在内存中的,所以Session中的信息不宜过多,Session有一个默认过期时间,如果在过期时间内没有被访问,session将会失效。如果访问则会刷新过期时间。

Cookie的生命周期

Cookie的存活时间也是可以设置的,浏览器默认只会对存活时间为正数的Cookie进行持久化,被持久化的Cookie,浏览器即时关闭再次启动时也能正常获取。

区别CookieSession
存放位置浏览器服务器
空间存放在客户端,对服务端没有压力大量的Session对服务端压力比较大
安全相对不安全比较安全
存储容量一个Cookie大小不超过4KB,并且大部分浏览器限制单个站点只能存放20个CookieSession理论上是没有限制的(取决于服务器的容量限制)

Http请求报文

HTTP请求报文由三个部分组成:请求行、请求头、请求体

请求行:请求方式-URL-HTTP版本

请求头:一些键值对(ContentType等)

**请求体:**传输的数据

HTTP各个版本

HTTPO1.0

只支持GET、POST、HEAD请求,但是HTTP1.0没有keepalive,即每次请求和响应后都会断开TCP链接,下一次重新链接

HTTP1.1

加入KeepAlive参数,使得多个请求可以复用一个TCP链接

HTTP2

  1. 头部数据压缩(客户端和服务端维护一张头信息的表,发送时只需要发送索引来提高效率)

  2. 用二进制流传输数据替代纯文本形式的报文

  3. 一个TCP链接中并发发送请求(缺点:一个请求数据丢包后会导致后续请求阻塞)

  4. 服务器主动像客户端发送信息(TCP本身是全双工的)

HTTP3

HTTP/3 原理实战 - 知乎 (zhihu.com)

为了解决HTTP2中对头阻塞的问题,HTTP3采用UDP来实现,降低了建立链接次数和

输入URL到显示网页

DNS解析

域名解析使用DNS协议来传输数据。DNS协议是应用层协议,基于传输层UDP或TCP协议来实现

TCP和UDP使用场景

DNS在客户端向DNS服务器查询域名时使用UDP协议(因为一次查询数据量比较小,且不用进行三次握手提高效率)

DNS域名服务器之间会进行数据同步,此时使用TCP协议(因为同步的数据量较大)

主要流程

  1. 浏览器检查本地缓存是否有该URL,有则返回
  2. 操作系统是否保存该URL解析,有则返回
  3. 访问本地域名服务器,有则返回
  4. 本地域名服务器请求根域名服务器得到顶级域名服务器地址,再请求顶级域名服务器进行解析

TCP三次握手建立链接

进行TCP三次握手

  • 客户端主动向服务端发起SYN请求,并携带客户端随机生成的序列号X
  • 服务端收到请求后,对请求进行响应,并携带x+1、服务端随机生成的序列号Y
  • 客户端收到响应后,携带Y+1进行响应

HTTP 请求

发送HTTP请求

服务器处理请求并返回HTTP报文

服务端收到请求后,进行响应并返回报文

TCP四次挥手断开链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shenyang1026

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值