数据7层
七层
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层
四层
物理层
两台电脑连接水晶头1-3 2-6交叉法(12收数据 36发数据)
集线器Hub工作层:集线器全部转发数据
数据链路层
解决的问题
1 | 1.这个包是发给谁的?谁应该接收? |
MAC
**MAC(Medium Access Controller)**: 控制往媒体数据发送的先后顺序
信道划分
轮流协议
随机接入
MAC地址:也叫做链路层地址
格式:目标MAC|源MAC|类型|数据|校验位
网卡根据MAC地址判定是否应该是自己收的;
1 | 有了这个目标 MAC 地址,数据包在链路上广播,MAC 的网卡才能发现,这个包是给它的。MAC 的网卡把包收进来,然后打开 IP 包,发现 IP 地址也是自己的,再打开 TCP 包,发现端口是自己,也就是 80,而 nginx 就是监听 80。于是将请求提交给 nginx,nginx 返回一个网页。然后将网页需要发回请求的机器。然后层层封装,最后到 MAC 层。因为来的时候有源 MAC 地址,返回的时候,源 MAC 就变成了目标 MAC,再返给请求的机器。 |
ARP
ARP协议 已知IP地址,求MAC地址
交换机
记住来的MAC地址
网络环路(因为成环之后有数据回流A-B-A的形式,从而继续循环)
1 | 我们来想象一下机器 1 访问机器 2 的过程。一开始,机器 1 并不知道机器 2 的 MAC 地址,所以它需要发起一个 ARP 的广播。广播到达机器 2,机器 2 会把 MAC 地址返回来,看起来没有这两个交换机什么事情。但是问题来了,这两个交换机还是都能够收到广播包的。交换机 A 一开始是不知道机器 2 在哪个局域网的,所以它会把广播消息放到局域网二,在局域网二广播的时候,交换机 B 右边这个网口也是能够收到广播消息的。交换机 B 会将这个广播信息发送到局域网一。局域网一的这个广播消息,又会到达交换机 A 左边的这个接口。交换机 A 这个时候还是不知道机器 2 在哪个局域网,于是将广播包又转发到局域网二。左转左转左转,好像是个圈哦。 |
STP协议:(Spanning Tree Protocol),最小生成树,解决环路问题
根据配置的权重ID来华山论剑
ID定义了权重、距离定义了连接方式
网络隔离
物理隔离划分不同的子网(需要路由器介入)
资源分配不合理
VLAN虚拟隔离 网络间相互隔离
添加一个TAG,根据VLAN ID区分
相同的VLANID才会转发
交换机可以设置每个口的VLAN
交换机之间的连接通过交换机的Trunk口,这个口可以转发任何VLAN
网络层
PING
ICMP协议: Internet Control Message Protocol,就是互联网控制报文协议。
封装在IP包里面的
差错报文
类型 终点不可达为 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
TCP
Socekt
其实是应用层的东西,只不过它用来封装TCP和UDP,内核级别的,很多应用层协议都会使用它来封装
应用层
HTTP
HTTP 的报文大概分为三大部分。第一部分是请求行,第二部分是请求的首部,第三部分才是请求的正文实体。
请求行下面就是我们的首部字段。首部是 key value,通过冒号分隔。这里面,往往保存了一些非常重要的字段。例如,Accept-Charset,表示客户端可以接受的字符集。防止传过来的是另外的字符集,从而导致出现乱码。再如,Content-Type 是指正文的格式。例如,我们进行 POST 的请求,如果正文是 JSON,那么我们就应该将这个值设置为 JSON。
HTTP 2.0 将请求拆分成流, 客户端和服务端都可以同时发送多个请求,不用等一一确认
QUIC:谷歌基于UDP的协议
HTTPS
对称加密
非对称加密
流媒体
编码
一个视频,可以拆分成一系列的帧,每一帧拆分成一系列的片,每一片都放在一个 NALU 里面,NALU 之间都是通过特殊的起始标识符分隔,在每一个 I 帧的第一片前面,要插入单独保存 SPS 和 PPS 的 NALU,最终形成一个长长的 NALU 序列。
推流
将这个二进制的流打包成网络包进行发送,这里我们使用 RTMP 协议。这就进入了第二个过程,推流
P2P
FTP
文件传输协议
FTP 采用两个 TCP 连接来传输一个文件。
控制连接:服务器以被动的方式,打开众所周知用于 FTP 的端口 21,客户端则主动发起连接。该连接将命令从客户端传给服务器,并传回服务器的应答。常用的命令有:list——获取文件目录;reter——取一个文件;store——存一个文件。
数据连接:每当一个文件在客户端与服务器之间传输时,就创建一个数据连接。
P2P peer-to-peer
资源开始并不集中地存储在某些设备上,而是分散地存储在多台设备上。这些设备我们姑且称为 peer。
数据中心
DNS 协议
DNS 和 HttpDNS
CDN
数据中心
- 网卡绑定:LACP(Link Aggregation Control Protocol)
- 可用区:服务器之间通过二层互通,这个区域常称为一个 POD(Point Of Delivery)
- 环路解决: