Skip to content

网络协议 ​

互联网是如何工作的?

一、 计算机网络模型 ​

国际标准模型是 OSI 七层参考模型,它是一个参考,不是一个具体实现,又叫网络互联模型,TCP/IP 协议是参考 OSI 模型进行实现的。OSI 模型分七层:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层。TCP/IP 主要是分四层,应用层,传输控制层,网络层,链路层。将 OSI 模型的应用层,表示层,会话层组成一个应用层,OSI 的链路层和物理层分成链路层。 比 OSI 模型少了三层,结构简单很多。

为什么会有模型? ​

模型主要就是标准,定义计算机网络的标准,因为早期的网络通信是点对点的通信,那么不同的生产厂商之间的产品和设备不能相互兼容,为了解决这个问题,所以国际上提供了一个标准 OSI 模型标准,所有的厂商都去遵循,兼容这个标准生产。

相同点 ​

  • 都是通过层的结构组成的。
  • 都是网络通信标准。

区别 ​

  • 分层结构不同,OSI 是七层,TCP/IP 是四层
  • OSI 模型是先有模型,再有协议,它是一种设计理论,根据这个去设计接口等规范。TCP/IP 是先有了 http,tcp 等具体的协议,再把这些协议划分到不同的模型层上面去,它是以实际应用为主.
  • OSI 更适合对硬件的开发,比如电流,电压等接口的标准以及对程序的设计。TCP/IP 更多是计算机建立链接需求,主流使用是协议站,比如我和你之间的通信。

二、 TCP/IP 协议(四层模型) ​

TCP/IP 是网络通信的一个标准,所有的互联网通信都必须遵循这个标准,它是一个由多个协议组成的协议族,他在一定程度上参考了 OSI 模型结构,在 OSI 模型的结构上简化为四层结构。 应用层,传输层,网络层,链路层。不同的层,有不同的协议。其中应用层是指程序员关注的地方,其他的传输层,网络层,链路层都是属于内核。

mac 地址 ​

也叫做物理地址,硬件地址,是由设备出厂商设置的,计算机出厂时就写死在网卡里面了,每个网卡的 mac 地址全世界独一无二,固定不能改变的

IP 地址 ​

是指网络地址,软件地址,每台计算机使用的 ip 地址是由 ISP(指提供 Internet 服务的公司,比如电信、网通、移动等)负责分配的,通常情况下,计算机每次链接不同的网络使用的 ip 地址不一样。IP 地址是动态的,可改变的。

mac 地址和 IP 地址的区别 ​

  • 地址长度不同,mac 的长度是为 48 位,ip 的地址长度为 32 位。
  • 协议层不同,mac 运用在第二层数据链路层,ip 运用在第三层网络层。
  • 分配依据不同,mac 分配是基于制造商,ip 分配基于网络拓朴

路由器 ​

一台独立的拥有 mac 地址的设备,把数据包进行一次转发。 注意,路由器的每一个端口都有独立的 mac 地址 路由只要是负责 ip 地址的寻找

子网 ​

就是给若干个 ip 地址按照某种规则分组,将处在一个大网的若干个 ip 划分成不同组的小网。同处在一个小网里面的 ip 就是被称为同一个子网。

子网掩码 ​

给某台计算机设置一个子网掩码,将 ip 地址和子网掩码进行与运算,得到子网。

默认网关 ​

每台计算机配置一个 ip 地址,用来将数据包发给这个 ip 地址(实际就是路由的 ip 地址)

路由表 ​

确定目的 ip 和路由接口的对应关系,也就是说,我的数据应该从路由的哪个接口出去,路由表是通过子网分组对应接口,同一个子网的不同 ip 对应的是同一个路由接口。

arp 协议 ​

通过 ip 地址找到对应的 mac 地址,电脑里面会缓存一张 arp 表,arp 表缓存了 ip 和 mac 的对应关系,通过 arp 表找到对应的 mac 地址。

为什么要网络分层 ​

  • 为了简化网络的复杂度
  • 有更好的可拓展性,复杂的网络通信通过分层来管理,层与层之间不会相互影响,如果后期需要替换某个应用,🈯️ 需要知道层与层之间的接口连接进行。

应用层 ​

