计算机网络面试资料总结

计算机网络

持续更新,或有缺陷

Get 和 Post 的区别

  1. Get 把参数包含在 URL,以?分割URL和传输数据,参数之间通过&相连,Post 通过request body传递参数。
  2. Get 在浏览器回退是无影响的,Post 会再次提交请求。
  3. Get 传递数据有限制,一般是 2-4k,Post 请求数据则没有限制。
  4. Get 请求只用 URL 编码(每个键值对由&;分开,来自表单的键值对由=分开),Post 可以支持多种编码。
  5. Get方式提交会带来安全问题

HTTP 和 HTTPs 的区别

  1. HTTP 通过明文在网络中传输,HTTPs 则是通过SSL\ TLS 加密后传输(非对称加密)。
  2. HTTP 协议的端口是80,HTTPs 协议的端口是443.
  3. HTTPs 在经过三次握手的过程后,还需要经过 SSL 的 handshake.
  4. HTTPs 需要服务端申请证书,浏览器安装对应的证书。
  5. HTTPs通过非对称密钥机制来保证双方身份真实。

SSL(安全套接层)协议安全机制

  1. 传输数据机密性

    在发送数据前,使用加密算法和加密密钥对数据进行加密,然后再发送给对方。

    加密算法包括对称加密和非对称加密:

    对称加密:加密和解密使用同样的密钥(DES, AES):

    DES算法步骤:

    1. 输入64位
    2. 初始置换 I P IP IP
    3. 16轮迭代
    4. 交换置换W
    5. 逆置换 I P − 1 IP^{-1} IP1
    6. 输出64位

    非对称加密:加密和解密使用不同的密钥,一份是公开的公钥,一份是用户秘密保存的密钥(RSA)。

  2. 身份验证机制

    通过私钥加密后的数据仅仅能够通过特定的公钥来解密,因此具有数字签名的功能,能够用来进行身份验证,但是也会受到中间者攻击(MITM)。

  3. 消息完整性认证

    为避免网络中的数据被篡改,SSL使用基于MD5或SHA的MAC算法来保证数据的完整性。

  4. 利用非对称密钥算法保证密钥本身的安全。

  5. 利用PKI保证公钥的真实性。

  6. SSL大致过程:

    1. 随机数、加密算法、协议版本号
    2. 随机数、确认加密算法、数字证书
    3. 随机数、确认有效性、数字证书的公钥加密
    4. 私钥解密
    5. 根据加密算法和三个随机数,生成对话密钥
  7. MD5算法流程:

    1. 数据填充:满足 K + P ≡ 448 ( m o d   512 ) K+P \equiv 448 (mod \ 512) K+P448mod 512
    2. 信息分块:将填充后的结果 N N N个32 bits的信息块
    3. 缓冲区初始化:初始化128-bit的MD缓冲区,表示成4个32-bit寄存器
    4. 进行循环压缩
    5. 拼接得到结果

Cookie

HTTP服务器是无状态的,而Web服务器通常希望能够识别用户,可能希望限制用户的访问次数,或者将内容与用户的身份联系在一起,cookie技术通常有4个组件:

  1. HTTP响应报文中的一个cookie首部行
  2. HTTP请求报文中的一个cookie首部行
  3. 在用户端保留一个cookie文件,并由浏览器进行管理
  4. 位于Web站点的一个后端服务器

用户首次访问一个站点时,服务器会为用户在后端数据库中创建一个标识符,并在HTTP响应报文中设置首部行Set-Cookie的值为该标识符,用户收到这个相应报文以后就会将该标识符保存在浏览器的Cookie文件中,在后续的访问中,当用户访问该服务器时,HTTP请求报文中就会带上这个标识符,服务器在接受该报文后,能够根据该标识符在后端数据库中获取到与该标识符相应的信息。


Session

