admin 管理员组

文章数量: 887031

网络协议、

DHCP和PXE

  配置IP地址:使用ifconfig、ip addr设置,之后up网卡。
  Linnx默认逻辑,如果是一个跨网段的调用,不会直接将包发送到网络上,而是企图将包发送到网关。

  DHCP(动态主机配置协议):机器新加入网络,使用IP地址0.0.0.0发送广播包,这步称为DHCP Discover。网络里配置的DHCP Server,相当于IP管理员,为MAC配置唯一的IP地址,这个过程称为DHCP offer。 如果有多个DHCP Server,新机器收到多个IP地址,一般会选择最先到达的那个,并向网络噶送RHCP Request广播数据包,包中包含客户端Mac地址、接受的IP地址、提供此租约的DHCP服务器地址等,告诉未接受其IP的DHCP Server,撤销提供的IP地址。
  PXE(预启动执行环境):启动最简单的操作系统

从物理层到MAC层

  第一层(物理层);路由器
  第二层(数据链路层):即MAC层,媒体访问控制。多路访问问题(同时首发,数据混乱;先发后发),解决方案:(1)信道划分:各走各的(2)轮流协议:轮流收发 (3)随机接入协议:先发,发现拥堵等待后发。以太网使用此协议。交换机,根据策略转发,存有转发表。
  MAC层用来解决多路访问。
  ARP通过广播寻找目标MAC地址,在过期时间内保存缓存
  交换机有MAC地址学习能力

  STP(最小生成树):解决环路问题,将没有环路的图变成没有环路的树。通过互相发送BPDU将链路的路由器连接起来。
  解决安全问题和广播问题:物理隔离、虚拟隔离

ICMP

  ICMP(互联网控制报文协议):最常用主动请求为8,主动请求的应答为0.
  ping请求是查询报文,是一种主动请求,并且获得主动应答的ICMP协议。另一种差错报文,终点不可达为3,源抑制为4,超时为11,重定向为5.

动态路由算法:根据路由协议算法生成动态路由表,随网络运行状况的变化而变化。
1.距离矢量路由算法
  第一大类的算法称为距离矢量路由(distance vector routing)。它是基于 Bellman-Ford 算法的。这种算法的基本思路是,每个路由器都保存一个路由表,包含多行,每行对应网络中的一个路由器,每一行包含两部分信息,一个是要到目标路由器,从那条线出去,另一个是到目标路由器的距离。
  第一个问题就是好消息传得快,坏消息传得慢
  第二个问题是,每次发送的时候,要发送整个全局路由表

2. 链路状态路由算法
  第二大类算法是链路状态路由(link state routing),基于 Dijkstra 算法。这种算法的基本思路是:当一个路由器启动的时候,首先是发现邻居,向邻居 say hello,邻居都回复。然后计算和邻居的距离,发送一个 echo,要求马上返回,除以二就是距离。然后将自己和邻居之间的链路状态包广播出去,发送到整个网络的每个路由器。这样每个路由器都能够收到它和邻居之间的关系的信息。因而,每个路由器都能在自己本地构建一个完整的图,然后针对这个图使用 Dijkstra 算法,找到两点之间的最短路径。

动态路由协议:
1. 基于链路状态路由算法的 OSPF
  OSPF(Open Shortest Path First,开放式最短路径优先)就是这样一个基于链路状态路由协议,广泛应用在数据中心中的协议。由于主要用在数据中心内部,用于路由决策,因而称为内部网关协议(Interior Gateway Protocol,简称IGP)。
内部网关协议的重点就是找到最短的路径。在一个组织内部,路径最短往往最优。当然有时候 OSPF 可以发现多个最短的路径,可以在这多个路径中进行负载均衡,这常常被称为等价路由。
**2. 基于距离矢量路由算法的 BGP:**自治系统AS(Autonomous System)。自治系统分几种类型:
  Transit AS:有多个连接连到其他的 AS,并且可以帮助其他的 AS 传输包。例如主干网。
  Stub AS:对外只有一个连接。这类 AS 不会传输其他 AS 的包。例如,个人或者小公司的网络。
  Multihomed AS:可能有多个连接连到其他的 AS,但是大多拒绝帮其他的 AS 传输包。
  例如一些大公司的网络。每个自治系统都有边界路由器,通过它和外面的世界建立联系。

  **BGP 又分为两类,eBGP 和 iBGP。**自治系统间,边界路由器之间使用 eBGP 广播路由。内部网络也需要访问其他的自治系统。边界路由器如何将 BGP 学习到的路由导入到内部网络呢?就是通过运行 iBGP,使得内部的路由器能够找到到达外网目的地的最好的边界路由器。
  BGP 协议使用的算法是路径矢量路由协议(path-vector protocol)。它是距离矢量路由协议的升级版。前面说了距离矢量路由协议的缺点。其中一个是收敛慢。在 BGP 里面,除了下一跳 hop之外,还包括了自治系统 AS 的路径,从而可以避免坏消息传的慢的问题,也即上面所描述。

