网络模型协议状态机速览


一、OSI 模型

计算机网络体系结构

名字 功能 协议数据单元(PDU) 常用协议及设备
应用层 为应用进程提供服务 HTTP、FTP、TELNET、DNS、BT、NTP、DHCP、SNMP
表示层 提供数据格式转换服务 JPEG、MPEG、ASCll
会话层 建立端连接并提供访问验证和会话管理 SSL、TLS、NFS、SQL、NETBIOS、RPC
传输层 向两个主机中进程之间的通信提供服务 TCP报文段(Segment)、UDP用户数据报(Datagram) TCP、UDP、SPX
网络层 实现两个端系统之间的数据透明传送 包(Packet) IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP;路由器
数据链路层 在不可靠的物理线路上进行数据的可靠传输 帧(Frame) PPP、Ethernet;网桥、交换机
物理层 完成相邻结点之间原始比特流传输 比特流(Bit Stream) RJ45、网线、中继器、集线器

参考:网络通讯协议图

1.1 物理层

通过物理手段(如:双绞线、光纤、无线电波等方式)把电脑连接起来,作用是负责传送0和1的电信号。

可用一根网线(1-3、2-6 交叉接法)直连两台电脑组成一个最小的局域网。

通过网线上电平的高低来传递信息,以太网使用 曼彻斯特编码(Manchester coding) 来编码信息。

曼彻斯特编码

相关设备:

1.2 数据链路层

单纯的0和1没有任何意义,数据链路层的一个作用就是赋予这些信号的意义,定义一些通信协议(比如以太网协议),并协调通信的过程来完成信息交换的过程。

数据链路层(Data Link Layer) 可细分成:

MAC地址格式

图片来源:MAC地址、IP地址以及ARP协议

以以太网为例,通过网线连接在一起的设备,在发送包之前需要先解决几个问题:

  1. 谁先发、谁后发?

    这个由规则(学名:多路访问)控制。以开车为例,常见的有:

    • 信道划分:分多个车道,每个车一个车道;
    • 轮流协议:单双号出行,轮着来;
    • 按需使用:先看看路上有车没,没车就出门,否则等一会再看看。以太网用的就是这种方式。
  2. 包发给谁、谁接收?

    每个网卡都有一个全球唯一的物理地址,叫 链路层地址。但因为主要用来解决媒体访问控制层的问题,所以常被称为 MAC 地址。在发送时,源地址和目的地址填的都是 MAC 地址。

    当只知道目标机器的 IP 地址,而不知道目标机器的 MAC 时,需要通过 地址解析协议(Address Resolution Protocol,ARP) 来获取 IP 地址对应的 MAC 地址。

  3. 发送出错怎么办?

    对于以太网来说,会在每个发出的 帧(Frame) 后面加上 循环冗余校验(Cyclic Redundancy Check,CRC),来判断发送是否出错,并在出错时重发。

相关设备:

  • 网桥(Network bridge)解析收到的帧,学习并记录每个网口上连接设备的 MAC 地址,形成一个转发表。在转发时就只把帧转发到与帧中目的 MAC 地址对应的某个网口上。
  • 交换机(Switch)是一种多端口的网桥。一个 N 口交换机可以看成是 N x (N-1) 个网桥的集合。

相关协议:

1.3 网络层

网络层提供了路由,让信息交换更加的智能和高效。

网络层的责任是提供点到点(hop by hop)的服务。

路由器中的路由表可以通过两种方式配置:静态路由和动态路由。

静态路由指路由器的路由表由手动配置,不会根据网络拓扑结构的变化而变化。

动态路由指路由器的路由表根据路由协议算法生成,随网络运行状况的变化而变化。

1.3.1 动态路由算法

  1. 距离矢量路由算法(Distance Vector Routing)

    也称为 Bellman-Ford 算法。基于这类算法实现的协议有:RIP、BGP 等。

    基本思路:网络中每个路由器都维护一张矢量表,这个矢量表中每一行记录了从当前位置能到达的目标路由器的最佳出口(接口)和距离(跳数)。每隔一段时间当前路由器会向所有的邻居节点发送自己的这个表,同时它也会接收每个邻居发来的它们的表。并会将邻居的表和自己的表做一个对比更新。

    优点:简单明了,加入网络的新节点能很快的与其它节点建立起联系获得补充信息。

    缺点:每次发送信息的时候,要发送整个全局路由表;收敛时间太慢。

  2. 链路状态路由算法(Link State Routing)

    基于 Dijkstra 算法,以图论作为理论基础,用图来表示网络拓扑结构,用图论中的最短路径算法来计算网络间的最佳路由。基于这类算法实现的协议有:OSPF 等。

    基本思路:路由器先发现与自己相邻的节点,然后将自己与邻居节点之间的链路状态信息广播到整个网络中。同时收集网络中其他路由器广播来的链路状态信息,在本地构建出一个全网的拓扑图,并根据此图来计算当前节点到其它路由器之间的最短路径,从而生成路由表。当某台路由器与相邻节点之间的链路状态发现变化时,依然通过广播通知其他所有路由器更新网络拓补图并重新计算最短路径。

    优点:更新信息小;能快速收敛。

