网络协议——网络架构


很抱歉懒了没有网络拓扑图

1、对等网络(P2P)

在加入p2p网络占用网络参与者的带宽获取文件的同时,也提供带宽供其他下载相同文件的参与者,下载自己已下载的文件片段

主要解决单台服务器带宽压力

内容分发协议之BitTorrent协议

后缀.torrent,俗称BT种子文件,主要用来提供哪些参与者拥有哪些资源,由以下信息组成

  • announce:tracker服务器地址,tracker服务器主要提供其他参与者的地址列表
  • info区:表示该种子有几个文件段、文件有多大、目录结构、文件名字
  • Name字段:顶层目录的名字
  • 每个段的大小:每个文件段的大小,支持BT分段下载
  • 段hash值:将每个文件段的SHA-1 hash值拼在一起

下载过程

  1. 客户端Client解析.torrent,获取Tracker Server的地址
  2. Tracker Server记录Client的信息,响应发布者和所有下载相同文件的下载者的IP地址
  3. Client和其他下载者建立连接,互相下载自己没有的文件段
  4. 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为例

  1. 客户端Client向【本地DNS】发起请求(【本地DNS】地址一般会在接入网络时通过DHCP协议配置,也可手动配置。DHCP一般获取的是网络运营商的DNS;如果内网配置了DNS,DHCP获取的就是你内网的DNS)
  2. 【本地DNS】寻找匹配的IP并返回,匹配不到就请求【根DNS】
  3. 【根DNS】通过根域名,返回对应的【顶级域DNS】地址给【本地DNS】(发www.baidu.com,找到负责.com的DNS)
  4. 【本地DNS】向【顶级域DNS】请求,返回对应的【权威DNS】地址(发www.baidu.com,找到负责baidu.com的DNS)
  5. 【权威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解析流程后会有如下步骤:

  1. 【权威DNS】在第5步将【GSLB1的域名】返回给【本地DNS】
  2. 【本地DNS】访问【GSLB1】判断运营商,通过【本地DNS】的IP判断运营商,然后通过内部别名CNAME将【对应运营商的GSLB2】的域名返回给本地DNS
  3. 【本地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、建立和传输的过程

  1. 根据密钥交换算法(DH算法)生成对称密钥A
  2. 使用对称密钥A加密,规定好对称密钥B、B的加密算法、B的过期时间等信息
  3. 通过对称密钥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的标签的映射关系

标签的构建过程

标签的构建过程是逆向的

  1. 下游LSR发现FIB中出现新的目标IP,便给该网段分配标签A,并通知上游LSR建立对标签A的映射
  2. 上游LSR得到通知,在LFIB中创建标签B对标签A映射,同时在FIB中建立网段和标签A的映射,并通知再上游
  3. 到达最上游LSR,就只在FIB中建立网段和他下游LSR标签的映射

通过标签的构建过程能形成一条到达的目标IP的路线,叫LSP

转发过程

  1. 入口LSR在FIB中,通过目标IP找到下游标签并添加到报文中,然后将报文转发给下游LSR
  2. 下游LSR在FLIB中,通过上游传递的标签,找到再下游标签并替换到报文中,然后将报文转发给再下游LSR
  3. 出口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和内层标签的映射

转发过程

  1. 客户端Client发送请求报文到CE,CE转发给PE
  2. PE根据【外网IP的网段】,在公网路由表中找到专属VRF和内层标签,再通过【内网IP的网段】从专属VRF中找到外层标签,将内外层标签作为标签栈贴到报文头中,根据外层标签开始沿着LSP转发
  3. 倒数第二跳时,将外层标签拆掉,转发到对端PE
  4. 对端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网络接入流程

  1. 移动设备访问BSS,由BTS接受无线信号,转给BSC,进入NSS
  2. 数据首先到达MSC,由MSC分发给AUC、EIR等组件进行安全校验,分发给VLR、HLR算出计费的单位价格,再交给GMSC
  3. 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为例

  1. 创建一对可以相互通信的虚拟网卡
  2. 一个虚拟网卡插到物理机的虚拟网桥上
  3. 另一个虚拟网卡根据docker容器的pid(namespace)放到容器中

这样容器网络和物理网络就互通了

7.2、Flannel

k8s的Flannel使用UDP实现Overlay网络

TUN实现

  1. 物理机A上的容器发送请求,从容器内的虚拟网卡转发到物理机内的虚拟网桥
  2. 通过TUN/TAP在物理机内创建虚拟网卡flannel.1,接收虚拟网桥转发的网络包(类似SDN的quem-kvm)
  3. flanneld线程用UDP封装flannel.1的网络包,同时加上本机IP,发给物理机B的flanneld
  4. 物理机B的flanneld拆包,根据自己的路由规则,从虚拟网卡flannel.1往网桥发,再转发进容器

VXLAN实现

VXLAN的netlink技术提供用户态和内核态的通信,相比在用户态进行的TUN,性能较高

通过netlink让内核直接创建网卡flannel.1,并作为统一的出口VTEP使用

7.3、Calico

7.3.1、转发过程

  1. 在物理机A上设置一个指向网卡veth1的ARP缓存
  2. 容器发送ARP请求,获得veth1的MAC地址并请求veth1
  3. veth1读取物理机的内置路由规则,将请求转发到物理机B上
  4. 物理机B根据内置路由规则,将请求转发给容器

路由配置组件Felix

物理机节点加入网络时自动配置指向自己的路由

