趣谈网络协议

组网、虚拟化网络的部分比较复杂, 需要后续再深入研究.

# network protocols

ISO Level 协议
应用层 DHCP, HTTP, HTTPS, RTMP, P2P, DNS, GTP, RPC
传输层 UDP, TCP
网络层 ICMP, IP, OSPF, BGP, IPSec, GRE
链路层 ARP, VLAN, STP
物理层 RJ45, 物理跳线

# ip address

IPv4, CIDR, MASK, MAC (Medium Access Control)

10.100.122.2/24 | 前 24 位是网络号,后 8 位是主机号。

  • broadcast: 10.100.122.255
  • MASK: 255.255.255.0
1
2
3
4
5
apt install net-tools iproute2

ifconfig

ip addr

NIC status eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000

UP 表示网卡处于启动的状态; BROADCAST 表示这个网卡有广播地址,可以发送广播包; MULTICAST 表示网卡可以发送多播包; LOWER_UP 表示 L1 是启动的,也即网线插着呢。

qdisc 全称是 queueing discipline,中文叫排队规则。内核如果需要通过某个网络接口发送数据包,它都需要按照为这个接口配置的 qdisc(排队规则)把数据包加入队列。

最简单的 qdisc 是 pfifo,它不对进入的数据包做任何的处理,数据包采用先入先出的方式通过队列。pfifo_fast 稍微复杂一些,它的队列包括三个波段(band)。在每个波段里面,使用先进先出规则。

三个波段(band)的优先级也不相同。band 0 的优先级最高,band 2 的最低。如果 band 0 里面有数据包,系统就不会处理 band 1 里面的数据包,band 1 和 band 2 之间也是一样。

数据包是按照服务类型(Type of Service,TOS)被分配到三个波段(band)里面的。TOS 是 IP 头里面的一个字段,代表了当前的包是高优先级的,还是低优先级的。

Linux 默认的逻辑是,如果这是一个跨网段的调用,它便不会直接将包发送到网络上,而是企图将包发送到网关。

# how DHCP works

新来的机器使用 IP 地址 0.0.0.0 发送了一个广播包,目的 IP 地址为 255.255.255.255。广播包封装了 UDP,UDP 封装了 BOOTP。

  • boot request (join)
  • boot reply (OFFER)
  • boot request (confirm, ask ack)
  • boot reply (ACK)

# 网络拓扑

STP (Spanning Tree Protocol 最小生成树协议) 解决拓扑结构中可能出现的环路问题.

stp 中如果有 Root 死掉了,又得全部重选一次,用的时间比较长,期间网络会中断

  • Root Bridge

  • Designated Bridge

  • Bridge protocol data unit

  • priority vector [root bridge id, root path cost, bridge id, port id]

  • 当交换机的数目越来越多的时候,会遭遇环路问题,让网络包迷路,这就需要使用 STP 协议,通过比较最小 ID、父子关系,将有环路的图变成没有环路的树,从而解决环路问题。

  • 交换机数目多会面临隔离问题,可以通过 VLAN 形成虚拟局域网,从而解决广播问题和安全问题。

# ICMP/ping

Internet Control Message Protocol

.

# 查询报文类型

ping 查询报文,是一种主动请求,并且获得主动应答的 ICMP 协议。 ICMP ECHO REQUEST -> ICMP ECHO REPLY

主动请求 8 -> 应答 0

.

# 错误报文类型

  • 终点不可达 3
    • 网络不可达 0
    • 主机不可达 1
    • 协议不可达 2
    • 端口不可达 3
    • 需要进行分片,但设置了不分片 4
  • 源站抑制 4
  • 网络超时 11
  • 路由重定向 5

# 网关

网段为 192.168.1.0/24 的局域网中,网关服务一般为 192.168.1.(1|2)/24

  • 不改变 IP 地址的网关,称为 转发网关
  • 改变 IP 地址的网关,称为 NAT 网关

# MAC/IP

交换机、转发表 ARP/RARP

.

在 MAC 头里面,先是目标 MAC 地址,然后是源 MAC 地址,然后有一个协议类型,用来说明里面是 IP 协议。IP 头里面的版本号,目前主流的还是 IPv4,服务类型 TOS 指明包的优先级,TTL 表示包可以在网络中流转多少次。另外,还有 8 位标识协议。这里到了下一层的协议,也就是,是 TCP 还是 UDP。最重要的就是源 IP 和目标 IP。先是源 IP 地址,然后是目标 IP 地址。

# 路由

