Skip to content

计算机网络

计算机网络可分为:广域网、城域网、局域网和个人区域网

判断网络质量的7个性能指标:

  • 速率:传输速度,直接受材料影响
  • 带宽:传输的横切面大小
  • 吞吐量:单位时间内通过网络的数据量,真正的传输速度
  • 时延:把数据从A端发送到B端所需要的时间
  • 时延带宽积
  • 往返时间:从A发数据到B,到A收到B的相应所需要的时间
  • 利用率:网络在传输时信道的利用百分比

我们把传输信号的介质统一称为:信道

我们传输的数据,是电磁波,微观上看是一个个的电子,为了大家都能明白传输的这些电子是什么意思,我们制定了一个规则,让大家都按照这个规则来传递电子:计算机网络协议

计算机网络协议

计算机网络协议是指:为计算机网络中进行数据交换而建立的规则、标准或约定的集合

HTTP是计算机网络协议的一部分,属于应用层协议

一般把网络协议分为5层,也有其他分法:

<p align=center><img src="https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6cd1044869624526b251c272843327f1~tplv-k3u1fbpfcp-watermark.image?" alt="image.png" /></p>

当A向B发数据的时候:

<p align=center><img src="https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/2d00f22c8dd74eff95764bd65a4cd4ff~tplv-k3u1fbpfcp-watermark.image?" alt="image.png" /></p>

物理层

物理层规定传输媒介的一些特性

物理层协议将具体的实实在在的传输媒介进行了高度总结,抽象成了四个特点,只要满足这四个特点,就可以作为传输媒介

  • 机械特性:指明接线器的形状和尺寸、引脚数据、排列方式等
  • 电气特性:指明每条线上的电压范围
  • 功能特性:指明每条线上每一个电平表示的意义
  • 过程特性:指明各种事件的出现顺序

一般来说,我们的信道有三种:

  • 单向通信:也叫单工通信,只能从一端到另一端通信,不能反过来,例如收音机广播
  • 双向交替通信:也叫半双工通信,双端都可以收发,但是不能同时进行
  • 双向同时通信:也叫全双工通信,双方可以同时发送和接收

有了物理层就可以传输电子信号了,现在我们需要将电子信号识别成数据,并保证其可靠地到达另一端

数据链路层

数据链路层负责将数据透明地、无差错地进行传输

我们传输的电子会通过电路展示为高低电平,高电平表示1,低电平表示0,这样就翻译成了一串串二进制数据。而数据链路层就负责把这些二进制封装成帧,帧就是一串二进制

保证这些帧正常可靠地到达,是数据链路层的核心作用

  • 链路层会把数据封装成一个个的数据帧,也就是在数据前后添加标记,称之为首部和尾部。当接收端收到数据后,就可以靠这个标记来识别数据的开头和结束
  • 首部和尾部标记是链路层在发送时自己添加的,接收时自己删除
  • 链路层会对发送的数据进行差错检测,如果遇到错误的数据帧,就会丢掉并重传,以此来提供可靠的、无差错的数据传输

那么怎么知道数据要传输到哪里呢?

网络层

网络层负责编址、寻址和转发

我们发送数据都需要一个IP地址。IP就是一个协议,全称Internet Protocol,即国际互联协议,可以表示一个地址,如192.168.xxx.xx

接下来,我们可以通过地址映射协议,也叫ARP(Address Resolution Protocol)来根据IP地址找到对应的主机地址,从这个主机拿数据或者塞数据

ARP是IPv4特有的协议,在IPv6中,地址解析的功能由邻居发现协议(NPD)承担,NDP比ARP更高效、更健康,并且是IPv6协议栈的组成部分,但是我们这里只讨论ARP

需要注意的是:主机地址是不变的,IP地址随着网络变化的

比如我从一个wifi换到了另一个wifi,就会自动给我的主机重新分配一个IP地址。当我们连接不同的网络时,执行ipconfig查看到的IP地址不同,就是这个原因