路由广播组件BGP Speaker

通过BGP协议,将路由信息传播给别的物理机节点

BGP Route Reflector

连接若干BGP Speaker,两两相连的路由统一管理

IPIP模式

在两个物理机节点间建立隧道,解决跨网段访问问题

网络协议——网络架构相关推荐

  1. 服务器和交换机之间网络协议,网络协议是计算机网络中服务器,计算机,交换机.doc...

    网络协议是计算机网络中服务器,计算机,交换机 篇一:计算机网络-参考答案 (1)不能保证所有题目都在里面,但能保证大部分题目都在这里. (2)建议用快捷方式ctrl+f 进行答案的查找,关键字只需复制 ...

  2. 常见的网络协议-- 网络协议大全图(最全的)细分7层协议

    网络协议划分: 物理层:以太网 · 调制解调器 · 电力线通信(PLC) · SONET/SDH · G.709 · 光导纤维 · 同轴电缆 · 双绞线等. 数据链路层:Wi-Fi(IEEE 802. ...

  3. 网络知识入门,网络协议体系架构(一)

    1.常用网络知识目录 1)子网掩码.ip分段 .tcp三次握手四次切断.ip地址库,纯真库,自建ip库,ip寻址算法,ip寻址工具,dhcp,pppoe,udp协议 2)dns原理,相关网络命令,dn ...

  4. 网络协议-网络分层、TCP/UDP、TCP三次握手和四次挥手

    网络的五层划分是什么? 应用层,常见协议:HTTP.FTP 传输层,常见协议:TCP.UDP 网络层,常见协议:IP 链路层 物理层 TCP 和 UDP 的区别是什么 TCP/UDP 都属于传输层的协 ...

  5. 网络协议--网络四层协议

    协议相关的专业名词 ARP(Address Resolve Protocol)地址解析协议 RARP(Reverse Address Resolve Protocol)逆地址解析协议 WAN(Wide ...

  6. 难以置信,网易首席架构师竟用了 500 页笔记,把网络协议给趣谈了

    最近业务发展迅速,团队非常缺人.我作为入职不久的新人被老大拉去做面试官(哎,长得帅就很多烦恼). 这段时间也面试了不少同学,10 位有 9 位都说自己懂网络协议.但真正面试的时候,能回答出相关问题的, ...

  7. 难以置信!网易首席架构师竟用了500页笔记,把网络协议给趣谈了

    哈喽,最近业务发展迅速,团队非常缺人.我作为入职不久的新人被老大拉去做面试官(哎,长得帅就很多烦恼). 这段时间也面试了不少同学,10位有9位都说自己懂网络协议.但真正面试的时候,能回答出相关问题的, ...

  8. 难以置信,网易首席架构师竟用了500页笔记,把网络协议给趣谈了

       java架构师成长思维导图:骆驼祥子思维导图 - GitMind[相关知识资料] 最近业务发展迅速,团队非常缺人.我作为入职不久的新人被老大拉去做面试官(哎,长得帅就很多烦恼). 这段时间也面试 ...

  9. 纳尼?华为首席架构师只用434页笔记,就将网络协议给拿下了

    不管是前端还是后端,几乎所有的程序运行都会涉及到网络协议.10 个程序员里面,10 个都说自己学过网络协议,9 个说自己懂网络协议.但真正面试的时候,能回答出相关问题的,可能只有两三个. 金九银十跳槽 ...

最新文章

  1. 后端工程师入门前端页面重构(二):心法 I
  2. java bean join_spring data jpa 关联join查询出自定义实体java bean的坑
  3. 车仪表台上的装饰_仪表台放这个东西,相当于定时炸弹,很多人都忽略了
  4. SQLServer2008 Transact_SQL语言基础实例
  5. c++ 弧形面如何逆时针排序_环形导轨如何实现拐弯?
  6. 讲述一下Tomcat8005、8009、8080三个端口的含义?
  7. Lua——基本语法知识,从hello word开始
  8. fanuc机器人控制柜接线_FANUC涂胶标定参考
  9. python编写命令行框架_python的pytest框架之命令行参数详解(上)
  10. MongoDB Project Fields
  11. centos7 + python 2.7 + pip + openvswitch 杂项问题
  12. UIView方法,属性的集合
  13. c语言 python rsa库_python如何调用libcrypto实现RSA解密?
  14. graphs菜单_spss菜单栏中英文对照.ppt
  15. 机器学习入门:Kaggle -titanic(泰坦尼克)生存预测
  16. idea2019 换背景
  17. 第6周作业3-Fibonacci数列(网络131黄宇倩)
  18. 前端框架,库,组件,插件,控件的理解
  19. 读《如何有效阅读一本书:超实用笔记读书法》
  20. 脉冲宽度调制_20160121

热门文章

  1. java redis 管道_4个点让你彻底明白Redis的各项功能
  2. 百度人脸识别sdk-转
  3. 多益2018春招前端技术面试
  4. 日本亚马逊不能访问怎么解决!
  5. 企业邮箱必须注意的三大安全问题
  6. java 下载暂停实现_Java实现多线程断点下载(下载过程中可以暂停)
  7. (Gradle实操)一步步使用Android Studio配置Gradle并运行Github开源源码
  8. PictureSelector(强大的图片选择器)
  9. 智能家居实体门店老板如何搭建线上运营体系,实现业绩倍增?
  10. 如何用163.net邮箱写好一份专业得体的商务邮件?