重新认识一下网络


没写完,写到了传输层,应用层后续。。。

网络体系结构

OSI七层体系结构简述

自上而下是:

TCP/IP四层体系结构简述

各个层使用的是哪个数据交换设备

交换机是什么

在计算机网络系统中,交换机是针对共享工作模式的弱点而推出的。交换机拥有一条高带宽的背部总线和内部交换矩阵。交换机的所有的端口都挂接在这条背部总线上,当控制电路收到数据包以后,处理端口会查找内存中的地址对照表以确定目的 MAC(网卡的硬件地址)的 NIC(网卡)挂接在哪个端口上,通过内部交换矩阵迅速将数据包传送到目的端口。目的 MAC 若不存在,交换机才广播到所有的端口,接收端口回应后交换机会“学习”新的地址,并把它添加入内部地址表中

交换机工作于 OSI 参考模型的第二层,即数据链路层。交换机内部的 CPU 会在每个端口成功连接时,通过 ARP 协议学习它的 MAC 地址,保存成一张 ARP 表。在今后的通讯中,发往该 MAC 地址的数据包将仅送往其对应的端口,而不是所有的端口。因此,交换机可用于划分数据链路层广播,即冲突域;但它不能划分网络层广播,即广播域。

路由器是什么

路由器(Router),是一种计算机网络设备,提供了路由与转发两种重要机制,可以决定数据包从来源端到目的端所经过的路由路径(host 到 host 之间的传输路径),这个过程称为路由;将路由器输入端的数据包移送至适当的路由器输出端(在路由器内部进行),这称为转发。所以,路由器的一个作用是连通不同的网络,另一个作用是选择信息传送的线路。

路由工作在 OSI 模型的第三层 —— 即网络层,例如 IP 协议。当然,这也是路由器与交换器的差别,路由器是属于 OSI 第三层的产品,交换器是 OSI 第二层的产品(这里特指二层交换机)。

常见的路由选择协议,以及它们的区别

Keepalived 的故障切换工作原理

IP 地址的分类

IP 地址是指互联网协议地址,是 IP 协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

IP 地址编址方案将IP地址空间划分为 A、B、C、D、E 五类,其中 A、B、C 是基本类,D、E 类作为多播和保留使用,为特殊地址。

每个 IP 地址包括两个标识码(ID),即网络 ID 和主机 ID 。同一个物理网络上的所有主机都使用同一个网络 ID ,网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机 ID 与其对应。A~E 类地址的特点如下:

IP 地址与物理地址的区别

网络层的 ARP 协议工作原理

网络层的 ARP 协议完成了 IP 地址与物理地址的映射。

注意,在 OSI 模型中 ARP 协议属于链路层;而在 TCP/IP 模型中,ARP 协议属于网络层。

如何划分子网

划分子网(变长子网掩码 VLSM):划分子网的方法是从网络的主机号借用若干位作为子网号 subnet-id ,与此同时主机号也减少相应位数(总位数 32 位不变)。

由此两级 IP 地址可变为三级 IP 地址:IP地址 ::= {<网络号>,<子网号>,<主机号>} ,划分子网只是把 IP 地址的主机号这部分进行再划分,并不改变 IP 地址原来的网络号。

如何划分超网

构造超网(无分类编址 CIDR):CIDR 消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,把 32 位的 IP 地址划分为两个部分。

例如:128.14.35.7/20 是某个 CIDR 地址块中的一个地址,其前 20 位是网络前缀(用下划线表示的部分),后面的 12 位为主机号

子网掩码的作用

子网掩码只有一个作用,就是将某个 IP 地址划分成网络地址主机地址两部分。

用于子网掩码的位数,决定于可能的子网数目和每个子网的主机数目。

单播、组播(多播)、广播、任播

区别 IPv4 和 IPv6

ping 的原理

一般在网络不通的时候,大家会用 ping 测一下网络是否通畅。

ping 是基于 ICMP 协议工作的。ICMP 全称 Internet Control Message Protocol ,就是互联网控制报文协议。这里的关键词是“控制”,那具体是怎么控制的呢? 网络包在异常的网络环境中传输时,会遇到各种问题,当遇到问题时,要传出消息,报告情况,这样才能调整传输策略。