应用层是 tcp/ip 协议的第一层,是直接为应用进程提供服务的,符合应用层的一些协议,主要准备某种协议的数据,发送前通过内核完成和别人的链接。 应用层协议有 HTTP,TFTP,FTP,NFS,WAIS,SMTP,Telent,DNS,SNMP。

  1. 对不同的应用程序,他们会根据自己的需求来使用应用层不同的协议。比如:
  • 邮件传输使用了 SMTP 协议
  • 互联网传输使用了 HTTP 协议
  • 远程登录服务使用了 TELNET 协议
  1. 应用层还能加密,解密,格式化数据。
  2. 应用可以建立或解除与其他节点的联系,可以充分节省网络资源。

传输控制层 ​

传输控制层是端对端的通信,是指应用程序使用什么协议进行通信,给应用层提供端口号。不同协议对应不同的端口号,传输层有两个协议,TCP 协议和 UDP 协议。

  • TCP 协议:面向连接的,可靠的传输协议
  • UDP 协议:无连接,高效的,不可靠的数据报文协议

总体来说,TCP 协议传输效率低,但可靠性强;UDP 协议传输效率高,但可靠性略低,适用于传输可靠性要求不高、体量小的数据(比如 QQ 聊天数据)。

应用层和传输层的联系 ​

应用层是使用传输层的端口号进行传输的,比如 http 使用 80 端口,这个 80 端口是传输层提供的端口,http 是要通过 tcp 去建立链接的。传输层通过端口号来判断应用程序,应用程序通信是需要通过传输层建立通信的管道。

网络层 ​

网络层主要是负责将报文从一台主机传到另一台主机,这个传输报文的整个路程称为网络层,主要是包括寻址(IP)和路由(router)。 网络层包括的协议有:ipv4,ipv6,ICMP,IGMP。

链路层 ​

链路层又称数据链路层或者网络接口层,是物理层,将一个网络层通过多台设备切割成一段一段的网络线路,两个设备直连的这段线路叫做数据链路层,所以一个网络层是由多段数据链路层组成的。 该层包括操作系统硬件的设备驱动,NIC(网卡),光纤等物理可见部分,还包括连接器等一切传输媒介。

网络拓扑:就是指网络线路布局

比如:A 电脑—— 连接路由 1 —— 连接路由器 2 —— 连接 C 电脑

这是 一张网络拓扑。假设 A 通过 http 请求给 C 发送数据。

A 给 C 发送数据通过这个网络拓扑到达 C 这整个网络规划就是 A 和 C 通信的网络层,然而 A 和 C 不是直连的,而是通过路由 1,路由 2 等切割成一段一段的数据线路,然后通过一段一段数据线路查找 mac 地址最终找到 C,那这整个过程就是一个数据链路层,数据链路层就是由这每一段小的线路连接组成,所以网络层是通过数据链路层来组装传输数据的。

A 给 C 发送数据从应用层到链路层的全过程解析:

  • 准备工作,应用层数据包封装,http 请求的发出。
  • 发送数据包之前,传输层接到 http 请求的发出,首先通过 DNS 域名解析获取到 C 的 ip 地址,知道要发给谁,然后通过 TCP 建立通信连接,添加 TCP 包首部
  • 连接建立之后,此时就可以通过连接通道发送数据了,数据发出,程序进入到网络层
  • 网络层的时候封装 IP 头,还有数据包,封装完毕之后,来到链路层,链路层
  • 此时 A 和 路由 1 连接的,A 根据默认网络知道路由 1 的 IP 地址,然后通过 arp 找到路由 1 的 mac,添加一个以太网首部(源 A 电脑 mac,目标 路由 1mac)
  • 路由 1 拿到数据包根据路由表匹配 IP 找到路由 2,再根据 arp 找到路由 2 的 mac,此时更换以太网首部(源 路由 1mac,目标 路由 2mac)
  • 路由 2 拿到数据包根据路由表匹配找到 C 电脑的 IP,再根据 ARP 找到 C 电脑的 mac
  • C 电脑发现 IP 包里面的目标 IP 地址是自己,此时接收数据,并且进行处理。

网络层和链路层的关系 ​

