七层

应用层
表示层
会话层
传输层
网络层
数据链路层
物理层

四层

物理层

两台电脑连接水晶头1-3 2-6交叉法(12收数据 36发数据)

集线器Hub工作层:集线器全部转发数据

数据链路层

物理层+数据链路层

解决的问题

1
2
3
1.这个包是发给谁的?谁应该接收?
2.大家都在发,会不会产生混乱?有没有谁先发、谁后发的规则?
3.如果发送的时候出现了错误,怎么办?

MAC

**MAC(Medium Access Controller)**: 控制往媒体数据发送的先后顺序

信道划分
轮流协议
随机接入

MAC地址:也叫做链路层地址

格式:目标MAC|源MAC|类型|数据|校验位

MAC

网卡根据MAC地址判定是否应该是自己收的;

1
有了这个目标 MAC 地址,数据包在链路上广播,MAC 的网卡才能发现,这个包是给它的。MAC 的网卡把包收进来,然后打开 IP 包,发现 IP 地址也是自己的,再打开 TCP 包,发现端口是自己,也就是 80,而 nginx 就是监听 80。于是将请求提交给 nginx,nginx 返回一个网页。然后将网页需要发回请求的机器。然后层层封装,最后到 MAC 层。因为来的时候有源 MAC 地址,返回的时候,源 MAC 就变成了目标 MAC,再返给请求的机器。

ARP

ARP协议 已知IP地址,求MAC地址

ARP协议

交换机

交换机与VLan

记住来的MAC地址

网络环路(因为成环之后有数据回流A-B-A的形式,从而继续循环)

网络环路

1
2
3
我们来想象一下机器 1 访问机器 2 的过程。一开始,机器 1 并不知道机器 2 的 MAC 地址,所以它需要发起一个 ARP 的广播。广播到达机器 2,机器 2 会把 MAC 地址返回来,看起来没有这两个交换机什么事情。但是问题来了,这两个交换机还是都能够收到广播包的。交换机 A 一开始是不知道机器 2 在哪个局域网的,所以它会把广播消息放到局域网二,在局域网二广播的时候,交换机 B 右边这个网口也是能够收到广播消息的。交换机 B 会将这个广播信息发送到局域网一。局域网一的这个广播消息,又会到达交换机 A 左边的这个接口。交换机 A 这个时候还是不知道机器 2 在哪个局域网,于是将广播包又转发到局域网二。左转左转左转,好像是个圈哦。
可能有人会说,当两台交换机都能够逐渐学习到拓扑结构之后,是不是就可以了?
别想了,压根儿学不会的。机器 1 的广播包到达交换机 A 和交换机 B 的时候,本来两个交换机都学会了机器 1 是在局域网一的,但是当交换机 A 将包广播到局域网二之后,交换机 B 右边的网口收到了来自交换机 A 的广播包。根据学习机制,这彻底损坏了交换机 B 的三观,刚才机器 1 还在左边的网口呢,怎么又出现在右边的网口呢?哦,那肯定是机器 1 换位置了,于是就误会了,交换机 B 就学会了,机器 1 是从右边这个网口来的,把刚才学习的那一条清理掉。同理,交换机 A 右边的网口,也能收到交换机 B 转发过来的广播包,同样也误会了,于是也学会了,机器 1 从右边的网口来,不是从左边的网口来。然而当广播包从左边的局域网一广播的时候,两个交换机再次刷新三观,原来机器 1 是在左边的,过一会儿,又发现不对,是在右边的,过一会,又发现不对,是在左边的。这还是一个包转来转去,每台机器都会发广播包,交换机转发也会复制广播包,当广播包越来越多的时候,按照上一节讲过一个共享道路的算法,也就是路会越来越堵,最后谁也别想走.

STP协议:(Spanning Tree Protocol),最小生成树,解决环路问题

根据配置的权重ID来华山论剑

ID定义了权重、距离定义了连接方式

网络隔离

物理隔离划分不同的子网(需要路由器介入)

资源分配不合理