Session用于保留用户的会话记录,当用户访问服务器时,服务器就会生成一个sessionId,并保留在用户的cookie中,当用户再次访问这个页面时,就会带上sessionId,服务器会根据sessionId定位到相应的session

当浏览器禁用cookie时,使用URL重写来实现session,将session的Id信息重写到URL中

Session是服务端保持的一个数据结构,用于追踪用户的状态,可以保存在集群、数据库、文件中。

Cookie是客户端保存用户信息的一种机制,用于记录用户的一些信息,也是实现Session的一种方式。


Web缓存

Web缓存也叫代理服务器,能够代表初始Web服务器来完成HTTP请求,能够大大减少客户请求的响应时间,减少一个机构的接入链路到因特网的通信量。

但是有一个缺点,就是保存在Web缓存上的数据可能是陈旧的。可以通过条件GET请求来证明信息是最新的,方法是在HTTP请求报文中,使用GET方法,并且在首部行中加入If-Modified-Since的字段


CC攻击

CC攻击主要是针对网页,模拟多个用户不停地访问页面,从而使资源耗尽。


DDos攻击

通过联合多台计算机对一个目标进行攻击,通过大量合法的请求占用资源,使服务器瘫痪。


XSS 攻击(跨站脚本攻击)

  1. XSS是一种Web页面中的安全漏洞,它允许恶意用户将代码植入到提供给其他用户的页面中。服务器如果没有过滤或者转义掉这些脚本,作为内容发布到这些页面上,其他用户访问时就会运行这些脚本。
  2. Web页面渲染的所有内容和所有数据必须要来自服务端。
  3. 尽量不要使用eval()等可执行字符串方法。
  4. 后端在入库前应选择不信任任何前端数据,将所有字段统一进行转义。
  5. 前端在渲染页面的DOM时,应该不信任任何后端的数据,统一进行转义。
  6. 要指定字符串集

CSRF攻击(跨站请求伪造攻击)

  1. 攻击者盗用了自己的身份,以我的名义发送恶意请求。
  2. CSRF攻击的条件:
    1. 登陆受信任的网站A,并在本地生成cookie
    2. 在不登出A的情况下,访问危险网站B
  3. CSRF防御方法:
    1. 在表单里增加哈希值,以确认这是用户发送的请求,在服务端进行认证
    2. 使用验证码
    3. One-Time-Token

IPSec 机制

IPSec通过使用加密安全服务,将数据在网络层上先加密再传输,即使被中间这截获,攻击者由于缺乏解密数据包所必要的密钥而无法获得其中的内容。


TCP 可靠传输机制

  1. TCP使用校验和、确认、序列号、定时器来实现可靠数据传输。

    1. 校验和用于确定从源到目的地,数据的比特是否放生了变化(使用CRC编码)。
    2. TCP采用累计确认的方式,表明已经接受到序列号n及之前的所有数据包。
    3. 通过检测冗余,可能知道数据包是否是一次重传。
    4. 定时器,当发送数据包时,就会启动一个该数据包的定时器,如果在此期间没有收到接收方的ACK,就会启动重传。
  2. TCP模型包括面向连接的服务(需要建立三次握手)和可靠数据传输服务(通信程序能够依靠TCP,将数据无差错,按顺序地传送给对方)。

  3. TCP对数据分节进行编号,并使用累计确认来确保数据的有序和非重复

  4. TCP使用流动窗口来实现流量控制,并使用动态改变窗口的大小来实现拥塞控制(慢启动、拥塞避免、快速恢复)

  5. 拥塞控制是防止过多的数据注入到网络中,使网络的链路和路由器不至于过载,是一个全局性的过程。

  6. 流量控制是一个端对端的传输问题,主要是抑制发送方的传输速率,使接收方来得及接受,当接收方的rwnd的值为0时,发送方便启动一个计时器,每个一段时间发送一个测试报文(定时发送探针数据)。

  7. 拥塞控制(Reno):慢启动、拥塞避免、快速恢复(慢启动和拥塞避免是强制部分)

    1. 慢启动:TCP发送的起始窗口为1个MSS,并且随指数增长,目的是试探网络中的拥塞程度,慢启动结束的三种方式:

      1. 出现超时指示时,cwnd的值设为1MSS,ssthresh设置为原来的 1 2 \frac{1}{2} 21,重新开启慢启动。
      2. 当cwnd超过ssthresh的值时,慢启动结束,进入拥塞避免状态。
      3. 当接收到三个冗余ACK时,执行快速重传,并进入快速恢复状态。
    2. 拥塞避免:按照线性规律增长,只要拥塞方判断出现拥塞,就把ssthresh设置为原来的 1 2 \frac{1}{2} 21,然后重新开始慢启动。

    3. 快速恢复:当发生三个冗余ACK的丢包事件时,将ssthresh设置为原来的 1 2 \frac{1}{2} 21,并且将cwnd的值设置为此时的ssthresh,然后进入拥塞避免状态。

    4. 由于接受方的窗口rwnd也是有大小限制的,因此发送方窗口的上限= m i n ( r w n d , c w n d ) min(rwnd,cwnd) min(rwnd,cwnd)

    计算机网络面试资料总结_第1张图片