ICMP 报文是封装在 IP 包里面的。因为传输指令的时候,肯定需要源地址和目标地址。如下图:

什么是 Traceroute

Traceroute 是构建在 ICMP 协议之上的应用。

Traceroute ,是用来侦测主机到目的主机之间所经路由情况的重要工具,也是最便利的工具。

前面说到,尽管 ping 工具也可以进行侦测,但是,因为 IP 头的限制,ping 不能完全的记录下所经过的路由器。所以Traceroute 正好就填补了这个缺憾。

Traceroute 的原理是非常非常的有意思。

  • 它受到目的主机的 IP 后,首先给目的主机发送一个 TTL=1的 UDP数据包,而经过的第一个路由器收到这个数据包以后,就自动把 TTL 减1,而 TTL 变为 0 以后,路由器就把这个包给抛弃了,并同时产生 一个主机不可达的 ICMP 数据报给主机。
  • 主机收到这个数据报以后再发一个 TTL=2 的 UDP 数据报给目的主机,然后刺激第二个路由器给主机发 ICMP 数据 报。如此往复直到到达目的主机。

这样,traceroute 就拿到了所有的路由器 IP 。从而避开了 IP 头只能记录有限路由 IP 的问题。

有人要问,我怎么知道 UDP 到没到达目的主机呢?

这就涉及一个技巧的问题,TCP 和 UDP 协议有一个端口号定义,而普通的网络程序只监控少数的几个号码较小的端口,比如说 80、23 等等。而 traceroute 发送的是端口号 >30000(真变态) 的 UDP 包,所以到达目的主机的时候,目的主机只能发送一个端口不可达的 ICMP 数据报给主机。主机接到这个报告以后就知道,目标主机到了。

很多情况下,在我们 ping 不通目标地址时,会尝试使用 traceroute 命令,看看是否在中间哪个 IP 无法访问。

TCP是什么

TCP(Transmission Control Protocol),传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。主要特点如下:

TCP 对应的应用层协议

TCP 三次握手

三次握手,简单来说,就是:

为什么 TCP 连接需要三次握手,两次不可以么,为什么

客户端发出的连接请求报文并未丢失,而是在某个网络节点长时间滞留了,以致延误到链接释放以后的某个时间才到达 Server 。

客户端不断进行请求链接会怎样

服务器端准备为每个请求创建一个链接,并向其发送确认报文,然后等待客户端进行确认后创建。如果此时客户端一直不确认,会造成 SYN 攻击,即:

SYN 攻击,英文为 SYN Flood ,是一种典型的 DoS/DDoS 攻击。

如何检测 SYN 攻击?检测 SYN 攻击非常的方便,当你在服务器上看到大量的半连接状态时,特别是源 IP 地址是随机的,基本上可以断定这是一次 SYN 攻击。在 Linux/Unix 上可以使用系统自带的 netstat 命令来检测 SYN 攻击。

怎么解决 SYN 攻击呢?答案是只能预防,没有彻底根治的办法,除非不使用 TCP 。方式如下:

什么是 TCP 四次挥手

四次挥手,简单来说,就是:

如下使用 Client 和 Server 的方式,仅仅是为了方便,也是可以从 Server 向 Client 发起。

为什么要四次挥手

TCP 协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP 是全双工模式,这就意味着:

因为主机 2 此时可能还有数据想要发送给主机 1 ,所以挥手不能像握手只有三次,而是多了那么“一次”!

我们把四次挥手,理解成一次和平的挥手~

如果要正确的理解四次的原理,就需要了解四次挥手过程中的状态变化。

主动方=发送方;被动方=接收方。

状态前面的(主动方)(被动方),表示该状态属于谁。

为何一定要等 2MSL ?

如果不等,释放的端口可能会重连刚断开的服务器端口,这样依然存活在网络里的老的 TCP 报文可能与新 TCP 连接报文冲突,造成数据冲突,为避免此种情况,需要耐心等待网络老的 TCP 连接的活跃报文全部死翘翘,2MSL 时间可以满足这个需求(尽管非常保守)!

TCP 数据如何传输

建立连接后,两台主机就可以相互传输数据了。如下图所示:

