网络协议

  • 位(bit):是计算机 内部数据 储存的最小单位,11001100是一个八位二进制数
  • 字节(byte):是计算机中 数据处理 的基本单位,习惯上用大写 B 来表示,1B(byte,字节)= 8bit(位)
  • 字符:是指计算机中使用的字母、数字、字和符号
  • ASCIIS码:
             1个英文字母(不分大小写)= 1个字节的空间
  • UTF-8编码:
            1个英文字符 = 1个字节 英文标点 = 1个字节
            1个中文(含繁体) = 3个字节
            中文标点 = 3个字节
  • Unicode字符集:
            1个英文字符 = 2个字节
            英文标点 = 2个字节
            1个中文(含繁体) = 2个字节
            中文标点 = 2个字节

Bit意为“位”或“比特”,是计算机运算的基础,属于二进制的范筹;
Byte意为“字节”,是计算机文件大小的基本计算单位;
这两者应用的场合不同。
- 通常用bit来作数据传输的单位,因为物理层,数据链路层的传输对于用户是透明的,而这种通信传输是基于二进制的传输
- 在应用层通常是用byte来作单位,表示文件的大小,在用户看来就是可见的数据大小。比如一个字符就是1byte,如果是汉字,则是2byte。
下面是2个具体应用实例:
Mbps=mega bits per second(兆位/秒)是速率单位,
MB=mega bytes(兆比、兆字节)是量单位,1MB/S(兆字节/秒)=8MBPS(兆位/秒)。
我们所说的硬盘容量是40GB、80GB、100GB,这里的B指是的Byte也就是“字节”。(与容量相关,应用层)
1 KB = 1024 bytes =2^10 bytes
1 MB = 1024 KB = 2^20 bytes
1 GB = 1024 MB = 2^30 bytes
USB2.0标准接口传输速率是480兆位/秒,即480MBps。这里的B指是的Bit也就是“位”。(与传输相关,底层)

注:另外,Byte通常简写为B(大写),而bit通常简写为b(小写)。可以这么记忆,用大写的就是数据值比较大的位,而小字的就是数据值比较小的字节,1B=8b。

2M网速
2M带宽其实是2Mbps,2Mb约为250KB(1B=8b),虽然理论上能到250KBps
实际约200KBPS就不错了

1、HTTP(所有的不加密的协议)的缺点(痛点):、

  •         从浏览器输入一个地址,发送请求,经历了哪些过程(面试问题)
  •         最透彻
  •         HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范
  •         易被窃听,使用明文(未加密的报文)
  •         无身份验证
  •         易被篡改,无法证明报文的完整性
  •         内容加密的痛点:
  •         由于这种加密方式不同于SSL或TLS将整个通信线路加密处理,所以内容仍有被篡改的风险 破坏了接收方收到的信息
  •          SSL协议做的事情,其实就是数据加密,身份认证,保证数据完整性不被篡改}

HTTPS:

SSL 数据传输有两个作用,
一个是加密,这依靠的是非对称加密,准确说是公私钥构成的加密体系即公开密钥加密,避免互联网中传输的数据被中间人窃听;
另一个是鉴证,也就是依靠数字签名和证书链实现的身份鉴别,如果出现中间人对数据进行窃听或重定向,由于证书包含数字签名,这样客户就能区分什么证书是可信的、什么是不可信的。

小结:
数字签名signature = 使用私钥对摘要digest加密
数字证书CA = 为公钥做认证 用自己私钥对服务的公钥和相关信息加密
服务器用自己的私钥加密网页以后,连同本身的数字证书
如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息。

CA证书是集群所有节点共享的,只需要创建一个CA证书,后续创建的所有证书都是由它签名,用CA的根证书对申请人的一些基本信息以及申请人的公钥进行签名(相当于加盖发证书机 构的公章)后形成的一个数字文件。实际上,数字证书就是经过CA认证过的公钥

服务端需要使用的文件是:server私钥(key), server证书。 
客户端需要使用的文件是:CA file(ca的证书=ca的公钥,用以验证server下发的证书)

CAA 和 A 记录一样,都是 DNS 记录的一部分,如果一个 CA 接受到了证书生成的请求,它首先会访问这个域名在 DNS 中对应的 CAA 记录,查看其中包含的信息。如果 CAA 记录允许这个 CA 生成证书,它才会进行接下来的操作,否则将会拒绝证书申请。除此之外,CAA 记录还支持在证书申请时告知特定邮箱(比如域名持有者),警惕持有者:有用户正在伪造你的身份。

