IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 计算机网络面经 -> 正文阅读

[网络协议]计算机网络面经

文章目录

#1、计算机网络的各层作用

计算机网络体系可以分为三种,OSI七层模型,IP/TCP四层模型和五层模型

  • OSI七层模型:物理层、数据链路层、网络层、运输层、会话层、表示层、应用层

  • TCP/IP五层模型:物理层、数据链路层、网络层、运输层、应用层

  • 应用层:为应用程序提供交互服务。应用层的协议有很多,比如域名系统DNS,HTTP协议,SMTP协议

  • 运输层:主要为两个主机之间的通信提供数据传输的服务。主要有TCP和UDP两种协议

  • 网络层:提供合适的路由和交换节点,确保数据即时传送,有IP协议

  • 数据链路层:将网络层传送来的IP数据包组装成帧,在相邻的链路上传输

  • 物理层:实现相邻节点间比特流的透明传输,尽可能屏蔽传输介质和通信手段的差异。
    在这里插入图片描述

2、详细介绍一个TCP的三次握手机制
(1)第一次握手:客服端请求建立连接,向服务端发送一个同步报文(SYN),同时选择一个随机数seq=x作为初始序列号,并进入SYN_SENT状态,等待服务器确认。
(2)第二次握手:服务端收到了连接请求报文后,如果同意建立请求,就向客户端发送一个同步确认报文(SYN=1,ACK=1),确认号为ack=x+1,同时选择一个随机数seq=y作为初始序列号,此时服务器进入SYN_RECV状态。
(3)第三次握手:客户端收到服务端确认后,向服务端发送一个确认报文(ACK=1),确认号ack=y+1,序列号为seq=x+1,客户端和服务端进入建立连接状态,完成三次握手。

3、为什么是三次握手,而不是两次
(1)防止已经过期的连接请求报文突然到达服务端,因而产生错误和资源浪费
(2)三次握手才能让双方确认自己和对方的发送和接收能力正常
(3)三次握手才能告诉对方自己的初始序列号,并确认收到对方的初始序列号。

4、什么是SYM洪泛攻击?如何防范
SYN洪泛攻击属于DOS攻击的一种,它利用TCP协议的缺陷,发送大量的半连接请求,耗费CPU和内存资源。
原理:

  • 在服务器发送SYN/ACK包之后,收到客户端ACK包之前的TCP连接状态称为半连接,如果未接受到客户端的ACK包,就会不断的重复发送请求直到成功。
  • SYN攻击者在短时间内伪造大量不存在的IP地址,向服务器不断的发送SYN包,服务器回复确认包,并等待客户确认,但是源地址是不存在的,所以服务器需要不断的发送直到超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN包被丢弃,目标系统运行缓慢,严重引起网络拥塞和瘫痪。
    优化方式
  • 缩短SYN Timeout时间
  • 记录IP,若连续收到某个IP的重复SYN报文,从这个IP地址来的包都被丢弃。

在这里插入图片描述
5、详细说一下4次挥手过程
(1)第一次挥手:客户端发送一个FIN,用来关闭客户端和服务端之间的数据传送,客户端进入FIN_WAIT_1状态
(2)第二次挥手:服务端收到FIN之后,发送一个ACK给客户端,确认序号为收到序号+1,服务端进入CLOSE_WAIT状态,此时TCP处于半关闭状态,即客户端已经没有想要发送的数据了,但服务端若发送数据,客户端扔要接收。
(3)第三次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传输,服务端进入LAST_ACK最终确认状态
(4)客户端收到FIN后,进入了TIME_WAIT时间等待状态,经过2*MSL的时间后进入CLOSED状态,接着发送ACK给服务端,服务端接收到ACK之后立即进入CLOSED状态。

6、为什么挥手需要4次
因为服务端在收到客户端FIN数据包之后,服务端可能还有数据没有发完,不会立即关闭。
所以先发ACK,再发FIN