链路层是物理层,一个网络层是由一段一段的链路层组成的,通过链路层给整个网络层传送数据,网络层是通过链路层去查找到最终的接收方,然后将数据传送给他。

三、 TCP 协议 ​

面向连接的,可靠的传输协议。

什么是连接

三次握手

什么是三次握手? ​

客户端和服务端建立连接了 ,各自开辟了一个队列空间(queue 空间 socket),双方有资源为对方服务。

  • 客户端发送 SYN 给服务端,请求服务端建立建立
  • 服务端收到 SYN 回应一个 SYN+ACK 给客户端,告诉客户端我收到它的连接请求了,并且愿意和他建立连接
  • 客户端收到服务端的 SYN+ACK 回应再次发送 ACK 告诉服务端,我收到你的请求同意了,接下来我们可以进行对话了。

为什么是三次握手? ​

如果是两次握手,那么 TCP 建立连接只是客户端单方面的,会造成资源的浪费。

TCP 四次挥手 ​

  • 客户端发一个 FIN 报文数据包给服务器请求断开连接
  • 服务器收到 FIN 报文回应一个 ACK 数据包告诉客户端我收到你的断开请求了,正在分配资源,然后进入到 close wait 状态
  • 等到服务 close 状态之后, 有资源断开服务器的连接的了,再发送一个 FIN+ACK 断开连接的报文,服务器进入到 last ack 状态
  • 客户端收到服务器断开连接到 FIN+ACK 报文请求,再次发送 ACK 告诉服务器,我收到你的断开报文了,然后断开。

TCP 的四次挥手为什么是四次,第二部和第三部能不能合并? ​

第二步和第三步不能合并,服务器收到客户端断开连接的请求后,服务器不可能立马有资源去处理客户端断开连接的请求, 然而客户端每次超过 30 秒没有收到服务端的回应就会重发请求。但是服务器处理断开请求是需要时间的,所以这个时候,服务器需要告诉客户端,他已经收到了客户端的断开请求, 正在等待资源的分配,进入到 close wait 状态。进行了第二部。等到有资源处理了,服务端再发一个断开连接到数据报文回应给客户端,他正在处理断开连接。

什么是 TCP 长连接? ​

就是一直连接

三、http 协议 ​

什么是 http 协议

超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于 TCP/IP 协议传输数据,互联网上应用最为广泛的一种网络协议,所有的 WWW 文件都必须遵守这个标准。设计 HTTP 的初衷是为了提供一种发布和接收 HTML 页面的方法。

http1.0,http1.1,http2 比较 ​

  • 时间点:HTTP/0.9(1991 年)、HTTP/1.0(1996 年)、HTTP/1.1(1999 年)、HTTP/2.0(2015 年)

  • HTTP/1.0与HTTP/1.1的区别:

    • 缓存处理
    • 带宽优化及网络连接的使用
    • 错误通知的管理
    • Host 头处理
    • 长连接
  • HTTP/1.x与HTTP/2.0的区别:

    • 新的二进制格式(Binary Format):HTTP1.x 的解析是基于文本,HTTP2.0 的协议解析采用二进制格式
    • 多路复用(MultiPlexing):即连接共享,即每一个 request 都是是用作连接共享机制的
    • header 压缩:
    • 服务端推送(server push)

http 特点 ​

  • 无状态,无连接
  • 通信是明文的
  • 简单快速、灵活
  • 没有验证通信方的身份
  • 无法保证数据的完整性

四、https ​

什么是 https

https 不是一个具体的协议,是在 HTTP 基础上进行了 SSL/TLS 加密处理,本质还是 HTTP 通信,在数据传输之前,TCP 握手时候利用 SSL/TLS 建立全信道,加密数据包。 HTTPS 使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。

PS:TLS 是传输层加密协议,前身是 SSL 协议,由网景公司 1995 年发布,有时候两者不区分。

https 特点 ​

  • 内容加密:采用混合加密技术,中间者无法直接查看明文内容
  • 验证身份:通过证书认证客户端访问的是自己的服务器
  • 保护数据完整性:防止传输的内容被中间人冒充或者篡改

https 加密技术 ​

采用非对称加密+对称加密(混合加密技术)来进行加密,就是用非对称加密来沟通获取到对称加密需要的密钥,然后在后续的网络通信中使用对称算法进行加密和解密

