计算机网络
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连接处于同步以接收阶段,耗费大量资源,最终资源耗尽,拒绝服务