TCP 三次握手

  1. 第一次握手(SYN = 1, Seq = X):客户端向服务端发送 TCP 的 SYN 标志为1,初始序列号 Seq = X 的包给服务端,指明想要连接的 TCP 端口,随后客户端进入 SYN_SEND 状态。
  2. 第二次握手(SYN = 1, ACK = 1, Seq = Y, ACKnum = X+1):服务端接收到客户端发送的包后,向服务端发送 TCP 的 SYN 标志为1,ACK 标志为 1,序列号 Seq = Y, ACKnum = X+1 的包给客户端,随后服务端进入 SYN_RCVD 状态。
  3. 第三次握手(ACK = 1, ACKnum = Y+1):客户端接收到服务端的包后,向服务端发送 TCP 的 ACK 标志为1,确认号 ACKnum = Y+1 的包给服务端,随后客户端进入 ESTABLISHED 状态,当服务端接收到这个包的信息后,也进入 ESTABLISHED 状态,建立连接。
  4. TCP不使用两次握手的原因是:
    1. 如果使用的是两次握手,那么如果客户端发送的一个请求因为某种原因而失效,而服务端接收到这个失效的请求,由于是两次握手机制,所以这个时候就已经建立了连接,造成了资源的浪费。
    2. 容易收到SYN攻击。

TCP 四次挥手

  1. 第一次挥手(FIN = 1, Seq = X):客户端向服务端发送 TCP 的 FIN 标志为1,初始序列号 Seq = X 的包给服务端,表明自己已经没有数据可以发送,但是仍然可以接收数据,随后进入FIN_WAIT_1状态。
  2. 第二次挥手(ACK = 1, ACKnum = X+1): 服务端接收到客户端发送的信息后,向客户端发送 TCP 的 ACK 标志为1,确认号ACKnum = X+1 的包给服务端,表明接收到客户端关闭连接的请求,但是仍然没有准备好关闭连接,随后服务器进入CLOSE_WAIT状态,客户端接收到这个包以后,进入FIN_WAIT_2状态。
  3. 第三次挥手(FIN = 1, Seq = Y): 服务端向客户端发送 TCP 的 FIN标志为1,序列号Seq为Y的包给服务端,表明服务端已经准备好断开连接,随后服务端进入LAST_WAIT状态。
  4. 第四次挥手(ACK = 1, ACKnum = Y+1): 客户端接收到服务端发来的包后,确认关闭连接,并向服务端发送ACK标志为1,ACKnum标志为Y+1的包给服务端,进入TIME_WAIT状态,表示仍可接收服务端的重传,服务端接收到客户端的包以后,进入CLOSE状态,当客户端等待一段时间没有接收到服务端的数据包后(一般是两个MSL,即两个最大生命周期),也进入CLOSE状态。