1.3.2 动态路由协议

  1. 开放式最短路径优先(Open Shortest Path First,OSPF)是一个基于链路状态路由算法的协议,由于主要用在自治系统(Autonomous system,AS)(如:数据中心)内部,用于路由决策,因而称为内部网关协议(Interior Gateway Protocol,IGP)。有时 OSPF 可以发现多个最短的路径,可以在这些路径中进行负载均衡,这常被称为等价路由。

  2. 边界网关协议(Border Gateway Protocol,BGP)是一个基于距离矢量路由算法的协议,主要用在自治系统之间。BGP 又分为两类,eBGP 和 iBGP。自治系统间,边界路由器之间使用 eBGP 广播路由。内部网络也需要访问其他的自治系统,方法就是边界路由器通过运行 iBGP,使得内部的路由器能够找到到达外网目的地的最好边界路由器。

相关设备:

  • 路由器(Router)不仅拥有交换机的功能,还能解析网络地址并根据路由表选择合适的 IP 路径。

相关资料:

1.4 传输层

传输层(TCP/UDP)提供端到端(end to end)的服务。

二、常见协议头格式

图片来源:《TCP/IP 详解 卷一: 协议 第2版》

图片来源:TCP/IP Reference

2.1 以太网协议头格式

以太网协议头格式

2.2 IPv4 协议头格式

IPv4协议头格式

2.3 IPv6 协议头格式

IPv6协议头格式

2.4 ICMP 协议头格式

ICMP 协议被封装在 IP 数据报中使用。

ICMP协议头格式

2.5 TCP 协议头格式

TCP协议头格式

2.6 UDP 协议头格式

UDP协议头格式

三、TCP 状态机

可以使用下面的命令来观察

tcpdump -i lo -S port 8888
tshark -i lo -f 'tcp port 8888' -o tcp.relative_sequence_numbers:FALSE

3.1 完整状态图

注意:SYNFIN 会消耗一个序列号。

全称: URG(Urgent)、ACK(Acknowledgment)、PSH(Push)、RST(Reset)、SYN(Synchronization)、FIN(Finish)。

TCPIP_State_Transition_Diagram

图片来源:TCPIP_State_Transition_Diagram

3.2 三次握手后立即四次挥手

TCP三次握手后立即四次挥手

TCP三次握手后立即四次挥手举例

更多资料:TCP的运输连接管理-TCP的连接建立

3.3 三次握手后双方发送数据后再四次挥手

TCP三次握手后双方发送数据后再四次挥手

TCP三次握手后双方发送数据后再四次挥手举例

更多资料:TCP的运输连接管理-TCP的连接释放

四、应用层协议

4.1 DHCP

DHCP的工作过程

图片来源:动态主机配置协议DHCP

DHCP中继代理

图片来源:动态主机配置协议DHCP

4.2 FTP

FTP的基本工作原理

图片来源:文件传输协议FTP

五、相关RFC

5.1 IP

  1. RFC 791: INTERNET PROTOCOL

5.2 ICMP

  1. RFC 792: INTERNET CONTROL MESSAGE PROTOCOL

5.3 TCP

  1. RFC 793: TRANSMISSION CONTROL PROTOCOL
  2. RFC 3450: Robust Explicit Congestion Notification (ECN) Signaling with Nonces
  3. RFC 1323: TCP Extensions for High Performance

5.4 UDP

  1. RFC768: User Datagram Protocol

5.5 MTU

  1. RFC 1191: Path MTU Discovery

5.6 DNS

  1. RFC 1034: DOMAIN NAMES - CONCEPTS AND FACILITIES
  2. RFC 1035: DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION
  3. RFC 1886: DNS Extensions to support IP version 6

5.7 NAT

  1. RFC 2663: IP Network Address Translator (NAT) Terminology and Considerations
  2. RFC 3489: STUN - Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs)
  3. RFC 5382: NAT Behavioral Requirements for TCP

5.8 IPv6

  1. RFC 2373: IP Version 6 Addressing Architecture
  2. RFC 2461: Neighbor Discovery for IP Version 6 (IPv6)
  3. RFC 2462: IPv6 Stateless Address Autoconfiguration
  4. RFC 3306: Unicast-Prefix-based IPv6 Multicast Addresses
  5. RFC 3315: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)
  6. RFC 3484: Default Address Selection for Internet Protocol version 6 (IPv6)
  7. RFC 3513: Internet Protocol Version 6 (IPv6) Addressing Architecture
  8. RFC 3587: IPv6 Global Unicast Address Format
  9. RFC 3633: IPv6 Prefix Options for Dynamic Host Configuration Protocol (DHCP) version 6
  10. RFC 3646: DNS Configuration options for Dynamic Host Configuration Protocol for IPv6
  11. RFC 4193: Unique Local IPv6 Unicast Addresses
  12. RFC 5006: IPv6 Router Advertisement Option for DNS Configuration
  13. RFC 8106: IPv6 Router Advertisement Options for DNS Configuration
  14. RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)

六、参考资料

  1. 计算机网络微课堂
  2. TCP 的那些事儿(上)TCP 的那些事儿(下)

文章作者: Kiba Amor
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 Kiba Amor !
  目录