chaoz的杂货铺

生命有息、学无止境、折腾不止

0%

网络协议深入浅出

计算机网络概述 第一章

计算机网络

物理层

数据链路层

网络层

ICMP 网际控制报文协议

总结

  • ICMP相当于网络世界的侦察兵。刘超老师讲了两种类型的ICMP报文,一种是主动探查的查询报文,一种异常报告的差错报文;
  • ping使用查询报文,Traceroute使用差错报文。
    ICMP 差错报告报文

好多,简单列举下:点不可达为3,源抑制为4,超时为11,重定向为5,参数问题12

终点不可达
  • 网络不可达
  • 主机不可达
  • 协议不可达
  • 端口不可达
  • 需要进行分片但设置了不分片位
源站抑制
时间超时
路由重定向
参数问题
ICMP 查询报文类型

8||0 回送或回答,13||14 时间戳请求或回答

对ping的主动请求,进行网络抓包,称为ICMP ECHO REQUEST。同理主动请求的回复,称为ICMP ECHO REPLY。比起原生的ICMP,这里面多了两个字段,一个是标识符。
在选项数据中,ping还会存放发送请求的时间值,来计算往返时间,说明路程的长短。

Traceroute:差错报文类型的使用
  • Traceroute的第一个作用就是故意设置特殊的TTL,来追踪去往目的地时沿途经过的路由器。

怎么知道UDP有没有到达目的主机呢?

Traceroute程序会发送一份UDP数据报给目的主机,但它会选择一个不可能的值作为UDP端口号(大于30000)。当该数据报到达时,将使目的主机的 UDP模块产生一份“端口不可达”错误ICMP报文。如果数据报没有到达,则可能是超时。

  • Traceroute还有一个作用是故意设置不分片,从而确定路径的MTU。

问题

  • 当发送的报文出问题的时候,会发送一个ICMP的差错报文来报告错误,但是如果ICMP的差错报文也出问题了呢?

解答:

  • 这一节只说了一个局域网互相ping的情况。如果跨路由器、跨网关的过程会是什么样的呢?

解答:

  • 当路由器利用 IP 数据报首部中的“首部检验和”字段检测出在传输过程中出现了差错时,就简单地将其丢弃。为什么不发送一个 ICMP 报文给源主机呢?

解答: IP 协议并不要求源主机重传有差错的 IP 数据报 保证无差错传输是由 TCP 协议完成的。另一方面,首部检验和只能检验出 IP 数据报的首部是否出现差错,但不知道首部中的源地址字段有没有出错。如果源地址出现了差错,那么将这种 IP 数据报传送到错误的地址
也是没有任何意义的

路由协议

总结

  • 路由分静态路由和动态路由,静态路由可以配置复杂的策略路由,控制转发策略;

  • 动态路由主流算法有两种,距离矢量算法和链路状态算法。基于两种算法产生两种协议,BGP协议和OSPF协议。

动态路由算法

1、距离矢量路由算法,它是基于Bellman-Ford算法的。

这种算法的基本思路是,每个路由器都保存一个路由表,包含多行,每行对应网络中的一个路由器,每一行包含两部分信息,一个是要到目标路由器,从那条线出去,另一个是到目标路由器的距离。

缺点:

第一个问题就是好消息传得快,坏消息传得慢。

第二个问题是,每次发送的时候,要发送整个全局路由表。

2、链路状态路由算法,基于Dijkstra算法。

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

动态路由协议

1、基于链路状态路由算法的OSPF

OSPF(Open Shortest Path First,开放式最短路径优先)就是这样一个基于链路状态路由协议,广泛应用在数据中心中的协议。由于主要用在数据中心内部,用于路由决策,因而称为内部网关协议(Interior Gateway Protocol,简称IGP)。

内部网关协议的重点就是找到最短的路径。在一个组织内部,路径最短往往最优。当然有时候OSPF可以发现多个最短的路径,可以在这多个路径中进行负载均衡,这常常被称为等价路由。

