步步向“前” ——计算机网络

381 阅读10分钟

疫情之间个人的一些面试经历总结,有错请指正,不喜勿喷,有一些引用内容基本照搬,但是自己敲一遍过一遍加深印象,注明了原文链接,有意见@我。

计算机网络

计算机网络的相关知识,计算机相关专业的童鞋,考不考研都要好好学喔。

网络分层模型(OSI、TCP/IP)以及对应的网络协议

为了使不同厂商生产的计算机之间能够互相通信,约定了一个共同的标准,就是网络协议

一般地,关注于逻辑数据关系的协议通常被称为上层协议,而关注于物理数据流的协议通常被称为低层协议。IEEE 802就是一套用来管理物理数据流在局域网中传输的标准,包括在局域网中传输物理数据的802.3以太网标准。

为什么进行网络协议分层?

  1. 最大好处在于“封装”。
  2. 各自独立;
  3. 灵活,并且一层改变,不会造成系统问题;
  4. 结构上易分割;
  5. 容易实现和维护,便于调试;
  6. 促进标准化工作。

OSI模型

OSI模型(Open System Interconnection Reference Model,开放系统互连参考模型)各个层次的基本功能如下:

1、物理层: 在设备之间传输比特流,规定了电平、速度和电缆针脚。

2、数据链路层:将比特组合成字节,再将字节组合成帧,使用链路层地址(以太网使用MAC地址)来访问介质,并进行差错检测。

3、网络层:提供逻辑地址,供路由器确定路径。

4、传输层:提供面向连接或非面向连接的数据传递以及进行重传前的差错检测。

5、会话层:负责建立、管理和终止表示层实体之间的通信会话(打印机等设备)。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。

6、表示层:提供各种用于应用层数据的编码和转换功能(加密解密),确保一个系统的应用层发送的数据能被另一个系统的应用层识别。

7、应用层:OSI参考模型中最靠近用户的一层,为应用程序提供网络服务。

对应协议如图:

相应物理设备
物理层 网卡/网线、调制解调器、集线器(Hub)
数据链路层 网桥、交换机
网络层 路由器(连通不同网络,选择信息传送路线)

TCP/IP模型

在现网中我们一般采用TCP/IP协议来定义网络,因为OSI七成模型过于将每一层的实现功能和价值抽离出来,虽然很细,但不适用;OSI七层模型只停留在理论中,实际实现的过程发现,TCP/IP模型更适合实践

1、TCP/IP模型同样采用了分层结构,层与层相对独立但是相互之间也具备非常密切的协作关系

2、TCP/IP模型将网络分为四层。TCP/IP模型不关注底层物理介质,主要关注终端之间的逻辑数据流转发

3、TCP/IP模型的核心是网络层和传输层:网络层解决网络之间的逻辑转发问题,传输层保证源端到目的端之间的可靠传输。最上层的应用层通过各种协议向终端用户提供业务应用

对于网络来说,我们一般只关注传输层以下的网络结构层次,这是网络工程师应该必须了解的内容,对于上三层来说,这是软件工程师应该关注的内容。

TCP/IP是一组协议的代名词,它还包含很多协议,组成TCP/IP协议族。

作用 举例说明
物理层 负责光电信号的传输 以太网线、同轴电缆
数据链路层 负责设备之间数据帧的传送和识别 网卡设备驱动、帧同步、冲突检测、CRC
网络层 负责地址管理和路由选择 IP标识主机、路由表规划传输路线
传输层 负责两台主机之间的数据传输 传输控制协议(TCP)
应用层 负责应用程序间沟通 SMTP、FTP、Telnet、网络编程主要针对应用层

参考链接1:计算机网络分层模型(OSI和TCP/IP)

参考链接2:网络分层模型(OSI、TCP/IP)以及对应的网络协议

浏览器输入url发生了什么,浏览器渲染页面的过程

很全面的看这里

这篇也不错

  1. url解析
  2. dns域名解析,获得真实ip地址
  3. 建立连接请求,应用层发送http请求,传输层三次握手建立tcp连接,网络层依据IP协议查询Mac地址,在链路层使用以太网协议发送数据,服务器接受请求,处理请求,浏览器响应服务器返回数据
  4. 浏览器渲染

http1.0http1.1http2.0协议的区别

