个人计算机网络面试八股

78 阅读6分钟

计算机网络

TCP、UDP、IP协议分别属于什么层?

OSI七层模型?
    TCP/IP四层模型
        各层协议有哪些
            HTTP、FTP
            TCP、UDP
            IP、ICMP
            Ethernet、ARP、RARP
        各层数据叫什么名字
            报文
            报文段(TCP), 用户数据报(UDP)
            用户数据报/分组
            帧
            比特
    为什么要分层
        1. 各层之间相互独立,不需要关心下层具体实现,调用下层接口,为上层提供服务
        2. 灵活性和可替换性,每层可以选择合适的协议
        3. 易于设计和实现,大问题转换为一个个小问题

网络中传输层有什么作用?它有哪些协议?

主机间不同进程的通信, TCP、UDP

请简述HTTP1.0、1.1、2.0的主要区别?

0.9: 网页文字内容呈现和排版, 只支持GET

1.0: 支持多媒体对象(图片),支持其他方法, 连接复用

1.1: 管道化+队头阻塞, 断点下载, Chunk机制

2.0: 二进制分帧,头部压缩, 服务端推送

HTTP2.0中的二进制分帧是否解决了队头阻塞问题
    不完全能,QUIC协议
HTTP2.0是否替换了HTTP1.1

HTTP头Connection: keep-alive是什么意思?解决了什么问题?

不关闭连接,进行连接复用。HTTP1.0中选择开启,在HTTP1.1中默认开启

请简述常见HTTP状态码及含义

请求报文结构
    请求方法、请求地址、HTTP版本
    请求头
    请求内容
响应报文结构
    HTTP版本、状态码、状态解释
    响应头
    响应内容

200~299:成功

300~399:重定向

400~499:客户端错误

500~599:服务端错误

请描述常见的HTTP请求方法与使用场景

GET、PUT、POST、DELETE

常见状态码404、503、504分别表示什么意思?怎么定位?

404:服务器无法找到所请求的URL(客户端错误)

503:服务器无法为该请求提供服务(服务端错误)

504:网关或者代理服务器无法从远端服务器后去请求(服务端错误)

请简述对称加密、非对称加密算法的异同点

对称加密
    A加密秘钥 == B 解密秘钥
非对称加密
    A加密秘钥 != B 解密秘钥
    RSA: 原理是大整数分解为两个质数困难问题
    ECC: 原理是椭圆曲线加密算法,在比特币中应用

MD5是加密算法吗?为什么?什么是加盐处理?

不是加密算法,是散列算法,因为单向,无法反向解密

不安全,需要加盐,hash(原文+自定义加盐字符)

md5与sha256的区别
    md5: 128位,计算速度快,但是存在碰撞漏洞,安全性低
    sha256: 256位,提高了抗碰撞性,安全,区块链中应用
spring security中的BCrypt算法
    随机盐

请简述HTTPS加密认证的过程

  • 443端口TCP连接

  • SSL安全参数握手

  • 客户端发送数据

  • 服务端发送数据

      SSL安全参数握手过程
    
          客户端发送随机数1+加密算法
    
          服务端发送随机数2+确认加密算法+数字证书(包含服务端公钥)
    
          客户端确认数字证书
          客户端生成随机数3
    
          客户端使用服务端公钥发送加密后的随机数3
    
          服务端解密得到随机数3
          客户端与服务端均利用随机数123与加密算法生成对称秘钥
    
          后续进行对称秘钥的加密与解密
    
      三个随机数的作用
          TODO:不知道
    

请介绍HTTP、HTTPS协议的区别?

安全性、复杂度、效率、端口

请简述TLS技术的工作原理?

介于传输层与应用层之间,将应用层数据加密后交给TCP进行传输

DNS是什么,它解决了什么问题?

存储域名和IP地址的映射关系的分布式数据库,能够使人更方便地访问互联网

请简述DNS查询服务器的基本流程

  • 浏览器缓存
  • 本地缓存
  • hosts文件
  • 本地域名服务器(服务商)
  • 根域名服务器
  • 顶级域名服务器
  • 权威域名服务器

主机到本地DNS服务器采用递归查询,本地DNS服务器向其他DNS服务器采用迭代查询

什么是DNS劫持、DNS欺骗,是什么原理?

DNS劫持:本地DNS服务器被劫持。可以使用比较权威的DNS服务器减少攻击概率。

DNS欺骗:冒充域名服务器。

TCP协议与UDP协议有什么区别?

头部大、可靠、有连接、速度慢

TCP协议头部
    源端口、目的端口
    序号、确认号
    控制位
    校验和、窗口
UDP协议头部
    源端口、目的端口

请简述TCP协议三次握手的过程

  • 客户端:SYN=1, seq=x
  • 服务器:SYN=1, ACK=1, seq=y, ack=x+1
  • 客户端:ACK=1, seq=x+1, ack=y+1

SYN表示建立连接

ACK表示启用确认号

三次握手可以简化为两次握手吗?为什么?

客户端与服务端都能知道自己以及对方的发送和接收能力

请简述TCP协议四次挥手的过程

  • 客户端:FIN=1, seq=u
  • 服务器:ACK=1, seq=v, ack=u+1
  • 服务器:FIN=1, ACK=1, seq=w, ack=u+1
  • 客户端::ACK=1, seq=u+1, ack=w+1

FIN表示断开连接

ACK表示启用确认号

请简述什么是TIME_WAIT状态

第四次挥手后,主动中断连接方所处的状态,这个状态下,主动方尚未完全关闭TCP连接,端口不可复用。该状态一般持续4分钟。 - 确保连接正常释放。如果该报文没有到达被动方,被动房会重新进行第三次挥手。 - 确保当前连接的所有报文都已经过期了。

请简述TCP协议是如何保证可靠传输的

停止等待协议+滑动窗口+累计确认

窗口大小参数在TCP头部

请介绍常见的TCP拥塞避免算法

网络拥塞:网络资源(带宽、缓存、处理机等)需求过大影响网络性能

拥塞避免:防止过多数据注入到网络,避免网络中的路由器或者链路过载

拥塞窗口(也是来源于头部)、门限值、RTT

  • 慢开始(开始或者超时时,指数增大)

  • 拥塞避免(线性增大)

  • 快重传(报文丢失时)

  • 快恢复(直接进行拥塞避免而不是慢开始)

      为什么叫快重传?
          对丢失报文进行3次重复确认
          不是捎带确认(此次数据+之前数据的确认),而是立即确认(直接进行确认)
      门限值变化:
          门限值=拥塞窗口/2
    

什么是TCP粘包,如何解决TCP粘包的问题

TCP协议数据传输基于字节流,不存在消息、数据包,TCP粘包是应用层开发者错误设计导致的

应用层协议需要自行设计消息边界(基于长度、基于特殊字符拆分),以正确分离消息,避免消息粘连

请简述什么是SYN flood攻击

攻击方大量发送第一次握手(假IP)的报文,忽略第二次握手的报文

被攻击方多个TCP连接处于同步以接收阶段,耗费大量资源,最终资源耗尽,拒绝服务