UDP和TCP

  建立连接,是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的面向连接的特性。
面向连接的服务就是通信双方在通信时,要事先建立一条通信线路,其过程有建立连接、使用连接和释放连接

面向连接与无连接的优缺点:
  面向连接优点:实时通信 / 可靠信息流 / 信息回复确认;
  面向连接缺点:占用通信道;无连接优点:不占用通信信道;
  无连接缺点:非实时通信 / 信息流可能丢失 / 信息无回复确认

三个过程。
  TCP 提供可靠交付。通过 TCP 连接传输的数据,无差错、不丢失、不重复、并且按序到达。我们都知道 IP 包是没有任何可靠性保证的,一旦发出去,就像西天取经,走丢了、被妖怪吃了,都只能随它去。但是 TCP 号称能做到那个连接维护的程序做的事情,这个下两节我会详细描述。而UDP 继承了 IP 包的特性,不保证不丢失,不保证按顺序到达。
  TCP 是面向字节流的。发送的时候发的是一个流,没头没尾。IP 包可不是一个流,而是一个个的 IP 包。之所以变成了流,这也是 TCP 自己的状态维护做的事情。而UDP 继承了 IP 的特性,基于数据报的,一个一个地发,一个一个地收。
  TCP 是可以有拥塞控制的。它意识到包丢弃了或者网络的环境不好了,就会根据情况调整自己的行为,看看是不是发快了,要不要发慢点。UDP 就不会,应用让我发,我就发,管它洪水滔天。
TCP 其实是一个有状态服务,通俗地讲就是有脑子的,里面精确地记着发送了没有,接收到没有,发送到哪个了,应该接收哪个了,错一点儿都不行。而UDP 则是无状态服务。通俗地说是没脑子的,天真无邪的,发出去就发出去了。

UDP三大特点:沟通简单、轻信他人、不懂变化。应用场景:第一,需要资源少,在网络情况比较好的内网,或者对于丢包不敏感的应用。第二,不需要一对一沟通,建立连接,而是可以广播的应用。第三,需要处理速度快,时延低,可以容忍少数丢包,但是要求即便网络拥塞,也毫不退缩,一往无前的时候。

  QUIC(全称Quick UDP Internet Connections,快速 UDP 互联网连接)是 Google提出的一种基于 UDP 改进的通信协议,其目的是降低网络通信的延迟,提供更好的用户互动体验。

  顺序问题、丢包问题、流量控制都是通过滑动窗口来解决的,这其实就相当于你领导和你的工作备忘录,布置过的工作要有编号,干完了有反馈,活不能派太多,也不能太少;拥塞控制是通过拥塞窗口来解决的,相当于往管道里面倒水,快了容易溢出,慢了浪费带宽,要摸着石头过河,找到最优值。

DNS解析


DNS:网络世界的地址簿
传统DNS存在的问题:
1.域名缓存问题
2.域名转发问题
3.出口NAT问题
4.域名更新问题
5.解析延迟问题
  HTTPNDS 其实就是,不走传统的 DNS 解析,而是自己搭建基于 HTTP 协议的 DNS 服务器集群,分布在多个地点和多个运营商。当客户端需要 DNS 解析的时候,直接通过HTTP 协议进行请求这个服务器集群,得到就近的地址。
  HTTPDNS 就是将解析速度和更新速度全部掌控在自己手中。一方面,解析的过程,不需要本地 DNS 服务递归的调用一大圈,一个 HTTP 的请求直接搞定,要实时更新的时候,马上就能起作用;另一方面为了提高解析速度,本地也有缓存,缓存是在客户端 SDK 维护的,过期时间、更新时间,都可以自己控制。

VPN

  VPN,全名Virtual Private Network,虚拟专用网,就是利用开放的公众网络,建立专用数据传输通道,将远程的分支机构、移动办公人员等连接起来。VPN 通过隧道技术在公众网络上仿真一条点到点的专线,是通过利用一种协议来传输另外一种协议的技术,这里面涉及三种协议:乘客协议、隧道协议和承载协议。

  一种十分安全的VPN,IPsec VPN。这是基于 IP 协议的安全隧道协议,为了保证在公网上面信息的安全,因而采取了一定的机制保证安全性。
