计算机网络常见面试知识点整合

(写此文是为了自己参考加深自我印象,很多是用自己的话总结的,有错误感谢指出!仅供参考)

OSI模型有哪几层,并分别说说每层的作用

  • 应用层
    主要是在应用程序之间进行数据传输,如Http协议 DNS协议等
  • 表示层
    主要用于数据加密压缩等功能
  • 会话层
    主要用于会话的建立管理等工作
  • 运输层
    为进程提供数据传输服务,如TCP UDP协议。
  • 网络层
    为主机提供数据传输服务,网络层把运输层的数据封装为分组进行传输
  • 数据链路层
    在链路之间提供数据传输服务,主机之间存在很多链路,数据链路层把网络层传输下来的分组封装成帧。
  • 物理层
    考虑的是怎么在传输媒体上传输比特流,尽量屏蔽物理媒介的差异,使数据链路层感觉不到这些差异。确定与传输媒体之间的一些特性,比如机械特性,电气特性等。

五层网络模型

没有了会话层和表示层,把这些功能留给程序开发者处理

TCP/IP有哪几层

相当于数据链路和物理层合并为网络接口层

  • 应用层
  • 传输层
  • 网际层
  • 网络接口层

各层分别有哪些协议

简述TCP和UDP的区别

①TCP面向连接,也就是必须建立连接才能进行数据通信,UDP面向无连接,TCP是可靠传输,UDP是尽最大努力交付,不保证可靠传输。
②传输效率上,UDP速度要比TCP更高一些,UDP的实时性更强,所以我们常见的视频电话等一般是基于UDP协议。
③TCP有差错控制,拥塞控制,流量控制等功能。
④TCP传输是面向字节流,UDP传输是面向用户数据报
⑤TCP点对点传输,UDP可以一对一或一对多,多对多通信.
⑥对实时性要求较高用UDP,对网络通信质量要求较高使用TCP。

TCP三次握手过程及原因

序号 seq 用于对字节流编号 表示第一个字节的编号
确认号 ack 期望收到的下一个报文段的序号 只有当ACK=1时,确认号才有效
SYN(同步序列号) 用于建立连接的过程
FIN(finish标志) 用于释放连接
ACK 只有当ACK=1时,确认号才有效,当建立tcp连接后,所有传送报文都必须把ACK置为1

  • ①客户端发送SYN等于1的数据包给服务器,表示这是一个连接请求

  • ②服务器发送SYN等于1,并且ACK=1的数据包给客户端表示同意连接请求.发送连接确认报文

  • ③客户端收到报文后,发出ACK=1的确认报文。连接建立

为什么要三次握手呢?
为了防止客户端失效的连接请求打开服务器连接,如果客户端发送了请求,请求在网络中滞留,客户端将超时重新发起连接请求,而经过一段时间,超时的请求可能还会发送到服务器,如果没有三次握手,这时候服务器就会开启两个连接。

TCP四次挥手过程及原因

  • 客户端发送FIN=1的释放报文,
  • 服务器收到后发送ACK=1的确认报文,此时连接处于半关闭状态 ,只允许服务器段传送数据,客户端不能发送数据给服务器
  • 服务器发送完剩余的报文,不再需要连接,发送FIN=1的释放报文
  • 客户端收到,发送ACK=1的确认报文,等待两倍的MSL(即报文的最大存活时间)。

为什么要四次挥手才释放连接呢
因为当客户端发送释放报文后,服务器端可能仍有数据放松,是为了让服务器段传送完未发送的数据后,服务器端再发送释放报文。
为什么要等待2MSL再关闭连接呢
是为了确保客户端发送的确认报文顺利到达服务器,如果客户端发送的确认报文中途丢失,那么服务器端就会一直请求客户端,如果这时候客户端关闭了,那服务器端就会一直发送FIN=1的数据报文段
建立连接后,客户端出现

TCP客户端发生故障怎么办,服务器会一直等待客户端的数据传输吗

使用保活机制解决这个问题。每次服务器发送数据,就重置保活计时器,当保活计时器达到一定的时间内,TCP发送探测报文,达到一定的次数没有相应就关闭连接
TCP是怎么实现差错控制和流量控制,拥塞避免的

TCP的差错控制,流量控制和拥塞避免

  • 差错控制(可靠传输)

通过超时重传实现,如果一个发送的报文在超时时间内没有得到回应,将会重新发送 。一个报文段从发送到再到接受确认所经过的时间称为往返时间RTT,超时时间应该略大于往返时间的加权平均值

  • 流量控制
    利用滑动窗口机制,TCP报文中有个窗口字段,可以控制发送方窗口大小,如果窗口大小为0,则发送方不能发送数据,保证接收方来得及接受。

  • 拥塞控制(是为了避免网络拥塞,传送数据太多,网络可能就会进入拥塞状态)
    慢开始,拥塞避免,快重传,快恢复。
    发送方维护一个拥塞窗口值,拥塞窗口只是一个状态变量,接受方实际能接受多少还是取决于发送方窗口字段的大小。一开始拥塞窗口呈指数增长,当达到慢开始门限时,拥塞窗口变成线性增长。当网络拥塞后(出现了超时),慢开始门限变为拥塞窗口值的一半,拥塞窗口从0开始。而快重传是因为有时候网络中不是拥塞,而是某些数据包丢失,这时候就执行快恢复算法。当发送方收到三个连续的同一个报文段的重复确认,说明报文段丢失,执行快恢复算法。慢开始门限变为拥塞窗口的一半,拥塞窗口值再等于慢开始门限。
    在这里插入图片描述

在浏览器中输入url地址 ->> 显示主页的过程

