路由协议

  路由协议分为两种 链路路由协议和距离矢量协议

  距离矢量协议

      底层使用bellman_ford最短路径算法实现,利用每个路由表上面记录的信息,(源地址,目标地址,跳数),然后来更新节点之间的信息

      问题:如果中间有一台机器突然离线挂机了,那么其他想要从这台机器上得到距离就会想办法从其他机器上获取+偏移量,但是有可能另一台离得更远,这个时候就会得到错误的信息,然后两           个互相这样去获取信息然后就会错上加错,

      解决办法:设定一个值,如果有一台得路由表距离超过这个值之后就停止报错,就也就是常见的RIP协议使用的方法,设定得值是16,如果达到16跳得时候就会报错

      问题:如果是几台服务器形成环路,就会造成其他机器没有被访问得到,然后将错误信息一直传递

      解决方法:标记源传递在哪里,和dfs中得标记数组差不多,学名叫水平分割

  链路路由协议

      底层使用dijstra最短路径算法,每个节点都能掌握全局得距离路径,相对于前面更加直观,而且不会遇到前面所说的问题,不过相对于前面要消耗更多资源,难以处理,应用于比较大型网 ,      OSPF使用得就是该协议原理

 

 

传输协议

  分为UDP和TCP

  UDP

    面向无连接的,发送的数据比较直接,没有什么处理,利用广播发送,可以建立多链接,发送包比较简单,只要记录自身端口和到达端口即可接收,UDP适用于实时性较强的场景,需要建立多连   接,网络情况较好,不太丢包,要求处理速度快,可以容忍少数丢包等场景

  TCP

    相对于UDP有几大区别,发送的包有序,丢包处理,拥塞控制,流量控制,是连接的,所谓连接并不是对网络进行处理,而是在机器与机器 端到端这里进行处理

    包有序:TCP发送的包的包格式,里面也包含源端口和目标端口, 然后里面还有一个序号,代表包的先后次序,这样就解决了包来的时候的乱序问题

    丢包:丢包的话有个应答包,如果丢包7,那么就会发送三个ACK6,代表需要重新发送7包过来

    流量控制:TCP发送包底层是实现了一个窗口的,发送端分为四种(已确认,已发送未确认,将要发送,暂时不发),接收端分为三种(已确认,等待接收未确认,不能接收),流量控制的实质也就是控制发送的包的量的大小,因为如果发送的包迟迟不接收确认的话,发送端就会频繁申请扩充窗口大小的包申请,本来网络就这样了,还频繁申请这个时候更卡,所以一般接收端在可结收空间不大的时候不告诉发送端,有一定大小的时候再说。

    拥塞控制:差不多就是怕你发的包太多等下怕丢包和超时重传,也就是不要发的太多,太多都要等,等久了都要死又要重新发,不要发太少,明明可以发的更多,但是发个一点点,这个时候拥塞控制用的底层原理就是倍增算法,学名叫慢启动+快重传,也就是开始发一个,然后两个,四个,八个,一直倍增,到了不行的时候,假设当前512个发现不得行,就改成256,然后还是不得行,就128发现可以了。

  TCP 的三次握手四次挥手我在其他博客上有讲到,不再总结,TCP三次握手建立连接主要目的是为了告诉对方,序列号,窗口大小等

  这里主要讲一下TCP三次握手可能遇到的问题  SYN flood

  SYN flood:也就是DDos攻击里的一种,利用的是TCP/IP协议栈进行攻击,也就是利用大量SYN请求去申请连接,这个时候服务器如果回答ACK包的话,然后攻击方不再给予回复,然后让服务器一直处于这种半连接状态消耗服务器资源,虽然TCP的处理策略是等待一段时间如果没有回复就放弃这个连接,但是如果大量请求来的时候还是足以在这段时间把服务器资源给耗死

  应对策略:

    SYN cookie :利用发送方给的序列号端口之类的东西产生出一个cookie号给发送方,如果回复cookie+1,那么就连接,否则不连接,但是计算这个cookie也要消耗大量资源,所以不太给力

    SYN  proxy:就是利用防火墙,防火墙去代替服务器去承受这些连接,防火墙发送一个错误的序列号,如果回复RST异常位,那就标记可以进行连接,然后可以和服务器进行连接, 否则不行,但是这个其实也就是用防火墙的高性能代替承受,如果达到防火墙的峰值还是会出现一样的问题,好像还有个华为的   “首包丢弃+源地址识别”    第二个就和这个处理一样,首包丢弃也就是把第一个包扔了,等待发送端再发一次过来,没细看,不知道得不得行    

 

 

 

应用层协议

  http

    http的工作原理:

     1,解析地址:首先将一个地址解析一下,解析出  协议,主机名,端口号,路径

    2,封装成http包:然后把这些东西以http包的格式装饰一下,再加上自身的一些信息

    3,封装成TCP包:首先需要建立连接,然后进行三次握手

    4,发送http请求:把请求包发给服务器

    5,服务器响应:服务器响应的话,然后就把响应的请求的数据发送给请求方

    6,服务器关闭TCP连接;

    http的请求头包含   URL  , 版本 ,请求方法(get,post,put,delete)

    有一个keepalive,也就是一直保持连接,这样就不用每次花时间建立和断开连接了

 

    http数据转换过程:客户机会将请求封装成http数据包-->封装成tcp数据包-->封装成Ip数据包--->封装成数据帧--->硬件将帧数据转换成bit流(二进制数据)-->最后通过物理硬件(网卡芯片)发送到指定地点。 服务器硬件首先收到bit流....... 然后转换成ip数据包。于是通过ip协议解析Ip数据包,然后又发现里面是tcp数据包,就通过tcp协议解析Tcp数据包,接着发现是http数据包通过http协议再解析http数据包得到数据。

 

 

    https(安全的http)

    https其实就是加了保密措施,如果你传播重要信息,银行卡密码什么的,这个时候如果被黑客整了就不得行,所以有加密方式

       对称加密:两边都用一个公钥,传播的被截获也不能解开,问题:公钥不好商量出来,传播过程也可能被截获,速度比非对称快

       非对称加密:两边都各有一对公钥和私钥,都把公钥发过去,然后叫它用公钥加密发过来,持有私钥的一方就可以解开看信息,因为两边使用的🔑不一样,所以解密转换书道具的时候有点麻烦,速度也就比对称慢了

     数字证书:因为每个人都可以制造私钥公钥,这个时候又不知道要不要相信你是个正规网站,这个时候就可以用CA公钥去验证,然后CA公钥又不知真假,再找它父亲验证。然后一层一层的找到最知名的哪几个就可以了

    https的工作原理(非对称和对称的结合)

    利用非对称的安全性,和对称的性能组成的

    首先两边用非对称加密,中间一边传了一个随机数

    然后自身产生一个随机数,然后三个随机数的结合制作成了对称加密的公钥,然后现在就把对称加密公钥不能传输的问题解决了

    接下来就使用对称加密,享受优秀的性能

 

    DNS

    工作原理、

    现在本地DNS服务器找是否能找到,不能的话转到根服务器

    根服务器来判断是哪个顶级域名服务器

    顶级域名服务器来判断是哪个普通的地方服务器,然后找到了