2、基于距离矢量路由算法的BGP

但是外网的路由协议,也即国家之间的,又有所不同。我们称为外网路由协议(Border Gateway Protocol,简称BGP)。

BGP又分为两类:
eBGP和iBGP。
自治系统间,边界路由器之间使用eBGP广播路由。内部网络也需要访问其他的自治系统。边界路由器如何将BGP学习到的路由导入到内部网络呢?就是通过运行iBGP,使得内部的路由器能够找到到达外网目的地的最好的边界路由器。

  • 自治系统

    • Stub AS:对外只有一个连接。这类AS不会传输其他AS的包。例如,个人或者小公司的网络。
    • Multihomed AS:可能有多个连接连到其他的AS,但是大多拒绝帮其他的AS传输包。例如一些大公司的网络。
    • Transit AS:有多个连接连到其他的AS,并且可以帮助其他的AS传输包。例如主干网。
    • 每个自治系统都有边界路由器,通过它和外面的世界建立联系。

问题

1、路由协议要在路由器之间交换信息,这些信息的交换还需要走路由吗?不是死锁了吗?

解答:

2、路由器之间信息的交换使用什么协议呢?报文格式是什么样呢?

解答:

运输层

应用层

TCP 协议

总结

    • TCP包头很复杂,但是主要关注五个问题,顺序问题,丢包问题,连接维护,流量控制,拥塞控制;
    • 连接的建立是经过三次握手,断开的时候四次挥手,一定要掌握的我画的那个状态图。
    • 顺序问题、丢包问题、流量控制都是通过滑动窗口来解决的,这其实就相当于你领导和你的工作备忘录,布置过的工作要有编号,干完了有反馈,活不能派太多,也不能太少;
    • 拥塞控制是通过拥塞窗口来解决的,相当于往管道里面倒水,快了容易溢出,慢了浪费带宽,要摸着石头过河,找到最优值。
    • TCP包头格式

TCP包头格式

    • TCP状态机

TCP状态机

    • 三次握手状态时序图

三次握手状态时序图

    • 四次挥手状态时序图

四次挥手状态时序图

问题

  • TCP的连接有这么多的状态,你知道如何在系统中查看某个连接的状态吗?

  • 这一节仅仅讲了连接维护问题,其实为了维护连接的状态,还有其他的数据结构来处理其他的四个问题,那你知道是什么吗?

  • TCP的BBR听起来很牛,你知道他是如何达到这个最优点的嘛?

答:
S1:慢启动开始时,以前期的延迟时间为延迟最小值Tmin。然后监控延迟值是否达到Tmin的n倍,达到这个阀值后,判断带宽已经消耗尽且使用了一定的缓存,进入排空阶段。
S2:指数降低发送速率,直至延迟不再降低。这个过程的原理同S1
S3:协议进入稳定运行状态。交替探测带宽和延迟,且大多数时间下都处于带宽探测阶段。

  • 学会了UDP和TCP,你知道如何基于这两种协议写程序吗?这样的程序会有什么坑呢?

TCP/IP协议与Http协议的区别

参考博客

mark

UDP协议

总结

    • 如果将TCP比作成熟的社会人,UDP则是头脑简单的小朋友。TCP复杂,UDP简单;TCP维护连接,UDP谁都相信;TCP会坚持知进退;UDP愣头青一个,勇往直前;
    • UDP虽然简单,但它有简单的用法。它可以用在环境简单、需要多播、应用层自己控制传输的地方。例如DHCP、VXLAN、QUIC等。
    • UDP包头

UDP包头

问题

  • 都说TCP是面向连接的,在计算机看来,怎么样才算一个连接呢?

  • 你知道TCP的连接是如何建立,又是如何关闭的吗?

喜欢这篇文章?打赏一下作者吧!

欢迎关注我的其它发布渠道