VLAN虚拟隔离 网络间相互隔离

添加一个TAG,根据VLAN ID区分

VLAN虚拟隔离

相同的VLANID才会转发

交换机可以设置每个口的VLAN

交换机之间的连接通过交换机的Trunk口,这个口可以转发任何VLAN

网络层

PING

Ping

ICMP协议: Internet Control Message Protocol,就是互联网控制报文协议。

封装在IP包里面的

ICMP协议:

差错报文

类型 终点不可达为 3,源抑制为 4,超时为 11,重定向为 5

A构建ICMP->IP->MAC —> MAC->IP->ICMP, B构建应答包

Traceroute 故意设置错误信息通过回报分析网络和经过的IP

tracerouter发udp,为啥出错回icmp?正常情况下,协议栈能正常走到udp,当然正常返回udp。但是,你主机不可达,是ip层的(还没到udp)。ip层,当然只知道回icmp。报文分片错误也是同理。

  • ICMP 相当于网络世界的侦察兵。我讲了两种类型的 ICMP 报文,一种是主动探查的查询报文,一种异常报告的差错报文;
  • ping 使用查询报文,Traceroute 使用差错报文。

网关

转发网关、NAT网关:

转发网关

转发网关的子网不会重复,在不同的局域网之间传递,可以根据路由来定位找寻到B局域网的机器

NAT网关

NAT网关两个子网可能重复,配置的时候A局域网无法直接定位到B局域网的某个机器,只能定位到B局域网网关的对应出口地址

路由协议

路由协议导图

传输层

UDP

UDP

TCP

TCP
TCP2

Socekt

其实是应用层的东西,只不过它用来封装TCP和UDP,内核级别的,很多应用层协议都会使用它来封装

Socekt

应用层

HTTP

HTTP

HTTP 的报文大概分为三大部分。第一部分是请求行,第二部分是请求的首部,第三部分才是请求的正文实体。
http请求头

请求行下面就是我们的首部字段。首部是 key value,通过冒号分隔。这里面,往往保存了一些非常重要的字段。例如,Accept-Charset,表示客户端可以接受的字符集。防止传过来的是另外的字符集,从而导致出现乱码。再如,Content-Type 是指正文的格式。例如,我们进行 POST 的请求,如果正文是 JSON,那么我们就应该将这个值设置为 JSON。

HTTP 2.0 将请求拆分成流, 客户端和服务端都可以同时发送多个请求,不用等一一确认
HTTP2.0

QUIC:谷歌基于UDP的协议

HTTPS

HTTPS

对称加密

非对称加密

流媒体

流媒体

编码
一个视频,可以拆分成一系列的帧,每一帧拆分成一系列的片,每一片都放在一个 NALU 里面,NALU 之间都是通过特殊的起始标识符分隔,在每一个 I 帧的第一片前面,要插入单独保存 SPS 和 PPS 的 NALU,最终形成一个长长的 NALU 序列。

推流
将这个二进制的流打包成网络包进行发送,这里我们使用 RTMP 协议。这就进入了第二个过程,推流

P2P

P2P

FTP
文件传输协议
FTP 采用两个 TCP 连接来传输一个文件。
控制连接:服务器以被动的方式,打开众所周知用于 FTP 的端口 21,客户端则主动发起连接。该连接将命令从客户端传给服务器,并传回服务器的应答。常用的命令有:list——获取文件目录;reter——取一个文件;store——存一个文件。
数据连接:每当一个文件在客户端与服务器之间传输时,就创建一个数据连接。

P2P peer-to-peer
资源开始并不集中地存储在某些设备上,而是分散地存储在多台设备上。这些设备我们姑且称为 peer。

数据中心

DNS 协议

DNS 和 HttpDNS

DNS
HttpDNS

CDN

CDN

分发系统架构

数据中心

数据中心

  • 网卡绑定:LACP(Link Aggregation Control Protocol)
  • 可用区:服务器之间通过二层互通,这个区域常称为一个 POD(Point Of Delivery)
  • 环路解决:

交换机组模型