1.0与1.1

  • 长连接

    HTTP 1.0需要使用keep-alive参数来告知服务器端要建立一个长连接,而HTTP1.1默认支持长连接。

    HTTP是基于TCP/IP协议的,创建一个TCP连接是需要经过三次握手的,有一定的开销,如果每次通讯都要重新建立连接的话,对性能有影响。因此最好能维持一个长连接,可以用个长连接来发多个请求。

  • 节约带宽

    HTTP 1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回401。客户端如果接受到100,才开始把请求body发送到服务器。

    这样当服务器返回401的时候,客户端就可以不用发送请求body了,节约了带宽。

    另外HTTP还支持传送内容的一部分。这样当客户端已经有一部分的资源后,只需要跟服务器请求另外的部分资源即可。这是支持文件断点续传的基础。

  • HOST域

    现在可以web server例如tomat,设置虚拟站点是非常常见的,也即是说,web server上的多个虚拟站点可以共享同一个ip和端口。

    HTTP1.0是没有host域的,HTTP1.1才支持这个参数。

1.1与2.0

  • 多路复用

    HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。

    当然HTTP1.1也可以多建立几个TCP连接,来支持处理更多并发的请求,但是创建TCP连接本身也是有开销的。

    TCP连接有一个预热和保护的过程,先检查数据是否传送成功,一旦成功过,则慢慢加大传输速度。因此对应瞬时并发的连接,服务器的响应就会变慢。所以最好能使用一个建立好的连接,并且这个连接可以支持瞬时并发的请求。

  • 数据压缩

    HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。

  • 服务器推送

    当我们对支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常合适加载静态资源。

    服务器端推送的这些资源其实存在客户端的某处地方,客户端直接从本地加载这些资源就可以了,不用走网络,速度自然是快很多的。

参考的文章

解释一下https协议,加密方式等(对称非对称)

HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 [1] 。HTTPSHTTP的基础下加入SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSLHTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTPTCP 之间),http默认端口80,https默认443

HTTPS 协议是由 HTTP 加上 TLS/SSL 协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。 SSL的全称是Secure Sockets Layer,即安全套接层协议,是为网络通信提供安全及数据完整性的一种安全协议。TLS的全称是Transport Layer Security,即安全传输层协议。 即HTTPS是安全的HTTP

https在传输数据上使用对称加密,在证书验证阶段使用非对称加密

加密方式

  • 对称加密:加密和解密都是同一个密匙,存在密钥分发问题,但加密快
  • 非对称加密:密钥成对出现,分为公钥和私钥,公钥加密需要私钥解密,私钥加密需要公钥解密(这个场景你是否疑惑?私钥加密,公钥解密,是为了保证数据是由秘钥持有者发出的,保证操作不是其他人发起的,如果有这个应用场景,我们可以使用这个方式来加密),加密慢

HTTPS一般使用的加密与HASH算法如下:

  • 非对称加密算法:RSA,DSA/DSS
  • 对称加密算法:AES,RC4,3DES
  • HASH算法:MD5,SHA1,SHA256

参考文章: 百度百科-https

websocket的协议的特点及使用,socket网络异常处理

WebSocket是一种协议,与HTTP协议一样位于应用层,都是TCP/IP协议的子集。HTTP协议是单向通信协议,只有客户端发起HTTP请求,服务端才会返回数据。而WebSocket协议是双向通信协议,在建立连接之后,客户端和服务器都可以主动向对方发送或接受数据。WebSocket协议建立的前提需要借助HTTP协议,建立连接之后,持久连接的双向通信就与HTTP协议无关了。

WebSocket协议的目标是在一个独立的持久连接上提供全双工双向通信。客户端和服务器可以向对方主动发送和接受数据。在JS中创建WebSocket后,会有一个HTTP请求发向浏览器以发起请求。在取得服务器响应后,建立的连接会使用HTTP升级将HTTP协议转换为WebSocket协议。也就是说,使用标准的HTTP协议无法实现WebSocket,只有支持那些协议的专门浏览器才能正常工作。

使用示例:

// Create WebSocket connection.
const socket = new WebSocket('ws://localhost:8080');

// Connection opened
socket.addEventListener('open', function (event) {
    socket.send('Hello Server!');
});

// Listen for messages
socket.addEventListener('message', function (event) {
    console.log('Message from server ', event.data);
});

webSocket.readyStatereadyState属性返回实例对象的当前状态,共有四种。

name 含义 对应callback(on)
CONNECTING 值为0,表示正在连接。 -
OPEN 值为1,表示连接成功,可以通信了。 open
发送数据时 event: message, 报错时 event: error
CLOSING 值为2,表示连接正在关闭。 -
CLOSED 值为3,表示连接已经关闭,或者打开连接失败。 close

websocket异常断开的处理:监听close事件;加入心跳机制,open事件后执行心跳监测,异常则重启。