机制一:私密性,防止信息泄漏给未经授权的个人,通过加密把数据从明文变成无法读懂的密文,从而确保数据的私密性。
机制二:完整性,数据没有被非法篡改,通过对数据进行 hash 运算,产生类似于指纹的数据摘要,以保证数据的完整性。
机制三:真实性,数据确实是由特定的对端发出,通过身份认证可以保证数据的真实性。

如何保证对方就是真正的那个人呢?
第一种:预共享秘钥
另一种:用数字签名验证

OSI



连接和端口

telnet Port:检查端口连通性
ping IP: 检查网络连通性
curl ip:port

公有云认证:AK/SK

  公有云认证方式主要有:1、Token认证, 2、AK/SK认证, 3、RSA非对称加密方。
AK/SK
1.AK/SK 原理
  云主机需要通过使用Access Key Id (访问秘钥ID)/ Secret Access Key(私有访问秘钥)加密的方法来验证某个请求的发送者身份。Access Key Id(AK)用于标示用户,Secret Access Key(SK)是用户用于加密认证字符串和云厂商用来验证认证字符串的密钥,其中SK必须保密。 AK/SK原理使用对称加解密。
2.AK/SK 使用机制
  云主机接收到用户的请求后,系统将使用AK对应的相同的SK和同样的认证机制生成认证字符串,并与用户请求中包含的认证字符串进行比对。如果认证字符串相同,系统认为用户拥有指定的操作权限,并执行相关操作;如果认证字符串不同,系统将忽略该操作并返回错误码。
3.流程
  判断用户请求中是否包含Authorization认证字符串。如果包含认证字符串,则执行下一步操作。
  基于HTTP请求信息,使用相同的算法,生成Signature字符串。
  使用服务器生成的Signature字符串与用户提供的字符串进行比对,如果内容不一致,则认为认证失败,拒绝该请求;如果内容一致,则表示认证成功,系统将按照用户的请求内容进行操作。
   原理:
       客户端:
           1. 构建http请求(包含 access key);
           2. 使用请求内容和 使用secret access key计算的签名(signature);
           3. 发送请求到服务端。

    服务端:

1. 根据发送的access key 查找数据库得到对应的secret-key;
     2. 使用同样的算法将请求内容和 secret-key一起计算签名(signature),与客户端步骤2相同;
     3. 对比用户发送的签名和服务端计算的签名,两者相同则认证通过,否则失败。
TOEKN
1.Token认证:
  使用Token认证方式完成认证鉴权时,用户首先需要获取token,在调用接口时增加“X-XXX-Token”到业务接口请求消息头中。
2.流程
  发送请求,获取IAM的Endpoint及消息体中的区域名称。
  获取Token。请求响应成功后在响应消息头中包含的“X-YYY-Token”的值即为Token值。
  调用业务接口,在请求消息头中增加“X-XXX-Token”,取值为2中获取的Token。

对象存储OSS与对象存储服务OBS

  对象存储OSS是在云上提供无层次结构的分布式存储产品,为用户提供单价较低且快速可靠的数据存储方案。用户可通过云服务器实例或互联网使用 Web API 接口存储和检索数据。在 OSS 上的数据,用户使用指定域名的 URL 地址,通过 HTTP/HTTPS 协议存储和检索每个独立的数据对象

  简单理解,类似酒店的代客泊车。顾客(前端应用)把车钥匙交给服务生,换来一张收据(对象的标识符)。顾客不用关心车(数据)具体停在车库(存储)的哪个车位,这样省事儿、省时间。

对象存储的优点:
  1.可扩展性高:对外服务是可以宣称做到空间无限的,用户不用担心空间不够的问题;
  2.安全性高:对象存储通常凭借HTTP调用对象存储本身提供的认证密钥来提供数据访问;
  3.效率高:扁平化结构,不受复杂目录系统对性能的影响;
  4.成本低:与块存储方式相比,对象存储是最具成本效益的数据存储类型,并且与云计算搭配,把对象存储的这一特性发挥的淋漓尽致。
  5.访问方便:对象存储提供开放的REST API接口。程序员在开发应用时,直接把存储参数写进代码,就可以通过API接口调用对象存储里的数据。相比文件存储那一串串的路径,对象存储要方便很多。(对象存储需求用户,并不是个人买来当网盘用,而是企业或政府用户用于系统数据存储。例如企业系统的归档数据,网站、App的静态图片、音频、视频等。)

  1.对象存储服务OBS(Object Stroage Service)是一个高可靠、高性能、高安全的基于对象的海量存储云服务,适合存储任一大小和类型的数据。
优势:
  高可靠:OBS提供数据检查、分片冗余、自动修复、使数据持久性高达99.9999999999%
  高安全:SSL传输加密、服务端加密、身份鉴权等多重安全防护
  高效率:大并发、大带宽、低时延的访问体验
  低成本
