一、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) 来编码信息。
相关设备:
- 中继器(Repeater)将收到信号加强并重新发送出去以增加信号的传输距离。
- 集线器(Hub)将一个网口上收到的每一个 比特(Bit),都复制到其他网口上。
1.2 数据链路层
单纯的0和1没有任何意义,数据链路层的一个作用就是赋予这些信号的意义,定义一些通信协议(比如以太网协议),并协调通信的过程来完成信息交换的过程。
数据链路层(Data Link Layer) 可细分成:
- 媒体访问控制(Medium Access Control,MAC) 子层:专职处理介质访问的争用与冲突问题;
- 逻辑链路控制(Logical Link Control,LLC) 子层:屏蔽各种 MAC 的差别并为网络层提供统一的数据链路服务。
图片来源:MAC地址、IP地址以及ARP协议
以以太网为例,通过网线连接在一起的设备,在发送包之前需要先解决几个问题:
谁先发、谁后发?
这个由规则(学名:多路访问)控制。以开车为例,常见的有:
- 信道划分:分多个车道,每个车一个车道;
- 轮流协议:单双号出行,轮着来;
- 按需使用:先看看路上有车没,没车就出门,否则等一会再看看。以太网用的就是这种方式。
包发给谁、谁接收?
每个网卡都有一个全球唯一的物理地址,叫 链路层地址。但因为主要用来解决媒体访问控制层的问题,所以常被称为 MAC 地址。在发送时,源地址和目的地址填的都是 MAC 地址。
当只知道目标机器的 IP 地址,而不知道目标机器的 MAC 时,需要通过 地址解析协议(Address Resolution Protocol,ARP) 来获取 IP 地址对应的 MAC 地址。
发送出错怎么办?
对于以太网来说,会在每个发出的 帧(Frame) 后面加上 循环冗余校验(Cyclic Redundancy Check,CRC)码,来判断发送是否出错,并在出错时重发。
相关设备:
- 网桥(Network bridge)解析收到的帧,学习并记录每个网口上连接设备的 MAC 地址,形成一个转发表。在转发时就只把帧转发到与帧中目的 MAC 地址对应的某个网口上。
- 交换机(Switch)是一种多端口的网桥。一个 N 口交换机可以看成是 N x (N-1) 个网桥的集合。
相关协议:
- 生成树协议(Spanning Tree Protocol,STP)防止交换机冗余链路产生的环路,避免广播风暴占用交换机资源。基本思想是通过 生成树算法(spanning-tree algorithm,SPA) 在网络中构建一个树形结构的逻辑网络,确保到每个目标都只有一条路径,不会产生环路。
- 多链接透明互联协议(Transparent Interconnection of Lots of Link,TRILL)多用于数据中心(Data center)。基本思路是把三层的路由能力模拟在二层实现。运行 TRILL 协议的交换机称为 RBridge,是 具有路由转发特性的网桥设备 ,只不过这个路由是根据 MAC 地址来的,不是根据 IP 来的。RBridge 之间通过链路状态协议运作。
1.3 网络层
网络层提供了路由,让信息交换更加的智能和高效。
网络层的责任是提供点到点(hop by hop)的服务。
路由器中的路由表可以通过两种方式配置:静态路由和动态路由。
静态路由指路由器的路由表由手动配置,不会根据网络拓扑结构的变化而变化。
动态路由指路由器的路由表根据路由协议算法生成,随网络运行状况的变化而变化。
1.3.1 动态路由算法
距离矢量路由算法(Distance Vector Routing)
也称为 Bellman-Ford 算法。基于这类算法实现的协议有:RIP、BGP 等。
基本思路:网络中每个路由器都维护一张矢量表,这个矢量表中每一行记录了从当前位置能到达的目标路由器的最佳出口(接口)和距离(跳数)。每隔一段时间当前路由器会向所有的邻居节点发送自己的这个表,同时它也会接收每个邻居发来的它们的表。并会将邻居的表和自己的表做一个对比更新。
优点:简单明了,加入网络的新节点能很快的与其它节点建立起联系获得补充信息。
缺点:每次发送信息的时候,要发送整个全局路由表;收敛时间太慢。
链路状态路由算法(Link State Routing)
基于 Dijkstra 算法,以图论作为理论基础,用图来表示网络拓扑结构,用图论中的最短路径算法来计算网络间的最佳路由。基于这类算法实现的协议有:OSPF 等。
基本思路:路由器先发现与自己相邻的节点,然后将自己与邻居节点之间的链路状态信息广播到整个网络中。同时收集网络中其他路由器广播来的链路状态信息,在本地构建出一个全网的拓扑图,并根据此图来计算当前节点到其它路由器之间的最短路径,从而生成路由表。当某台路由器与相邻节点之间的链路状态发现变化时,依然通过广播通知其他所有路由器更新网络拓补图并重新计算最短路径。
优点:更新信息小;能快速收敛。
1.3.2 动态路由协议
开放式最短路径优先(Open Shortest Path First,OSPF)是一个基于链路状态路由算法的协议,由于主要用在自治系统(Autonomous system,AS)(如:数据中心)内部,用于路由决策,因而称为内部网关协议(Interior Gateway Protocol,IGP)。有时 OSPF 可以发现多个最短的路径,可以在这些路径中进行负载均衡,这常被称为等价路由。
边界网关协议(Border Gateway Protocol,BGP)是一个基于距离矢量路由算法的协议,主要用在自治系统之间。BGP 又分为两类,eBGP 和 iBGP。自治系统间,边界路由器之间使用 eBGP 广播路由。内部网络也需要访问其他的自治系统,方法就是边界路由器通过运行 iBGP,使得内部的路由器能够找到到达外网目的地的最好边界路由器。
相关设备:
- 路由器(Router)不仅拥有交换机的功能,还能解析网络地址并根据路由表选择合适的 IP 路径。
相关资料:
1.4 传输层
传输层(TCP/UDP)提供端到端(end to end)的服务。
二、常见协议头格式
图片来源:TCP/IP Reference
2.1 以太网协议头格式
2.2 IPv4 协议头格式
2.3 IPv6 协议头格式
2.4 ICMP 协议头格式
ICMP 协议被封装在 IP 数据报中使用。
2.5 TCP 协议头格式
2.6 UDP 协议头格式
三、TCP 状态机
可以使用下面的命令来观察
tcpdump -i lo -S port 8888
tshark -i lo -f 'tcp port 8888' -o tcp.relative_sequence_numbers:FALSE
3.1 完整状态图
注意:SYN
和 FIN
会消耗一个序列号。
全称: URG(Urgent)、ACK(Acknowledgment)、PSH(Push)、RST(Reset)、SYN(Synchronization)、FIN(Finish)。
3.2 三次握手后立即四次挥手
更多资料:TCP的运输连接管理-TCP的连接建立
3.3 三次握手后双方发送数据后再四次挥手
更多资料:TCP的运输连接管理-TCP的连接释放
四、应用层协议
4.1 DHCP
图片来源:动态主机配置协议DHCP
图片来源:动态主机配置协议DHCP
4.2 FTP
图片来源:文件传输协议FTP
五、相关RFC
5.1 IP
- RFC 791: INTERNET PROTOCOL
5.2 ICMP
- RFC 792: INTERNET CONTROL MESSAGE PROTOCOL
5.3 TCP
- RFC 793: TRANSMISSION CONTROL PROTOCOL
- RFC 3450: Robust Explicit Congestion Notification (ECN) Signaling with Nonces
- RFC 1323: TCP Extensions for High Performance
5.4 UDP
- RFC768: User Datagram Protocol
5.5 MTU
- RFC 1191: Path MTU Discovery
5.6 DNS
- RFC 1034: DOMAIN NAMES - CONCEPTS AND FACILITIES
- RFC 1035: DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION
- RFC 1886: DNS Extensions to support IP version 6
5.7 NAT
- RFC 2663: IP Network Address Translator (NAT) Terminology and Considerations
- RFC 3489: STUN - Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs)
- RFC 5382: NAT Behavioral Requirements for TCP
5.8 IPv6
- RFC 2373: IP Version 6 Addressing Architecture
- RFC 2461: Neighbor Discovery for IP Version 6 (IPv6)
- RFC 2462: IPv6 Stateless Address Autoconfiguration
- RFC 3306: Unicast-Prefix-based IPv6 Multicast Addresses
- RFC 3315: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)
- RFC 3484: Default Address Selection for Internet Protocol version 6 (IPv6)
- RFC 3513: Internet Protocol Version 6 (IPv6) Addressing Architecture
- RFC 3587: IPv6 Global Unicast Address Format
- RFC 3633: IPv6 Prefix Options for Dynamic Host Configuration Protocol (DHCP) version 6
- RFC 3646: DNS Configuration options for Dynamic Host Configuration Protocol for IPv6
- RFC 4193: Unique Local IPv6 Unicast Addresses
- RFC 5006: IPv6 Router Advertisement Option for DNS Configuration
- RFC 8106: IPv6 Router Advertisement Options for DNS Configuration
- RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)