痛点:

  •         技术门槛较高 CA机构颁发的证书都是需要年费的 也需要额外的技术支持
  •         目前来说大多数网站并不关心数据的安全性和保密性
  •         https加重了服务端的负担,同时也降低了用户的访问速度
  •         目前来说Http网站仍然大规模使用,在浏览器侧也没有特别大的差别,很多用户不关心的话根本不感知

cookie,session,token:

  •         【1】
  •         【2】
  •         token和session都是为了身份验证,session被翻译为会话,token被翻译为令牌。
  •         身份认证 token安全性比session好,因为每个请求都有签名还能防止监听以及重放攻击,而session就必须靠链路层来保障通讯安全。
  •         session和token都需要去管理过期时间。
  •         时间与空间的博弈:session是空间换时间,而token是时间换空间。

2、TCP

动画讲解
TCP/IP是可以被窃听的网络,每个TCP/IP主机支持全双工数据传输
b站视频讲网络

  • 1.为什么是三次握手?
         - 两次会导致不必要的错误和资源的浪费
  • 2.四次挥手,为什么客户端最后还要等待2MSL?
        - 第一,保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失。
        - 第二,防止失效请求
  • 3.为什么建立连接是三次握手,关闭连接却是四次挥手呢?
        - 建立连接的时候, 服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。
        - 关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了,但是还能接收数据,而自己也未必全部数据都发送给对方了,己方ACK和FIN一般都会分开发送,从而导致多了一次。
  • 4.TCP通过三个简单的工具来完成其差错控制:检验和、确认以及超时;
  • 5.TCP的设计理念是:TCP不是一个自私的协议,当拥塞发生的时候,要做自我牺牲。就像交通阻塞一样,每个车都应该把路让出来,而不要再去抢路了。
  • 6.滑动窗口协议,是TCP使用的一种流量控制方法;
  • 拥塞控制:利用以上的措施要完全避免网络拥塞还是不可能的。“拥塞避免”是说在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。
    在这里插入图片描述

3、IP

在这里插入图片描述

4、以太帧 Ethernet Ⅱ

类型:IPv4: 0x0800;ARP:0x0806;PPPoE:0x8864;802.1Q tag: 0x8100;IPV6: 0x86DD;MPLS Label:0x8847
在这里插入图片描述

5、TCP和HTTP常见问题:

1、HTTP 连接最显著的特点:hypertext transfer protocol
  •         客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接;
  •         HTTP 是应用层协议,主要解决如何包装数据。
2、TCP/IP 主要解决数据如何在网络中传输,IP 协议对应于网络层
3、现代浏览器在与服务器建立了一个TCP连接后是否会在一个HTTP请求完成后断开?什么情况下会断开?
  •         HTTP/1.1 把Connection头写进标准,默认情况下建立TCP连接不会断开,只有在请求报头中声明Connection:close才会在请求完成后关闭连接
4、一个TCP连接可以对应几个HTTP请求?
  •         多个
5、一个TCP连接中多个HTTP请求发送可以一起发送么?
  •         HTTP/1.1 存在一个问题,单个TCP连接在同一时刻只能处理一个请求==两个请求的生命周期不能重叠,任意两个HTTP请求从开始到结束的时间在同一个TCP连接里不能重叠
  •         HTTP/1.1 协议中用Pipelining来视图解决,因存在许多问题(在浏览器中默认是关闭的)
  •         HTTP2 提供Multiplexing多路传输特性,多个 HTTP 请求可以在同一个 TCP 连接中并行进行
  •         那么在 HTTP/1.1 时代,浏览器是如何提高页面加载效率的呢?(维持和服务器已经建立的 TCP 连接,在同一连接上顺序处理多个请求++和服务器建立多个 TCP 连接)
6、为什么有时候刷新页面不需要重新建立SSL连接?
  •         TCP不需要重新建立,SSL自然也会用之前的
7、浏览器对同一Host建立TCP连接到数量有没有限制?
  •         Chrome最多允许对同一个Host建立6个TCP连接
8、收到的HTML如果包含几十个图片标签,这些图片是以什么方式、什么顺序、建立多少连接、使用什么协议被下载下来的?
  •         如果图片都是 HTTPS 连接并且在同一个域名下,那么浏览器在 SSL 握手之后会和服务器商量能不能用 HTTP2,如果能的话就使用 Multiplexing 功能在这个连接上进行多路传输,不过也未必会所有挂在这个域名的资源都会使用一个TCP连接去获取。如果发现 HTTP/2 不能用,那浏览器就会在一个HOST上建立多个TCP连接。如果所有的连接都正在发送请求呢?那其他的请求只能等等了。
9、序列号回绕
10、syn flood攻击
  •         无效连接的监视释放
  •         延缓 TCB 分配方法
  •         使用 SYN Proxy 防火墙
11、常见的防攻击方法
  • 无效链接的监视释放
  • 延迟 TCB 分配方法
  • Syn Cache 技术
  • Syn Cookie 技术
  • 使用 SYN proxy 防火墙
连接队列
  •          netstat -s | grep LISTEN
  •          netstat -s | grep TCPBacklogDrop

查看 Accept queue 是否有溢出

  • ss -lnt

如果State是listen状态,Send-Q 表示第三列的listen端口上的全连接队列最大为50,第一列Recv-Q为全连接队列当前使用了多少。非 LISTEN 状态中 Recv-Q 表示 receive queue 中的 bytes 数量;Send-Q 表示 send queue 中的 bytes 数值。

  • 当外部连接请求到来时,TCP模块会首先查看max_syn_backlog,如果处于SYN_RCVD状态的连接数目超过这一阈值,进入的连接会被拒绝。根据tcp_abort_on_overflow字段来决定是直接丢弃,还是直接reset。

6、RPC

  • Remote Procedure Call 具体的定义是指,将在远程跑的程序做得就像在本地运行一样。
  • 【更形象的解释】
  • 由来:
    如果两个仔细用没有在网络上进行分离,而是运行在用一个操作系统实例之上的两个进程时,他们之间的通信手段还可以更丰富。除了分布式解决方案之外,还有共享内存、信号量、文件系统、内核消息、管道等,本质上都是通过操作系统内核机制类进行数据和消息的交流而无须经过网络协议栈。
  • 因此分布式解决方案在要求高可用无间断服务的企业环境里便大有作为
  • RPC应分布式服务而生,是牵线搭桥的常见技术手段之一。除RPC之外,常见的多系统数据交互方案还有分布式消息队列、HTTP请求调用、数据库和分布式缓存。其中RPC和HTTP调用是没有经过中间件的,他们是端到端西永的直接数据交互。HTTP调用其实也可以看成是一种特殊的RPC。
  • 要解决两个问题:
    1、解决分布式系统中,服务之间的调用问题
    2、远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑
  • 是一种技术的概念名词
    rpc = socket + 动态代理
  • RPC 服务 和 HTTP 服务?
    为什么服务之间调用,选择用RPC,http 不也能实现服务之间的通信吗?怎么不用呢?或者 RPC 比 http 好在哪里?
    1、说到RPC 与HTTP 接口,RPC 协议更简单内容更小,效率更高一点
    2、HTTP 也是 RPC 实现的一种方式。HTTP 是一种协议,RPC 可以通过 HTTP 来实现,也可以通过Socket自己实现一套协议来实现
    3、HTTP 接口是在接口不多、系统调用交互少的情况下,解决信息孤岛初期常使用的一种通信手段
    4、如果是一个大型的网站,内部子系统较多、接口非常多的情况下,RPC框架的好处就显示出来了:
    4.1、长链接,不必每次通信都要像http一样去3次握手什么的,减少了网络开销
    4.2、都有注册中心,有丰富的监控管理:发布、下线接口、动态扩展等
  • 优点:
    解耦服务。并不关心使用了什么协议,目的是让你在本地调用远程的方法,而对你来说这个调用是透明的,你并不知道这个调用的方法是部署在哪里
  • 原理:
    主要用到了动态代理模
    通过配置文件/配置中心 获取服务端地址用户调用
    序列化
    TCP 或 HTTP 传输
    反序列化
  • 跨企业用 HTTP API, 但企业内部使用RPC更加高效(dubbo/hessian 用起来超级简单的)

用 gRPC 生成的代码,形式上和本地的函数没有区别,而实际上是通过 HTTP/2 将请求发送到了服务器,在服务器运行。
在 Google 内部,用 Profobuf 来定义 API 几乎是通用的标准做法。gRPC 有很多前身,最后 Google 决定将项目开源。这是 gRPC 的由来
【曹大的讲解】
【简单使用】

7、DNS

【部署主从高可用】
【神级入门及Go实现DNS域名解析】
【cname】
【CDN】

  • 一般也建议用户使用CNAME记录绑定域名的。如果主机使用了双线IP,显然使用CNAME也要方便一些
  • A记录优先于CNAME记录。即如果一个主机地址同时存在A记录和CNAME记录,则CNAME记录不生效
  • www.baidu.com.