网络层的两个核心协议就是IP和ARP,IP协议负责给不同的主机分配IP地址,ARP协议负责根据IP地址找到实际的主机地址

那么地址知道了,我们怎么传输数据呢?

传输层

传输层的核心作用就是进行数据的传输

数据传输不是直接塞到系统的C盘,而是应该是传给这个主机中的一个进程,这个进程收到数据后进行数据的解析处理

数据如何被进程获取到?通过端口号

每个主机上都有不同的端口号,我们可以开启一个进程去监听这个端口,只要监听到这个端口有数据,我们就立刻处理,这样就拿到了数据

也就是说数据传输不仅要IP地址,还需要端口号,比如192.168.0.1:8080,其中8080就是端口号

数据传输有两种传输方式,一种是面向连接的、可靠的TCP协议;另一种是无连接的、不可靠的UDP协议

  • TCP(Transmission Control Protocol):面向连接、可靠
  • UDP(User Datagram Protocol):无连接、不可靠

TCP虽然可靠,但是每次通信都需要先建立连接,结束之后还需要断开连接(三次握手四次挥手),费事

A:喂,能听到么? B:嗯,可以,And you? A:me too,好,现在我们开始吹。 1 个小时之后要结束了。 A:今天就到这里吧。 B:好的,就到这里吧。 A:好的,挂了。 B:好的,我也挂了。

如果是 UDP 呢?就是如下这样。

A:大风车啊咿呀咿呀转,xxxxxxxx,收到回复! B:嗯!

但有可能B没收到,所以不可靠

应用层

应用层直接给用户提供傻瓜式的服务

这一层最常见的HTTP,也叫做超文本传输协议(Hyper Text Transfer Protocol),大部分都是用来传递JSON,也可以传递HTML页面,所以叫做超文本

HTTP是基于TCP的,所以也是需要连接的

一次完整的HTTP请求如下,比如请求http://juejin.cn

  1. 通过域名映射找到http://juejin.cn对应的IP地址
  2. 通过这个IP地址加上默认端口80进行TCP连接
  3. 发送数据请求
  4. 等待对方主机返回响应结果,也就是一个HTML页面
  5. 得到结果,放在浏览器里渲染,我们就看到了具体的页面
  6. 关闭TCP连接

应用层还有很多其他协议,比如文件传输协议FTP、电子邮件协议SMTP

  • 前端常见的较新的WebSocket和SSE也是运行在TCP之上的协议
  • WebRTC(浏览器原生实时通信技术)底层使用UDP传输音视频
  • 现代HTTP/3不再基于TCP,而是基于QUIC协议,QUIC本身运行在UDP之上,结合了 TCP 的可靠性和 UDP 的低延迟

现实场景

  • 大量 FPS、MOBA 类游戏(如《英雄联盟》《Valorant》《守望先锋》)使用 UDP 传输位置、射击等实时状态,偶尔丢包不影响体验,延迟比可靠性更重要

  • 点播场景

    • 抖音短视频广泛使用HTTP-FLV,延迟低、适合大规模并发,非常适合APP内播放,基于TCP
    • B站点播主要使用HLS,将视频切成小片段(.ts文件)通过索引(.m3u8)分发,天然适配浏览器,拖动进度条也很流畅,基于TCP
  • 直播场景

环节主要协议核心目标典型应用
主播推流 (手机/电脑→服务器)RTMP稳定传输、兼容性好抖音、B站、视频号主播开播
观众拉流 (服务器→观众)HTTP-FLV / HLS高并发支持、全平台兼容普通直播观看(2-5秒延迟)
超低延迟 (连麦、体育赛事)WebRTC / SRT / QUIC毫秒级互动、抗网络抖动直播带货连麦、体育竞猜、在线PK

技术演进方向:从“可靠”走向“实时”

早期为了确保画面不卡,大家倾向于用基于 TCP 的 RTMP/HTTP-FLV,代价是延迟高。现在为了更好的互动体验,各大平台都在向基于 UDPWebRTCQUIC 迁移,在保证画质的同时,努力把延迟降低到毫秒级。