为什么需要采用混合加密技术? ​

  • 如果通过对称加密进行前期的加密沟通,那么加密不够严谨,公钥容易被泄露
  • 如果全部使用非对称加密进行通信,因为非对称加密比较复杂这样数据传输比较慢
  • 所以为了保证前期的加密协商不被窃取以及后期数据的传输效率,加密协商密钥的获取阶段通过非对称加密来协商,后期的数据通信通过对称加密来进行通信

对称加密 ​

就是客户端和服务端使用同一个公钥对内容进行加密和解密。

对称加密的问题 ​

如果客户端和服务端共同持有一个公钥,并且没有被别人知道,那数据进行密钥加密的是安全的。 但是服务端如何把自己拥有的密钥给到客户端?假设服务端生成的密钥通过明文给到客户端,在这个过程中密钥被第三方截取了,那么客户端通过这个密钥进行加密的文件,第三方就可以被截取到

非对称加密 ​

就是由服务端同时生成一对公钥和私钥,通过公钥加密文件,需要对应的私钥解密文件。

非对称加密的问题 ​

客户端需要通过服务端生成的公钥进行加密,所以客户端和服务端协商加密规则时,服务端会把公密给到客户端,如果这个期间第三方截取了服务端给到公钥,同时用它生存的公钥匙替换掉服务器的公钥,那么客户端拿到公钥之后进行加密,将数据传给服务端的时候,第三方截取数据,然后用它的私钥进行解密,就可以截取客户端的数据。

数字签名 ​

CA 机构对服务器上传的.crt 文件进行签名验证数据的真实性和完整性

验证服务端的身份 ​

客户端如何知道它拿到的公钥是服务器给的不是伪造?通过数字证书验证公钥的身份。

数字证书 ​

就是一个.crt 文件,一种验证电脑身份的机制,由数字颁发机构 CA 颁发。

数字证书内容 ​

公钥,申请者,域名等其他的信息。

验证数据的真实性和完整性 ​

客户端如何保证拿到的数字证书是真实的并且完整的?

摘要 ​

将数字证书.crt 进行 hash,就生成了一个摘要,生成摘要之后是不可逆的。

数字签名 ​

对数字证书进行签名,验证数字证书的真实和完整性,CA 机构用自己的私密对摘要进行加密,生成一个数字签名。

如何申请数字证书 ​

  • 服务器将公钥,申请者,域名等其他的信息生成一个.crt 文件然后给到 CA 机构
  • CA 机构收到申请,验证申请者信息,如果没有异常,CA 机构通过.crt 这个明文文件做一个 HASH,得到一个信息摘要。
  • CA 机构用自己的私钥对 HASH 进行加密,得到一个秘文,这就是数字签名
  • 然后通过数字签名+.crt 明文生成一个数字证书

数字签名如何验证数字证书的真实性 ​

  • 浏览器通过 CA 证书提供的公钥对数字签名进行解密得到 hash 值
  • 浏览器再通过 CA 证书提供的公钥对 crt 原文进行 hash 值处理
  • 将数字签名生成的 hash 值和.crt 原文生成的 hash 值进行对比,如果相等,那么数字证书就是完整的。

如何验证颁发机构权威性 ​

通过上面的步骤已经可以验证公钥的身份,以及数字证书的完整性和真实性,但是假如 CA 机构是被第三方入侵者伪造的?这里就需要验证颁发机构的权威性,需要验证颁发机构的权威性,那么就需要更权威的颁发机构来验证,所以就会有一个根证书颁发机构,这个根证书颁发机构是被大家公认的权威机构,通过根证书颁发机构给中证书颁发机构受信,再由中证书颁发机构给用户证书颁发机构授信,来保证用户证书颁发机构的权威性。

证书链 ​

用户颁发机构的权威性是通过证书链来验证的, 证书链主要是有根证书(根证书颁发机构颁发的证书),中间证书(中间证书颁发机构颁发的证书),用户证书(用户证书颁发机构颁发的证书)三部分组成,只有这三个证书都通过了,那么才能证明用户颁发机构证书的权威性。

参考资料和地址: ​

tcp/ip 工作原理和图解
https 加密原理
[图解 TCP/IP (第五版)书]