TCP 数据传输丢失怎么办

也可以改成提问,什么是 TCP 重传。

因为各种原因,TCP 数据包可能存在丢失的情况,TCP 会进行数据重传。如下图所示:

这个值太大了会导致不必要的等待,太小会导致不必要的重传,理论上最好是网络 RTT 时间,但又受制于网络距离与瞬态时延变化,所以实际上使用自适应的动态算法(例如 Jacobson 算法和 Karn 算法等)来确定超时时间。

往返时间(RTT,Round-Trip Time)表示从发送端发送数据开始,到发送端收到来自接收端的 ACK确认包(接收端收到数据后便立即确认),总共经历的时延。

TCP 数据包重传次数,根据系统设置的不同而有所区别。有些系统,一个数据包只会被重传 3 次,如果重传 3 次后还未收到该数据包的 ACK 确认,就不再尝试重传。但有些要求很高的业务系统,会不断地重传丢失的数据包,以尽最大可能保证业务数据的正常交互。

最后需要说明的是,发送端只有在收到对方的 ACK 确认包后,才会清空输出缓冲区中的数据。

ps:TCP 数据传输的过程,和 MQ Broker 投递消息给 Consumer 是一样的,只有在 Consumer Ack 确认消息已经消费,该消息才不会再被投递给 Consumer 。

什么是 TCP 滑动窗口

在看 TCP 滑动窗口的概念之前,我们先来看看它出现的背景

将 TCP 与 UDP 这样的简单传输协议区分开来的是,它传输数据的质量。TCP 对于发送数据进行跟踪,这种数据管理需要协议有以下两大关键功能:

  • 可靠性:保证数据确实到达目的地。如果未到达,能够发现并重传。
  • 数据流控:管理数据的发送速率,以使接收设备不致于过载。

要完成这些任务,整个协议操作是围绕滑动窗口 + 确认机制来进行的。因此,理解了滑动窗口,也就是理解了 TCP 。

那么,到底什么是 TCP 滑动窗口呢?

滑动窗口协议,是传输层进行流控的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的发送速度,从而达到防止发送方发送速度过快而导致自己被淹没的目的。

TCP 的滑动窗口解决了端到端的流量控制问题,允许接受方对传输进行限制,直到它拥有足够的缓冲空间来容纳更多的数据。

TCP 协议如何来保证传输的可靠性

TCP 提供一种面向连接的、可靠的字节流服务。其中,面向连接意味着两个使用 TCP 的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个 TCP 连接。

对于可靠性,TCP 通过以下方式进行保证:

什么是 TCP 拥堵

计算机网络中的带宽、交换结点中的缓存及处理机等都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏,这种情况就叫做拥塞

怎么解决 TCP 拥堵

通过拥塞控制来解决。拥堵控制,就是防止过多的数据注入网络中,这样可以使网络中的路由器或链路不致过载。注意,拥塞控制和流量控制不同,前者是一个全局性的过程,而后者指点对点通信量的控制。

拥塞控制的方法主要有以下四种:

1)慢开始

不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小。

2)拥塞避免

拥塞避免算法,让拥塞窗口缓慢增长,即每经过一个往返时间 RTT 就把发送方的拥塞窗口 cwnd 加 1 ,而不是加倍,这样拥塞窗口按线性规律缓慢增长。

3)快重传

快重传,要求接收方在收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方),而不要等到自己发送数据时捎带确认。

快重传算法规定,发送方只要一连收到三个重复确认,就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。

4)快恢复

快重传配合使用的还有快恢复算法,当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把 ssthresh 门限减半。

UDP 是什么

UDP(User Data Protocol,用户数据报协议),是与 TCP 相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去。

主要特点如下:

UDP 对应的应用层协议

TCP 与 UDP 的区别

TCP(Transmission Control Protocol)和 UDP(User Datagram Protocol) 协议属于传输层协议,它们之间的区别包括:

为什么 TCP 叫数据流模式? UDP 叫数据报模式

所谓的“流模式”,是指TCP 发送端发送几次数据和接收端接收几次数据是没有必然联系的

所谓的“数据报模式”,是指 UDP 发送端调用了几次 write ,接收端必须用相同次数的 read 读完

UDP 报文的格式