7、为什么释放要等待2MSL
MSL即报文最大生存时间,主要有2个原因
(1)确保ACK报文能够到达服务端,从而使服务端正常关闭连接
第四次挥手时,客户端第四次挥手的 ACK 报文不一定会到达服务端。服务端会超时重传 FIN/ACK 报文,此时如果客户端已经断开了连接,那么就无法响应服务端的二次请求,这样服务端迟迟收不到 FIN/ACK 报文的确认,就无法正常断开连接。
2个MSL是客户端ACK报文超时加服务端FIN报文超时,之后客户端再重传一次ACK报文,重新启动2MSL计时。
(2)保证所有的报文已经小时,防止已失效的请求报文出现在之后的连接上。

14、TCP和UDP的区别
(1)UDP在传送数据之前不用建立连接,远地主机在收到UDP报文之后不需要给出任何确认。UDP报文是不可靠的数据传输,但是传输效率快,一般用于即时通信。
(2)TCP是提供面向连接的服务。在传送数据之前必须建立连接,TCP不提供广播或多播服务。由于TCP提供面向连接的可靠数据传输的服务,对系统资源要求较多。TCP适用于文件传输、发送和接收邮件、远程登录场景。

15、简述TCP粘包现象
(1)发送方发送了多包的数据到达接收方时粘成了一包
(2)可能是发送方将多次间隔较小、数据量较小的数据,合并成一个大数据块,然后进行封包。
也可能是TCP接收数包到缓存的速度大于应用程序从缓存中获取包的速度,这样多个包被缓存,就可能连到一起。
(3)固定发送信息长度,或在两个信息之间加入分隔符。

15、TCP如何保证可靠性
TCP主要使用了校验和、序列号/确认应答、滑动窗口、拥塞控制、超时重传、流量控制等方法

  • 校验和:通过校验和的方法,接收端可以检测出来数据是否有差错和异常,如果有异常可以直接丢掉TCP段,重传。
  • 序列号/确认应答:TCP把传送的包编号,接收端收到包后并排序,然后把有序的数据传给应用层。接收端收到数据后,发送ack报文确认收到,ack报文中包含带有对应的确认序列号,告诉发送方,接收到哪些数据,下次数据从哪里发送。
  • 超时重传:是指发送数据到接收到数据的时间,如果超过这个时间就认为是丢包了,就重新传送。最大超时时间是动态计算的。
  • 拥塞控制:当网络拥塞时,减少发送的数据。
  • 流量控制:TCP连接的双方都有一个固定大小的缓冲池,TCP接收端只允许发送端发送接收端缓冲池可以接纳的数据,当接收端来不及处理发送端发送的数据时,就会提示发送方降低发送的速率,防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议(TCP利用滑动窗口实现流量控制)
  • ARQ协议:每发送完一个分组,就等待对方确认后,继续发送下一个分组。

16、详细讲一下拥塞控制
TCP一共使用了4种算法来实现拥塞控制

  • 慢开始(slow-start):不要一开始就发送大量的数据,而是由小到达增加拥塞窗口的大小。1-2-4-8
  • 拥塞避免:拥塞避免算法可以让拥塞窗口缓慢增长,即每经过一个往返时间RTT,拥塞窗口cwnd加1,使拥塞窗口按线性缓慢增长。
  • 快速重传:可以剔除一些不必要的拥塞报文,提高吞吐量。比如接收方在收到一个失序的报文段后,就会立刻发出重复确认,而不要等到自己发送数据时确认。发送方只要一连收到3个重复的确认就应当立即重传对方尚未收到的报文段,而不必等到超时重传。
  • 快速恢复:当发送方连续收到3个重复确认时,就把ssthresh减半(主要为了避免拥塞控制),然后执行拥塞避免算法。

17、简述TCP协议的滑动窗口
滑动窗口是传输层用来控制流量的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的速度,防止发送方发送速度过快导致自己被淹没。

