网络协议——网络架构
网络协议——网络架构
很抱歉懒了没有网络拓扑图
1、对等网络(P2P)
在加入p2p网络占用网络参与者的带宽获取文件的同时,也提供带宽供其他下载相同文件的参与者,下载自己已下载的文件片段
主要解决单台服务器带宽压力
内容分发协议之BitTorrent协议
后缀.torrent,俗称BT种子文件,主要用来提供哪些参与者拥有哪些资源,由以下信息组成
- announce:tracker服务器地址,tracker服务器主要提供其他参与者的地址列表
- info区:表示该种子有几个文件段、文件有多大、目录结构、文件名字
- Name字段:顶层目录的名字
- 每个段的大小:每个文件段的大小,支持BT分段下载
- 段hash值:将每个文件段的SHA-1 hash值拼在一起
下载过程
- 客户端Client解析.torrent,获取Tracker Server的地址
- Tracker Server记录Client的信息,响应发布者和所有下载相同文件的下载者的IP地址
- Client和其他下载者建立连接,互相下载自己没有的文件段
- Client下载好文件段,对比hash值
2、去中心化网络(DHT)
主要是为了解决tracker服务器故障后,整个P2P后续无法正常运作的问题
DHT中没有tracker服务器作为中心,每个接入点DHT node都会维护两个表:
- 关键词字典:包含文件段和文件段hash值的对应关系
- 文件索引字典:包含文件段hash值和node ID、DHT node地址的对应关系(这个地址对应的DHT node可能有文件,也可能没有文件但是知道文件从哪个别的DHT node下载)。一个文件段一般对应多个DHT node地址,降低所有节点均不在线的可能
查询
根据关键词字典和文件索引字典找到该文件对应的所有DHT node地址,从有文件段的DHT node下载文件段,从没有文件段的DHT node再获取DHT node地址(这个地址对应的下一个DHT node,依然可能有文件,也可能没有文件但是知道从哪个别的DHT node下载)
更新
每个DHT node都只有4个指令(PING、STORE、FIND_NODE、FIND_VALUE),用来寻找节点、存储数据、判断节点连接状态
执行上述4个指令会进行对目标节点的状态进行判断,进而进行维护
3、域名系统(DNS)
为了让网站地址方便记忆,通常会通过域名来访问网站。将域名(www.baidu.com)映射为IP(220.181.38.149)的系统叫域名系统
3.1、DNS服务器
- 根DNS服务器:根据根域名(.com/.cn/.net等)返回顶级域DNS服务器的IP地址(全球只有13台,主根服务器在美国,其余12个辅根服务器,美国9个,英国1个,瑞典1个,日本1个)
- 顶级域DNS服务器:以根域名为标识,根据二级域名返回权威DNS服务器的IP地址
- 权威DNS服务器:返回相应主机的IP地址
3.2、DNS解析流程
为了方便,将DNS服务器简称为DNS,以www.baidu.com为例
- 客户端Client向【本地DNS】发起请求(【本地DNS】地址一般会在接入网络时通过DHCP协议配置,也可手动配置。DHCP一般获取的是网络运营商的DNS;如果内网配置了DNS,DHCP获取的就是你内网的DNS)
- 【本地DNS】寻找匹配的IP并返回,匹配不到就请求【根DNS】
- 【根DNS】通过根域名,返回对应的【顶级域DNS】地址给【本地DNS】(发www.baidu.com,找到负责.com的DNS)
- 【本地DNS】向【顶级域DNS】请求,返回对应的【权威DNS】地址(发www.baidu.com,找到负责baidu.com的DNS)
- 【权威DNS】返回完整域名对应的IP地址给【本地DNS】,【本地DNS】再返回给Client(发www.baidu.com,找到对应IP)
3.3、负载均衡
3.3.1、 内部负载均衡(SLB)
通过配置策略,将请求的域名通过A参数(这个参数在DNS里就叫A)解析为不同的IP,减小单台服务器压力
3.3.2、全局负载均衡(GSLB)——CDN加速
增加全局负载均衡器,根据作用一般有负责判断运营商的GSLB,和负责判断距离的GSLB,为了方便我们先叫他们GSLB1和GSLB2
在DNS解析流程后会有如下步骤:
- 【权威DNS】在第5步将【GSLB1的域名】返回给【本地DNS】
- 【本地DNS】访问【GSLB1】判断运营商,通过【本地DNS】的IP判断运营商,然后通过内部别名CNAME将【对应运营商的GSLB2】的域名返回给本地DNS
- 【本地DNS】访问【对应运营商的GSLB2】,通过内部策略返回距离客户端最近的区域中的对应运营商的服务器IP,再进行轮询访问
3.4、传统DNS存在的问题
域名缓存问题
上次请求时获取距离最近的DNS服务器,这次不一定是最近的,导致访问慢;有的运营商会把静态资源缓存到本运营商的服务器内,不及时更新,导致得到的数据过期
域名转发问题
跨运营商访问过程中会增加流量计算、价格计算、事务等多种操作,相比同运营商访问,这些多出来的操作会增加延迟。为了解决这个问题,有时一个公司的服务器会给不同服务器配置不同运营商ip,以减少延迟。
当运营商将请求转发给别的运营商,会导致权威DNS将【本地DNS】的IP解析为别的运营商,从而返回别的运营商的服务器IP,造成跨运营商访问
NAT出口问题
同样,如果网关将内网ip转外网ip时配置了固定的运营商,则也可能造成跨运营商访问
域名更新问题
当网站IP变更之后,【权威DNS】的IP缓存没有变,导致访问异常
解析延迟问题
递归遍历太耗时
3.5、HTTP DNS
网站自己搭建HTTP DNS服务器并开发一套客户端sdk,在解析域名时将运营商、地理位置等参数通过HTTP请求,从自己的HTTP DNS服务器获取IP地址列表,并有自己的缓存机制。自己的HTTP DNS不可用时替换为运营商的DNS
4、虚拟专用网络VPN
在公网上建立专用网络,进行加密通讯
4.1、IPSec VPN
IPsec VPN是基于IP实现的安全隧道协议,是一种十分安全的VPN
4.1.1、封装安全载荷协议(ESP)
报文组成
头部由安全参数索引(SPI,用于标识不同连接)、序列号、填充报文、鉴别数据、加密数据组成
填充报文:为了符合部分加密算法对加密数据的位数要求(包括填充长度、加密报文的第一个协议头的类型(在这里是IP)等)
鉴别数据ICV:用于数据完整性校验、身份校验等
传输模式和隧道模式
- 传输模式:填充报文数据,将TCP头和报文数据加密,在加密数据和IP头中间增加ESP头,并在报文尾部增加认证
- 隧道模式:填充报文数据,将TCP头、IP头和报文加密,在外部增加外部IP头和ESP头,并在报文尾部增加认证
公网VPN请求会打到网关,使用NAT协议变更IP,所以一般使用隧道模式,使用外层IP头进行公网NAT转换,内层IP头不变
4.1.2、建立和传输的过程
- 根据密钥交换算法(DH算法)生成对称密钥A
- 使用对称密钥A加密,规定好对称密钥B、B的加密算法、B的过期时间等信息
- 通过对称密钥B将报文加密封装
4.2、MPLS VPN
IPSec是基于IP的协议,需要动态路由不断计算生成路由表,效率较低
MPLS采用标签的方式,固定转发路径
4.2.1、多协议标签交换(MPLS)
是网络层的协议,数据链路层MAC头部的协议类型为0x8847表示MPLS
MPLS头部包括标签值20位、实验位CoS3位、栈底标志位S1位、过期时间TTL8位
标签交换路由器(LSR)
LSR中包含两个表:
- 路由表FIB:记录网段和标签的映射关系
- 标签转发表LFIB:记录和下游LSR的标签的映射关系
标签的构建过程
标签的构建过程是逆向的
- 下游LSR发现FIB中出现新的目标IP,便给该网段分配标签A,并通知上游LSR建立对标签A的映射
- 上游LSR得到通知,在LFIB中创建标签B对标签A映射,同时在FIB中建立网段和标签A的映射,并通知再上游
- 到达最上游LSR,就只在FIB中建立网段和他下游LSR标签的映射
通过标签的构建过程能形成一条到达的目标IP的路线,叫LSP
转发过程
- 入口LSR在FIB中,通过目标IP找到下游标签并添加到报文中,然后将报文转发给下游LSR
- 下游LSR在FLIB中,通过上游传递的标签,找到再下游标签并替换到报文中,然后将报文转发给再下游LSR
- 出口LSR去掉报文中的标签,直接根据目标IP进行转发
4.2.2、MPLS VPN骨干网
我们将MPLS VPN中的路由器分为3种:
- CE:直接与客户网络相连
- PE:连接客户网络和运营商网络
- P:运营商网络中的其他路由
报文转发顺序为:CE–>PE–>若干P–>对端PE–>对端CE
PE和P这两种架在源IP网和目标IP网之间形成的网络,进行VPN报文转发,叫MPLS VPN骨干网
虚拟路由转发实例(VRF)
一个PE中有多个VRF,每个VRF相当于一个虚拟路由器,手动配置发送和接受策略,然后通过BGP协议通知其他的PE和P
每个VRF中都有一个单独的路由表,用来维护【内网IP的网段】、【下一跳CE的外网IP】和外层标签的映射关系
一个PE中的多个VRF通过PE中的公网路由表进行维护,维护的是公网IP和内层标签的映射
转发过程
- 客户端Client发送请求报文到CE,CE转发给PE
- PE根据【外网IP的网段】,在公网路由表中找到专属VRF和内层标签,再通过【内网IP的网段】从专属VRF中找到外层标签,将内外层标签作为标签栈贴到报文头中,根据外层标签开始沿着LSP转发
- 倒数第二跳时,将外层标签拆掉,转发到对端PE
- 对端PE拆掉内层标签,并根据内层标签找到专属VRF,再通过【内网IP的网段】在路由表上找到【下一跳CE的外网IP】并转发
5、移动网络
5.1、2G
仅支持电话网络
5.1.1、无线接入网(RAN)
也叫基站子系统(BSS)
- 基站收发信台(BTS):对外提供无线网络
- 基站控制器(BSC):对内连接有线网络
5.1.2、核心网(CN)
也叫网络子系统(NSS)
- 移动业务交换中心(MSC):进入核心网的入口
- 鉴权中心(AUC):验证SIM卡的安全性
- 设备识别寄存器(EIR):根据黑白名单验证号码权限
- 访问位置寄存器(VLR):当前位置
- 归属位置寄存器(HLR):号码归属地
- 网关移动交换中心(GMSC):网关,用于接入电话网络(PSTN)
5.1.3、2G网络接入流程
- 移动设备访问BSS,由BTS接受无线信号,转给BSC,进入NSS
- 数据首先到达MSC,由MSC分发给AUC、EIR等组件进行安全校验,分发给VLR、HLR算出计费的单位价格,再交给GMSC
- GMSC接收请求,转发给PSTN
5.2、2.5G
支持IP网络
- 分组控制单元(PCU):属于BSS,将数据业务和语音业务分离
- 服务GPRS支持节点(SGSN):属于NSS,进行数据业务的鉴权、计费等操作
- 网关GPRS支持节点(GGSN):属于NSS,处理数据业务的网关
5.3、3G
无线通信技术的提升,使基站改变了
5.3.1、UMTS陆地无线接入网(UTRAN)
若干3G基站(Node B)+无线网络控制器(RNC)组成的UTRAN取代了过去的RAN
(UMTS是移动通信系统的缩写)
5.4、4G
5.4.1、演进的UMTS陆地无限接入网(E-UTRAN)
若干4G基站(E-Node B)组成的E-UTRAN取代了过去的UTRAN
5.4.2、CN的变动
过去的CN组件一个不留,由以下组件重新组成:
- 归属用户服务器(HSS):是一个查号码归属地和认证信息的数据库
- 核心控制网元(MME):根据HSS的结果判断合法性
- 服务网关(SGW):相当于原来的SGSN
- PDN网关(PGW):相当于原来的GGSN
- 策略和计费控制单元(PCRF):控制上网策略和流量计费
5.4.3、流控制传输协议(SCTP)
用来建立E-Node B和MME的连接
- 多宿主:双端分别绑定多个IP,形成多组IP对,一组IP对的失效并不会导致传输阻塞
- 分流:在SCTP报文头中指定流编号,使多个流同时发送且不会因顺序阻塞
- 四次握手:防止Dos攻击。服务端在进行SYN-ACK时,在报文中多返回Cookie字段,让客户端多发送一次报文请求进行Cookie校验(COOKIE-ECHO),服务端接收报文校验Cookie后再ACK响应。
- 消息分帧:将数据流封装成一个个帧发送,使服务端读取时不必进行数据流重组
- 三次挥手:放弃半关闭状态,未收到ACK也不重发
5.4.4、GPRS隧道协议(GTP)
- GTP-C:用来建立数据通路
- GTP-U:用来传输数据
6、云中网络
通俗讲就是现代云主机所应用的网络架构
云主机的本质是虚拟机,通过软件模拟硬件的方式,模拟CPU、内存、网络、硬盘等,使操作系统认为自己在使用独立的物理设备
6.1、TAP虚拟网卡
虚拟化软件(qemu-kvm)打开一个TUN/TAP的字符设备文件,在虚拟机里面虚拟出一张网卡,让所有网络包都往这个字符设备发
使用tunctl创建一个默认名称为tap0的虚拟网卡
tunctl -b
然后激活虚拟网卡
ip link set tap0 up
6.1.1、互通
属于同一用户的多个虚拟机之间应该可以相互通信
通过brctl创建虚拟网桥
brctl add br0
然后将之前创建好的多个虚拟网卡连接到虚拟网桥,然后配置相同网段
brctl addif br0 tap0
6.1.2、共享
多个虚拟网卡需要共享同一个出口,与物理机上的有限网卡交互
- 桥接:将物理机的物理网卡连接到虚拟网桥中,可以通过虚拟软件配置
- NAT:物理机的ip地址和虚拟机的ip地址是两套,虚拟机的ip地址通过内置虚拟DHCP服务器分配,然后再通过物理机中的NAT模块,将虚拟ip转换成物理ip
6.1.3、隔离
相同/不同物理机上的,属于不同用户的虚拟机需要相互隔离
虚拟局域网(VLAN)
使用vconfig命令在物理机上,为每个用户创建带VLAN标识的虚拟网卡,相同标识的网卡才可以相互通信
缺点是VLAN号只有12位,4096个严重不足
vconfig add eth0 100
通用路由封装协议(GRE)
数据链路层的协议,建立端(Tunnel端口)到端的连接,也是一种隧道技术,可以实现隔离。在MAC头外封装一层GRE头(GRE头外面还有一层外部IP头),里面有个24位的网络ID,解决VLAN号不足的问题
缺点是:
- tunnel数量过多会导致隧道数量过多
- 广播会从所有tunnel端口发出
- 市场上很多网络设备无法解析GRE
虚拟扩展局域网(VXLAN)
数据链路层协议,也是隧道技术,在内层协议外套一个VXLAN头(还有外层UDP头、外层IP头、外层MAC头)
将一台物理机中的多台虚拟机出口封装成一个出口VTEP,自己物理机的VTEP组播给其他物理机的VTEP,由其他物理机的VTEP在本地广播获取目标虚拟机IP,减少端到端的数量,并统一广播出口
6.2、软件定义网络(SDN)
通过软件控制网络设备
Open vSwitch
一种支持OpenFlow协议的虚拟交换软件,通过配置内部的流表规则,根据来源端口、报文头内容等,实现网络包的接收、转发、放弃
6.3、云中网络的流量控制技术
6.3.1、无类别队列规则
- pfifo_fast:根据IP头的服务类型(TOS),将网络包的权重由低到高分为band0、band1、band2,然后根据权重顺序发送
- 随机公平队列:根据TCP Session计算hash值,将不同连接的包放到不同队列,然后轮询从队列取出来发
- 令牌桶规则:定速生成令牌,队列中拿到令牌的网络包可以发
6.3.2、基于类别的队列规则
- 分层令牌桶规则:规则以树的形式呈现,每个节点设置总带宽、当前分配的带宽,然后根据ip、端口等信息向叶子结点传播
7、容器网络
7.1、容器隔离技术
7.1.1、命名空间(namespace)
使用ip link创建一个独立的网络空间,在网络空间中创建两个独立的虚拟网卡,分别连接内网网桥和外网网桥,虚拟机再连接内网网桥,就能通过这条通路,到达连接外网网桥的网卡进行NAT访问外网(外网网桥的网卡充当路由器的作用,需要手动配置)
7.1.2、机制网络(cgroup)
在指定目录下根据用户和进程id创建文件,设置请求转发规则,然后由Linux流量控制程序(TC)识别,根据标识进行请求转发
7.1.3、容器网络和物理网络的整合
以docker为例
- 创建一对可以相互通信的虚拟网卡
- 一个虚拟网卡插到物理机的虚拟网桥上
- 另一个虚拟网卡根据docker容器的pid(namespace)放到容器中
这样容器网络和物理网络就互通了
7.2、Flannel
k8s的Flannel使用UDP实现Overlay网络
TUN实现
- 物理机A上的容器发送请求,从容器内的虚拟网卡转发到物理机内的虚拟网桥
- 通过TUN/TAP在物理机内创建虚拟网卡flannel.1,接收虚拟网桥转发的网络包(类似SDN的quem-kvm)
- flanneld线程用UDP封装flannel.1的网络包,同时加上本机IP,发给物理机B的flanneld
- 物理机B的flanneld拆包,根据自己的路由规则,从虚拟网卡flannel.1往网桥发,再转发进容器
VXLAN实现
VXLAN的netlink技术提供用户态和内核态的通信,相比在用户态进行的TUN,性能较高
通过netlink让内核直接创建网卡flannel.1,并作为统一的出口VTEP使用
7.3、Calico
7.3.1、转发过程
- 在物理机A上设置一个指向网卡veth1的ARP缓存
- 容器发送ARP请求,获得veth1的MAC地址并请求veth1
- veth1读取物理机的内置路由规则,将请求转发到物理机B上
- 物理机B根据内置路由规则,将请求转发给容器
路由配置组件Felix
物理机节点加入网络时自动配置指向自己的路由
路由广播组件BGP Speaker
通过BGP协议,将路由信息传播给别的物理机节点
BGP Route Reflector
连接若干BGP Speaker,两两相连的路由统一管理
IPIP模式
在两个物理机节点间建立隧道,解决跨网段访问问题
网络协议——网络架构相关推荐
- 服务器和交换机之间网络协议,网络协议是计算机网络中服务器,计算机,交换机.doc...
网络协议是计算机网络中服务器,计算机,交换机 篇一:计算机网络-参考答案 (1)不能保证所有题目都在里面,但能保证大部分题目都在这里. (2)建议用快捷方式ctrl+f 进行答案的查找,关键字只需复制 ...
- 常见的网络协议-- 网络协议大全图(最全的)细分7层协议
网络协议划分: 物理层:以太网 · 调制解调器 · 电力线通信(PLC) · SONET/SDH · G.709 · 光导纤维 · 同轴电缆 · 双绞线等. 数据链路层:Wi-Fi(IEEE 802. ...
- 网络知识入门,网络协议体系架构(一)
1.常用网络知识目录 1)子网掩码.ip分段 .tcp三次握手四次切断.ip地址库,纯真库,自建ip库,ip寻址算法,ip寻址工具,dhcp,pppoe,udp协议 2)dns原理,相关网络命令,dn ...
- 网络协议-网络分层、TCP/UDP、TCP三次握手和四次挥手
网络的五层划分是什么? 应用层,常见协议:HTTP.FTP 传输层,常见协议:TCP.UDP 网络层,常见协议:IP 链路层 物理层 TCP 和 UDP 的区别是什么 TCP/UDP 都属于传输层的协 ...
- 网络协议--网络四层协议
协议相关的专业名词 ARP(Address Resolve Protocol)地址解析协议 RARP(Reverse Address Resolve Protocol)逆地址解析协议 WAN(Wide ...
- 难以置信,网易首席架构师竟用了 500 页笔记,把网络协议给趣谈了
最近业务发展迅速,团队非常缺人.我作为入职不久的新人被老大拉去做面试官(哎,长得帅就很多烦恼). 这段时间也面试了不少同学,10 位有 9 位都说自己懂网络协议.但真正面试的时候,能回答出相关问题的, ...
- 难以置信!网易首席架构师竟用了500页笔记,把网络协议给趣谈了
哈喽,最近业务发展迅速,团队非常缺人.我作为入职不久的新人被老大拉去做面试官(哎,长得帅就很多烦恼). 这段时间也面试了不少同学,10位有9位都说自己懂网络协议.但真正面试的时候,能回答出相关问题的, ...
- 难以置信,网易首席架构师竟用了500页笔记,把网络协议给趣谈了
java架构师成长思维导图:骆驼祥子思维导图 - GitMind[相关知识资料] 最近业务发展迅速,团队非常缺人.我作为入职不久的新人被老大拉去做面试官(哎,长得帅就很多烦恼). 这段时间也面试 ...
- 纳尼?华为首席架构师只用434页笔记,就将网络协议给拿下了
不管是前端还是后端,几乎所有的程序运行都会涉及到网络协议.10 个程序员里面,10 个都说自己学过网络协议,9 个说自己懂网络协议.但真正面试的时候,能回答出相关问题的,可能只有两三个. 金九银十跳槽 ...
最新文章
- 后端工程师入门前端页面重构(二):心法 I
- java bean join_spring data jpa 关联join查询出自定义实体java bean的坑
- 车仪表台上的装饰_仪表台放这个东西,相当于定时炸弹,很多人都忽略了
- SQLServer2008 Transact_SQL语言基础实例
- c++ 弧形面如何逆时针排序_环形导轨如何实现拐弯?
- 讲述一下Tomcat8005、8009、8080三个端口的含义?
- Lua——基本语法知识,从hello word开始
- fanuc机器人控制柜接线_FANUC涂胶标定参考
- python编写命令行框架_python的pytest框架之命令行参数详解(上)
- MongoDB Project Fields
- centos7 + python 2.7 + pip + openvswitch 杂项问题
- UIView方法,属性的集合
- c语言 python rsa库_python如何调用libcrypto实现RSA解密?
- graphs菜单_spss菜单栏中英文对照.ppt
- 机器学习入门:Kaggle -titanic(泰坦尼克)生存预测
- idea2019 换背景
- 第6周作业3-Fibonacci数列(网络131黄宇倩)
- 前端框架,库,组件,插件,控件的理解
- 读《如何有效阅读一本书:超实用笔记读书法》
- 脉冲宽度调制_20160121