计算机网络
计算机网络可分为:广域网、城域网、局域网和个人区域网
判断网络质量的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
- 通过域名映射找到http://juejin.cn对应的IP地址
- 通过这个IP地址加上默认端口80进行TCP连接
- 发送数据请求
- 等待对方主机返回响应结果,也就是一个HTML页面
- 得到结果,放在浏览器里渲染,我们就看到了具体的页面
- 关闭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,代价是延迟高。现在为了更好的互动体验,各大平台都在向基于 UDP 的 WebRTC 和 QUIC 迁移,在保证画质的同时,努力把延迟降低到毫秒级。