17、用户输入URL到显示页面的整个过程

  • DNS域名解析:浏览器查询DNS,获取域名对应的IP地址
  • TCP连接:浏览器获得域名对应的IP地址后,浏览器向服务器请求建立连接,发起三次握手
  • 发送HTTP请求:TCP连接建立起来后,浏览器向服务器发送HTTP请求
  • 服务器处理请求并返回HTTP报文:服务器收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理的结果和相应的视图传给浏览器。
  • 浏览器解析渲染页面:浏览器解析并渲染视图,若遇到js.css文件及图片静态资源,就重复上诉步骤向服务器请求这些资源。浏览器根据其请求到的资源来渲染页面,最终向用户呈现一个完整的页面。
  • TCP断开连接:

24、DNS寻址
先查找浏览器缓存,如果没命中,查找系统缓存,即本机的host文件。如果没命中,查询路由器缓存,如果没命中,请求本地域名服务器解析域名,如果没命中,就去根服务器进行查询。没有命中就返回顶级域名服务器IP给本地DNS服务器。本地DNS服务器请求顶级域名服务器进行解析,没有命中就返回主域名服务器给本地DNS服务器。本地DNS服务器请求主域名服务器解析域名,将结果返回给本地域名服务器。本地域名服务器缓存结果并反馈给客户端。

17、HTTP1.0和1.1的区别

  • 缓存处理:在HTTP1.0中主要使用了header里的IMS(if-Modified-Since),Expires来作为缓存判断的标准,HTTP1.1加入了更多的缓存控制策略,如Entity tag,If-Unmodified-Since,If-Match等更多可供选择的缓存头来控制缓存策略
  • 带宽优化及网络连接的使用:HTTP1.0中存在浪费带宽的现象,比如只要某个对象的一部分,服务器却把整个对象发送过来,并且不支持断点续传的功能。HTTP1.1则在请求头中加入了range头域,它允许只请求资源的某个部分,返回码是206,这样方便开发者自由的选择以便充分利用带宽和连接。
  • 错误通知的管理:在HTTP中新增了24个错误状态响应码,如409表示请求的资源与当前资源的状态发生冲突。
  • 长连接:HTTP1.1默认开启长连接,在一个TCP连接上可以处理多个HTTP请求和响应,减少了建立和关闭的消耗和延迟,在http1.1中默认开启Connection:keep alive,一定请求http1.0每次都要建立连接的缺点。

18、HTTP2.0和1.X的区别
(1)新的二进制格式:1.X是基于文本的,而2.0的协议解析是采用二进制格式。
(2)多路复用,即共享连接,每一个request都是用作连接共享机制的,一个连接上有多个request。

18、说明一下http和HTTPS的区别
(1)http是明文传输,HTTPS是加密的安全传输
(2)http的连接很简单,没有状态。HTTPS是SSL加密的传输,身份认证的网络协议,相对http传输比较安全。
(3)连接的端口不一样,http是80,HTTPS是443
(4)HTTPS协议需要到ca申请证书,需要一定的经济成本。

19、HTTPS的优缺点
优点
(1)传输过程中使用密钥加密,安全性更高
(2)可以认证用户和服务器,确保数据发送到正确的用户和服务器
缺点
(1)握手阶段延时较高(还要加个SSL握手)
(2)HTTPS部署成本高,需要花钱买证书,加解密操作会占用CPU资源。

在这里插入图片描述
20、HTTPS的连接过程
(1)客户端发送请求https连接
(2)服务器返回加密公钥,通常是SSL证书
(3)客户端通过SSL证书解析出公钥,然后随机生成一个key,通过公钥加密这个key传给服务器(因为只有服务器的私钥才能读出这个key)
(4)服务器通过私钥读出这个key
(5)客户端通过这个key来加密数据
(6)服务器通过key来解密数据
简单来说SSL加密的方式就是通过一个密钥加密另一个密钥(key),然后再使用被j加密的密钥加密数据
SSL用到了 对称加密+非对称加密+CA证书