路由器 (Router) 就是一台网络设备,它有多张网卡。当一个入口的网络包送到路由器时,它会根据一个本地的转发信息库,来决定如何正确地转发流量。这个转发信息库通常被称为路由表。

  • 目标网络
  • 出口设备
  • 下一跳网关

设置 ip route add 10.176.48.0/20 via 10.173.32.1 dev eth0,就说明要去 10.176.48.0/20 这个目标网络,要从 eth0 端口出去,经过 10.173.32.1。

动态路由算法

  • 距离矢量路由算法 distance vector routing (bellman-ford)
  • 链路状态路由算法 link state routing (dijkstra)

动态路由协议

  • OSPF 基于链路状态路由算法 Open shortest path first
    • 主要用于数据中心内部, 用于路由决策 (IGP) (interior gateway protocol)
  • 基于距离矢量路由算法的 BGP (border gateway protocol)

# TCP/UDP

所谓的建立连接,是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的面向连接的特性。

# TCP

  • 通过 TCP 连接传输的数据,无差错、不丢失、不重复、并且按序到达。
  • 面向字节流
  • 控制拥塞 – 识别当前网络环境的拥堵情况 [TCP 要做流量控制,通信双方各声明一个窗口,标识自己当前能够的处理能力]
  • 有状态 – 包序号, 确认序号

.

  • 源端口号, 目标端口号
  • 包序号, 确认序号 (保证 TCP 包到达)
  • 首部长度
  • 状态位
  • 窗口大小
  • crc
  • 紧急指针
  • 选项
  • payload

状态位

  • URG
  • SYN 发起连接
  • PSH
  • RST 重新连接
  • FIN 关闭连接
  • ACK 确认回复

establish connection

.

dismiss connection

.

state machine

.

advertised window

.

  • lastByteAcked
  • lastByteSent
  • advertised window = lastByteAcked + window size

确认和重传

  • 超时重传
  • 自适应重传算法
  • Selective Acknowledge

拥塞控制

$通道的容量 = 带宽 × 往返延迟$

# UDP

  • 继承了 IP 包的特性,不保证不丢失,不保证按顺序到达。【高传输率】
  • 继承了 IP 的特性,基于数据报的,一个一个地发,一个一个地收。

使用场景

  • 需要资源少, 网络情况比较好的内网, 对丢包不敏感的应用
  • 可以广播的应用
  • 需要处理速度快, 时延低, 可以容忍少数丢包

.

# Socket

.

# DNS

.

# 数据中心

  • 数据中心分为三层。服务器连接到接入层,然后是汇聚层,再然后是核心层,最外面是边界路由器和安全设备。
  • 数据中心的所有链路都需要高可用性。服务器需要绑定网卡,交换机需要堆叠,三层设备可以通过等价路由,二层设备可以通过 TRILL 协议。
  • 随着云和大数据的发展,东西流量相对于南北流量越来越重要,因而演化为叶脊网络结构。

# VPN

IPSec VPN

  • 机制一:私密性,防止信息泄漏给未经授权的个人,通过加密把数据从明文变成无法读懂的密文,从而确保数据的私密性。
  • 机制二:完整性,数据没有被非法篡改,通过对数据进行 hash 运算,产生类似于指纹的数据摘要,以保证数据的完整性。
  • 机制三:真实性,数据确实是由特定的对端发出,通过身份认证可以保证数据的真实性。

# 移动网络

# 2G

  • 手机通过无线信号连接基站;
  • 基站一面朝前接无线,一面朝后接核心网;
  • 核心网一面朝前接到基站请求,一是判断你是否合法,二是判断你是不是本地号,还有没有钱,一面通过网关连接电话网络。

# 云网络

iptables & net-filter

.

# 容器网络

virtual network stack…

# 网络协议知识图谱

.

# VLAN (virtual local area network)

A VLAN is a network configuration that allows segmentation of a physical network into multiple, distinct logical networks. Each vlan is treated as a separate network, even though they may share the same physical infrastructure (cabling, switches). VLAN are used to improve network performance, enhance security and simplify network management by logically separating traffic.

VLANs work by tagging network packets with an identifier (VLAN ID) that specifies the VLAN to which the packet belongs. This tagging is typically done using the IEEE 802.1Q standard, which adds a 4-byte tag to the Ethernet frame. Network switches use this tag to ensure that packets are only sent to devices within the same VLAN, even if those devices are physically connected to the same switch.

  • network segmentation
  • security
  • simplified network management
  • traffic prioritization and QOS
  • geographical separation

# References

  • 趣谈网络协议 - 极客时间
Get Things Done
Built with Hugo
Theme Stack designed by Jimmy