2.OBS通过如下方式实现备份和容灾:
  创建桶时开启多AZ属性,用户数据冗余存储至多个AZ中。
  通过跨区复制功能。用户可以将一个区域的桶中数据复制到另一个区域,实现云端备份。
  将OBS中的数据下载到本地,本地备份数据。

ARP解析


  主机先在自己的ARP缓冲区中寻找映射,如果有(直接填充于以太网帧中),如果没有,通过路由广播请求,这时一些联网的主机就会收到这个请求,并将这个请求传回网络层,对比IP地址,检验是否可以接受,如果不行,则直接丢失这个信息,如果可以那么回复ARP请求,并且将源主机的MAC地址加入到目的ARP缓冲区中,形成映射,源主机接受到请求后,将目的的MAC地址加入到ARP缓冲区,也形成映射,并将mac地址传输至连接层。此时转化完成。

HTTP

  在 HTTP/1.x 中,HTTP 请求就是传输过程中最小粒度的信息单位了,所以如果将多个请求切碎,再混杂在一块传输,客户端势必难以分辨重组出有效信息。
  在 HTTP/2 中,帧(Frame)才是最小粒度的信息单位,它可以用来描述各种数据,譬如请求的 Headers、Body,或者用来做控制标识,譬如打开流、关闭流。这里说的流(Stream)是一个逻辑上的数据通道概念,每个帧都附带一个流 ID 以标识这个帧属于哪个流。这样,在同一个 TCP 连接中传输的多个数据帧就可以根据流 ID 轻易区分出开来,在客户端毫不费力地将不同流中的数据重组出不同 HTTP 请求和响应报文来。这项设计是 HTTP/2 的最重要的技术特征一,被称为 HTTP/2 多路复用(HTTP/2 Multiplexing)技术。
  HTTP/3启用了名为“快速 UDP 网络连接”(Quick UDP Internet Connections,QUIC)的全新传输协议。QUIC 会以 UDP 协议为基础,而 UDP 协议没有丢包自动重传的特性,因此 QUIC 的可靠传输能力并不是由底层协议提供,而是完全由自己来实现。由 QUIC 自己实现的好处是能对每个流能做单独的控制,如果在一个流中发生错误,协议栈仍然可以独立地继续为其他流提供服务。这对提高易出错链路的性能非常有用,因为在大多数情况下,TCP 协议接到数据包丢失或损坏通知之前,可能已经收到了大量的正确数据,但是在纠正错误之前,其他的正常请求都会等待甚至被重发。

CDN

内容分发网络(Content Distribution Network),内容分发网络的工作过程,主要涉及路由解析、内容分发、负载均衡和所能支持的 CDN 应用内容四个方面.
1.内容分发
主要有以下两种主流的内容分发方式:
(1)主动分发(Push):分发由源站主动发起,将内容从源站或者其他资源库推送到用户边缘的各个 CDN 缓存节点上。这个推送的操作没有什么业界标准可循,可以采用任何传输方式(HTTP、FTP、P2P,等等)、任何推送策略(满足特定条件、定时、人工,等等)、任何推送时间,只要与后面说的更新策略相匹配即可。由于主动分发通常需要源站、CDN 服务双方提供程序 API 接口层面的配合,所以它对源站并不是透明的,只对用户一侧单向透明。主动分发一般用于网站要预载大量资源的场景。
(2)被动回源(Pull):被动回源由用户访问所触发全自动、双向透明的资源缓存过程。当某个资源首次被用户请求的时候,CDN 缓存节点发现自己没有该资源,就会实时从源站中获取,这时资源的响应时间可粗略认为是资源从源站到 CDN 缓存节点的时间,再加上资源从 CDN 发送到用户的时间之和。因此,被动回源的首次访问通常是比较慢的(但由于 CDN 的网络条件一般远高于普通用户,并不一定就会比用户直接访问源站更慢),不适合应用于数据量较大的资源。被动回源的优点是可以做到完全的双向透明,不需要源站在程序上做任何的配合,使用起来非常方便。这种分发方式是小型站点使用 CDN 服务的主流选择,如果不是自建 CDN,而是购买阿里云、腾讯云的 CDN 服务的站点,多数采用的就是这种方式。
2.CDN 应用
加速静态资源、安全防御、协议升级、状态缓存、修改资源、访问控制、注入功能
3.路由解析

4.负载均衡

网络编程

BIO(同步阻塞):一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理。线程开销大。
伪异步IO:将请求连接放入线程池,一对多,但线程还是很宝贵的资源。
NIO(同步非阻塞):一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。
AIO(异步非阻塞):一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。

本文标签: 网络协议