①首先经过DNS协议,解析域名对应的服务器地址,DNS协议首先会在本地缓存查询时候存在域名对应的IP地址,然后再查询上层的DNS服务器。
②发送TCP连接,三次握手建立连接
③发送HTTP请求
④服务器接受HTTP请求并返回HTTP报文
⑤浏览器解析报文内容,渲染页面
⑥连接结束,四次挥手释放连接

HTTP状态码有哪些

  • 1XX 指示信息 表示请求已经接受正在理
  • 2XX 成功 表示请求成功处理,200一般就是成功的状态码
  • 3XX 重定向 需要进行附加操作以完成请求
  • 4XX 客户端错误 服务器无法处理请求,比如请求路径错误 404 未找到网页
  • 5XX 服务器错误 服务器处理请求出错等 比如数据库查询时发生错误

get 和 post 请求有哪些区别?

  • get一般用于查询数据,post一般用于上传数据
  • get的请求参数包含在url中,而post的参数包含在请求主体中
  • get参数有大小限制,post没有大小。
  • post请求方式相对get要安全一些,当然,只是相对来说,post请求的内容,通过抓包也可以获取。
  • get只支持ASCII编码,而post支持多种编码
  • get的url地址可以被收藏,而post不行
  • get的url地址被保存在历史记录里,而post的参数不会。这跟上一条有点类似,也就是get请求的url可以被保存。
  • get请求会被浏览器主动缓存,而post不会
  • get在浏览器回退时是无害的,而post会再起发起请求

Cookie和Session有什么区别

  • Cookie保存在客户端的浏览器上,session保存在服务器端上。一般客户端会存有session的id,请求session信息时,会使用sessionid向服务器请求session信息。Session相对安全
    • 一般一个网站的Cookie是有大小限制的
  • Cookie只能存储ASCII编码,而Sessionkk而已存储任何类型的数据,因此在考虑数据复杂性时,优先使用Cookie。
  • 对于大型网站,如果信息都存在Session中,服务器开销是非常大的。
  • Session可以存放在Redis中,加快访问
    session和cookie作用
    用户个性化的东西,比如购物车,登陆状态,用户自定义设置,主题等

Http和Https有什么区别

Https并不是新协议,而是结合了HTTP和SSL(Secure Sockets Layer) 也就是说HTTPs使用了隧道进行通信 先让HTTTP和SSL通信 再由SSL和TCP通信。

端口号不同HTTP默认端口号是80 HTTPS是443

  • HTTP存在以下问题
    使用明文通信,内容可能会被窃听
    不验证通信放的真实身份,通信方的身份可能遭遇伪装
    无法验证报文的完整性

  • HTTPS
    数据加密传输,安全性有保障。
    使用证书来验证通信方的身份。
    完整性保护,防止报文被篡改

  • 加密传输
    https://blog.csdn.net/tabactivity/article/details/49685319 公钥私钥相关知识
    https采用混合加密机制,即使用对称加密加密传输数据,再使用非对称加密 加密堆成密钥。
    加密过程简化:以支付宝为例,我向支付宝发送消息,我的数据经过一个随机生成的密钥加密。并把密钥通过网站的公钥加密,服务器端用私钥解密,得到加密密钥,并把网站内容用加密器加密,再把密钥用私钥加密

  • 完整性保护
    提供MD5报文摘要,虽然http也有报文摘要的功能,但是http的报文被获取后,安全性低,可以重新计算报文摘要,而HTTPS的报文本身就经过加密,很难计算出报文摘要

Http1.0和Http1.1和Http2.0有什么区别

- Http1.0和HTTP1.1的区别
长连接
HTTP1.0需要使用keep-alive参数来保持一个长连接,而HTTP1.1默认支持长连接和请求流水线处理。
长连接就是可以一直保持连接,不需要每一个TCP请求都打开一个连接,也就是一个TCP连接处理多个HTTP请求和相应,减少了建立和关闭连接的资源消耗。流水线处理,客户端不用等待上一次请求结果返回,就可以发出下一次请求。
带宽优化
HTTP1.1支持只发送header信息。如果服务器认为客户端有权请求服务器,返回100,否则返回401.如果客户端收到100,才开始把body部分发送到服务器,节约了带宽。
状态码
http1.1新增了24个错误状态码 如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除
HOST头处理
支持虚拟主机 http1.0认为每台机器都绑定唯一的IP地址,虚拟主机技术的发展,多个IP地址可以对应同一台物理机器,所以在HTTP1.1的请求头和相应体中都支持HOST头域,如果没有HOST信息会报告400错误
缓存
引入更多缓存控制策略,提供更多可选择的缓存头,优化缓存
分块传输
支持只传送对象的一部分。而不是请求整个对象

  • Http1.1与Http2.0的区别
    采用二进制格式而非文本格式
    比起文本协议,二进制协议解析起来更高效,更重要的是错误更少
    首部信息压缩
    ①服务器和客户端同时维护一个维护一个之前见过的首部信息表,对于存在首部信息表中的不用重复传输
    ②首部信息使用了哈夫曼编码进行压缩。为了加快效率
    服务器端推送
    客户端请求一个资源时,服务器端会把相关的资源也一起发送给客户端,如请求一个页面,服务器可能会把css和js文件都一并发送给客户端,减少传送次数
    多路复用
    客户端和服务器只需要保持一个TCP连接

URI和URL是什么区别

URI是统一资源标识符,可以唯一标志一个资源
URL是统一资源定位符,可以提供该资源的路径。它是一种具体的资源。即URI用来标识一个资源,URL不仅标识资源,还指明了资源的访问位置。

HTTP1.0 、 HTTP1.1与HTTP2.0的主要区别
https://github.com/CyC2018

猜你喜欢

转载自blog.csdn.net/weixin_44137260/article/details/106259788