20、HTTP状态码
(1)1XX:接收的请求正在处理
(2)2XX:请求正常处理完毕
(3)3XX:重定向,要完成的请求必须进行更进一步的操作
(4)4XX:客户端错误,请求有错误或者请求无法实现
(5)5XX:服务器端错误,服务器未能实现合法请求。
常见状态码的详细说明
200 OK:客户端请求成功
206 partiial content:服务器正确处理部分get请求,实现断点续传或者同时分片下载,请求必须包含range请求头指示客户端希望得到的范围。
301 永久重定向:表示请求的资源被分配了新的URL,之后应使用新的url
302 临时重定向:表示请求的资源被分配了新的URL,希望本次访问使用新的URL
400 bad request: 客户端请求的语法有错误,不能被服务器所理解
403:服务器收到请求,但是拒绝提供服务
404:请求的资源不存在,输入了错误的URL
500:服务器发生了不可预期的错误
503:服务器当前不能处理客户端的请求,一段时间后可能恢复。

21、简述http短连接与长链接的区别
指的是http底层TCP的连接
(1)短连接:客户端与服务器每次进行一次http连接操作,就进行一次TCP连接,连接结束后关闭TCP连接
(2)长连接:当一个网页打开后,客户端与服务器用于传输http数据的TCP连接不会关闭,客户端再次访问的时候会继续使用这个连接。

22、简述http协议
http是超文本传输协议,它是基于TCP协议的应用层传输协议,即客户端与服务器端用于数据传输的一种规则。http是一种无状态的协议。

23、http请求报文和响应报文包括哪些内容
在这里插入图片描述

请求报文
客户端将一个请求报文发送给服务器,服务器根据请求报文中的信息进行处理,并将处理结果放在响应报文返回给客户端。
请求报文结构包含请求行,请求头部,空行和请求数据

  • 请求行包含了请求方法,URL、协议版本
  • 请求头部,用来说明服务器要使用的附加信息。包含了一些访问的域名、用户代理、cookie等信息
  • 空行:请求头部后的空行是必须的
  • 请求正文:就是http要请求的数据,get是空
    在这里插入图片描述

服务器响应消息
http响应也由4个部分组成,分别是:状态行,消息报头,空行,响应正文

  • 状态行:包括协议版本,状态码和回应短语
  • 消息报头:发送响应的时间,回应数据的格式等信息
  • 空行
  • 响应正文:就是响应的具体数据

25、简述cookie
http协议是无状态的,为了实现更复杂的逻辑,http1.1引入了cookie来保存状态信息。cookie是服务端产生的,然后发送给客户端保存。当客户端再次访问的时候,服务端通过cookie可以知道是哪个客户端,以此可以做个性化推送和免密码登录等。

26、简述session
session用于标记特定的客户端信息,存放在服务端的文件里。一般客户端带着cookie访问服务端,服务端可以从cookie里的session id从整个session中查找到服务器记录客户端的信息。

27、cookie和session的区别
(1)cookie存放在客户端的浏览器上,session存放在服务器上
(2)cookie不是很安全,如果注重安全性就要使用session
(3)session会在一定的时间内保存在服务器上,当访问增多会比较占用服务器的性能,如果要减轻服务器压力,就最好使用cookie
(4)单个cookie的大小限制是4K,所以不能存放太多东西

28、转发与重定向

转发是服务器行为,重定向是客户端行为
(1)转发是服务器直接向目标地址访问URL,将相应的内容读取之后发给浏览器。地址链URL不变。转发页面和转发到的页面可以共享request里面的数据。效率高,可用于用户登录之后把角色转发到相应的模块。
(2)重定向是利用服务器返回的状态码来实现的,如果服务器返回301,302,浏览器会重新请求资源,地址链URL会改变,跳转到其他网站,且不能共享数据。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-04 11:34:02  更:2021-08-04 11:35:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 17:27:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码