八股文骚套路之计算机网络
面试过程中偏向与应用,所以问的比较多的也就是应用层、运输层、网络层的协议,物理层和数据链路层的东西面试基本不会被问到,所以准备面试过程中这块就不用看了。
八股-网络协议
OSI七层模型
物理层 数据链路层 网络层 传输层 会话层 表示层 应用层
物理层 数据链路层 网络层 传输层 应用层
在搜索框输入www.baidu.com,发生了什么?
- 在浏览器中输入指定网页的 URL。
- 浏览器通过 DNS协议,获取域名对应的 IP 地址。
- 浏览器根据 IP 地址和端口号,向目标服务器发起一个 TCP 连接请求。
- TCP连接建立之后,浏览器在 TCP 连接上,向服务器发送一个 HTTP 请求报文,请求获取网页的内容。
- 服务器收到 HTTP 请求报文后,处理请求,并返回 HTTP 响应报文给浏览器。
- 浏览器收到 HTTP 响应报文后,解析响应体中的 HTML 代码,渲染网页的结构和样式,同时根据 HTML 中的其他资源的 URL(如图片、CSS、JS 等),再次发起 HTTP 请求,获取这些资源的内容,直到网页完全加载显示。
- 浏览器在不需要和服务器通信时,可以主动关闭 TCP 连接,或者等待服务器的关闭请求。
http 和 https 的区别
http
- 超文本传输协议
- 明文传输
- 基于请求和响应
- 无状态
- 应用层协议
- 端口80
https
- http + ssl/tls
- 具有加密性质的SSL加密传输协议
- 由http通信
- 利用ssl/tls建立信道
- 端口443
- 需要证书
详细介绍一下ssl/TLS
运行在TCP上,加密采用对称加密
什么是对称加密
通信双方共享唯一密钥K 加解密算法已知 相比非对称加密 代价小 但是安全性较低
http 请求报文
- 请求方法
- GET: 请求获取request——URL所标识的资源
- POST:在Request——URL所标识的资源后附加资源(向指定的资源提交要被处理的数据)
- HEAD:请求获取由Request——URL所标识的资源的响应消息报头
- PUT:请求服务器存储一个资源,由Request——URL作为其标识
- DELETE:请求服务器删除由Request——URL所标识的资源
- TRACE:请求服务器回送收到的请求信息(用于测试和诊断)
- CONNECT:保留
- OPTIONS:请求查询服务器性能
http 状态码
状态码是用于表示网页服务器HTTP响应状态的3位数字代码
1xx:请求被成功接收
2xx:请求被成功处理
3xx:重定向相关
4xx:客户端错误
5xx:服务器端错误
TCP 和 UDP 的区别
- 面向连接:传输数据之前是否要建立连接
- 可靠传输:收到报文之后是否需要确认,是否需要保证数据的不丢失和顺序到达
- 是否有状态:是否记录自己发送的消息被接受了等等
- 传输效率:
- 传输形式:tcp面向字节流,udp面向报文
- 首部开销:
- 广播或多播:tcp只支持点对点,udp支持一对一、一对多、多对一
tcp为什么可靠
- 确认和重传机制:建立连接时三次握手同步双方的“序列号 + 确认号 + 窗口大小信息”,是确认重传、流控的基础
- 数据排序:TCP有专门的序列号SN字段,可提供数据re-order
- 流量控制:滑动窗口和计时器的使用。TCP窗口中会指明双方能够发送接收的最大数据量,发送方通过维持一个发送滑动窗口来确保不会发生由于发送方报文发送太快接收方无法及时处理的问题。
- 拥塞控制:TCP的拥塞控制由4个核心算法组成:“慢启动” “拥塞避免” “快速重传 ” “快速恢复”
TCP流量控制
- TCP发送方维护一个拥塞窗口,可以随网络动态变化,发送窗口取拥塞窗口和接收方接受窗口中较小的
采用了4种算法:
1.慢开始:设置拥塞窗口一开始为1,每过一个传播轮次,窗口加倍
2.拥塞避免:到达阈值之后每次窗口+1
3.快重传和快恢复:接收方接受到一个错误的数据段会向发送方发送一个重复确认,收到3个重复确认之后,发送方立即重传丢失的数据段。
cookie 和 session 的区别
- cookie和session都是会话技术,cookie是运行在客户端,session是运行在服务器端
- cookie有安全隐患,通过拦截或本地文件找得到你的cookie后可以进行攻击
- session是保存在服务器端上会存在一段时间后消失,如果session过多会增加服务器的压力
IP 地址和 Mac 地址的区别,了解 ARP 地址解析协议并了解其工作原理
互联网中的每一个资源都有一个ip地址,而一切网络设备都有一个唯一mac地址 ,ip地址是一种不重复的定位方式
mac地址是永久的,而ip可能会随着网络的更换而变化
arp(address resolution protocol)地址解析协议。解决了ip地址转mac地址的问题
建立连接TCP三次握手和断开连接TCP四次挥手
三次握手
第一次握手
建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认。SYN:同步序列编号(客户端发送同步请求等待服务器确认)
第二次握手
服务器收到SYN包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态(服务器收到请求同意建立连接,告诉客户端自己同意)
第三次握手
客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ACK=K+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态(客户端告诉服务端自己知道你同意了于是开启了连接,)
为什么要三次握手?
主要就是用来确认自己和对方的接受和发送都正常
- 第一次握手:Client 什么都不能确认;Server 确认了对方发送正常,自己接收正常
- 第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:对方发送正常,自己接收正常
- 第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常
四次挥手
断开一个 TCP 连接则需要“四次挥手”,缺一不可:
第一次挥手:客户端发送一个 FIN(SEQ=x) 标志的数据包->服务端,用来关闭客户端到服务端的数据传送。然后客户端进入 FIN-WAIT-1 状态。
第二次挥手:服务端收到这个 FIN(SEQ=X) 标志的数据包,它发送一个 ACK (ACK=x+1)标志的数据包->客户端 。然后服务端进入 CLOSE-WAIT 状态,客户端进入 FIN-WAIT-2 状态。
第三次挥手:服务端发送一个 FIN (SEQ=y)标志的数据包->客户端,请求关闭连接,然后服务端进入 LAST-ACK 状态。
第四次挥手:客户端发送 ACK (ACK=y+1)标志的数据包->服务端,然后客户端进入TIME-WAIT状态,服务端在收到 ACK (ACK=y+1)标志的数据包后进入 CLOSE 状态。此时如果客户端等待 2MSL 后依然没有收到回复,就证明服务端已正常关闭,随后客户端也可以关闭连接了
第一次挥手:A 说“我没啥要说的了”
第二次挥手:B 回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话
第三次挥手:于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”
第四次挥手:A 回答“知道了”,这样通话才算结束。
DNS域名系统
DNS 要解决的是域名和 IP 地址的映射问题。
DNS域名服务器分为四种:本地、权威、顶级、根
DNS有两种查询解析方法:迭达和递归
常用的方法是从请求主机到本地 DNS 服务器的查询是递归的,其余的查询时迭代的。
UDP如何实现可靠传输
UDP实现可靠传输,其实是借鉴TCP可靠传输的策略
常见的可靠传输策略
- ACK机制
- 重传机制
- 序号机制
- 重排机制
- 窗口机制