计算机网络

  1. DHCP:动态主机配置协议
    1. DHCP服务器的发现
    2. DHCP服务器提供
    3. DHCP请求
    4. DHCP ACK
  2. ICMP:被用于主机和路由器用于沟通网络层的信息,主要用于差错报告。
  3. DNS:域名系统,是万维网中IP地址和域名之间相互映射的分布式数据库。

常见状态码

  1. 200 OK 客户请求成功
  2. 301 Moved Permanently 请求永久重定向
  3. 302 Moved Temporarily 请求临时重定向
  4. 304 Not Modified 文件未修改,可以直接使用缓存文件
  5. 400 Bad Request 由于客户端请求有语法错误,不能被服务器所理解
  6. 401 Unauthorized 请求未经授权
  7. 403 Forbidden 服务器收到请求,但是拒绝提供服务
  8. 404 Not Found 请求的资源不存在
  9. 500 Internal Server Error 服务端发生不可预期的错误,导致无法完成客户端的请求
  10. 503 Service Unavailable 服务器当前无法完成客户端的请求,但是一段时间后,服务器可能恢复正常
  11. 505 HTTP Version Not Supported:服务器不支持请求报文使用的HTTP协议版本

HTTP

  1. HTTP请求报文字段:
    1. 请求行
      1. 方法字段(包括GET, POST, HEAD, PUT, DELETE)
        1. HEAD方法:用于调试跟踪
        2. PUT方法:允许用户上传对象到指定的Web服务器的指定路径。
        3. DELETE:允许用户或程序方法删除Web服务器上的对象。
      2. URL字段
      3. HTTP版本字段(HTTP1.1支持持续连接,HTTP1.0支持非持久连接)
    2. 首部行
      1. HOST:指明对象所在的主机(代理高速缓冲所要求的)
      2. Connection:要求服务器在发送完请求对象后是否保持连接
      3. User-agent:指明代理服务器,即所使用的浏览器
      4. Accept-language:用于希望得到的该对象的语言版本
    3. 实体体(Entity body)
  2. HTTP响应报文字段:
    1. 初始状态行
      1. 协议版本
      2. 状态码
      3. 相应状态信息
    2. 首部行
      1. Connection:告诉用户数据发送完后是否关闭连接
      2. Date:指示服务器产生并发送响应报文的时间和日期
      3. Server:指示该报文产生服务器类型,类似于User-agent
      4. Last-Modified:对象创建或者最后修该的日期和时间
      5. Content-Length:被发送对象中的字节数
      6. Content-Type:指示实体中的对象
    3. 实体体

输入URL的网络连接过程

每个URL由两个部分组成,存放对象的服务器主机名和对象的路径名。

  1. 便携机的连接:

    1. 操作系统首先生成一个DHCP请求报文至DHCP服务器,请求获得一个IP地址。
    2. 包含DHCP请求报文的IP数据报被放入以太网帧中,广播至所有设备。
    3. DHCP服务器接收到数据帧,并获取到DHCP请求报文,并返回包含分配的IP地址和DHCP确认报文。
    4. 用户获得IP地址,并且记录下DNS服务器的IP地址。
  2. 输入网页URL:(www.google.com)

    1. DNS解析

      递归查询:本地DNS服务器 ⇒ \Rightarrow 根域名服务器 ⇒ \Rightarrow .com顶级域名服务器 ⇒ \Rightarrow google.com权威DNS服务器

      . ⇒ \Rightarrow .com ⇒ \Rightarrow google.com ⇒ \Rightarrow www.google.com

    2. TCP连接

    3. 发送HTTP请求

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

    5. 浏览器解析渲染页面

    6. 连接结束


你可能感兴趣的:(面试,计算机网络)