. 是根域
com. 一级域 每个域都会有权威域名服务器
baidu.com 是一个顶级域名 www.baidu.com是baidu.com这个域里的一个叫做www的主机
还有二级、三级域名 在a.www.baidu.com中 www.baidu.com变成了一个二级域,主机名是a

  • 域名服务器:

记录类型:
         A 记录一个ip地址和一个主机名字
         NS
         MX
         CNAME
A记录就是把一个域名解析到一个IP地址
CNAME记录就是把域名解析到另外一个域名
         例如使用CDN时,需要将您的加速域名和我们提供的CNAME进行绑定,就是因为添加了CNAME记录后,所有访问您加速域名的请求,都会被解析到我们的CNAME地址,也就是我们节点的地址,从而从我们的节点上获取访问的资源,达到加速的效果。

8、udp如何实现可靠性传输?

udp如何实现可靠性传输?
最简单的方式是在应用层模仿传输层TCP的可靠传输:

  • 1、添加seq/ack机制,确保数据发送到对端
  • 2、添加发送和接收缓冲区,主要是用户超时重传
  • 3、添加超时重传机制

9、网络指标汇集

网络监控:

1、netdata 实时性能监测工具,快呗
2、ebpf_exporter
3、以上两个是比较细的网络指标,其实node_exporter够用了,上手是必须得

  • netdata
    1.CPU的使用率 中断 软中断 和频率(总量和每个单核)
    2.RAM 互换和内核内存的使用率(包括KSM和内核内存deduper)
    3.硬盘输入/输出(每个硬盘的带宽 操作 整理 利用)
    4.IPv4网络(数据包 错误 分片) TCP(连接 错误 握手UDP) 错误广播 带宽 数据组播
    5.Netfilter/iptables 防火墙(连接 跟踪事件 错误)
    6.进程(运行 受阻 分叉 活动)
    7.熵
    8.NFS服务器(输入/输出 缓存 预读 RPC调用)
    9.网络服务质量(唯一一个可实时可视化网络状况的工具)
    10.应用程序,对进程树进行分组
    11.Apache 服务器状态
    12.Nginx 服务器状态
    13.Mysql 数据库(带宽 查询/s 处理者 锁问题 临时操作 连接 二进制日志 线程 innodb)
    14.ISC Bind域名服务器(客户 请求 查询 更新 失败)
    15.Postfix邮件服务器的消息队列(条目 大小)
    16.Squid代理服务器(客户带宽和请求 服务带宽和请求)
    17.硬件传感器(温度 电压 风扇 电源 湿度)
    18.NUT UPSes(负载 充电 电池电压 温度 使用指标 输出指标)

  • stress压测测

  • 交换机监控指标

1、核心交换,要全面监控,硬件信息包括CPU,内存,板块,电源模块,风扇,端口是否故障等,要监控arp表,mac地址表变化等,要监控各端口总流量,上行流量,下行流量,峰值流量,丢包状况等;

2、接入交换(边缘交换)则仅监控硬件,以及端口总流量,上行流量,下行流量,峰值流量,丢包状况等即可,而且监控频率也可以调低,比如对于边缘交换的硬件则可以10分钟,30分钟监控一次,尤其是硬件的取值,因为接入交换重要程度地,硬件性能较差,如果监控频率高会影响硬件本身的性能。

3、对于两项的硬件监控,监控指标可以优化,正常情况下的监控系统对于CPU,内存等硬件都会有很多指标项,网络设备对于CPU,内存等硬件的依赖性不高(不排除特殊情况,此处仅是对比服务器之类的硬件来说),那么就可以只监控其可用性(好坏),以及使用率就可以。

4、对于端口流量的健康则要稍微频繁一点,这个根据贵公司的RPO,RTO要求进行设置,最高频率不超过30秒每次,否则会对设备产生性能压力。

我们对于核心交换是5分钟抽取一次硬件的监控信息,1分钟抽取一次流量信息,对于接入交换则采用30分钟抽取一次硬件信息,3分钟抽取一次流量信息的方式。

硬件监控包括,CPU可用性,CPU使用率,内存可用性,内存使用率,板块可用性,电源模块可用性,端口可用性

端口流量包括总流量,端口上行带宽,端口上行带宽峰值,端口下行带宽,端口下行带宽峰值,端口总流量,端口总流量峰值,丢包数,丢包比率
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值