数据链路层实现了网卡接口的网络驱动程序,以处理数据在物理媒介(以太网、令牌环等)上的传输,不同的物理网络具有不同的电气特性,网络驱动程序隐藏了这些细节,为上层协议提供一个统一的接口。最常用的协议是 ARP(Address Resolve Protocol,地址解析协议)和 RARP(Reverse Address Resolve Protocol),它们实现了 IP 地址和机器物理地址(通常是 MAC 地址)之间的相互转换。
ARP:网络层使用 IP 地址,数据链路层使用物理地址,因此网络层必须先将目标机器的 IP 地址转化成其物理地址,才能使用数据链路层提供的服务。
RARP:仅用于网络上的某些无盘工作站,这些站点由于缺乏存储设备,因此无法记住自己的 IP 地址,但可以利用网卡上的物理地址来向网络管理者查询自身的 IP 地址。运行 RARP 服务器的网络管理者通常存有该网络上所有机器的物理地址到 IP 地址的映射。
2. 网络层
网络层实现数据包的选路和转发,WAN(Wide Area Network,广域网)通常使用众多分级的路由器来连接分散的主机或 LAN(Local Area Network,局域网),因此通信的两台主机一般不是直接相连的,而是通过多个中间节点(路由器)连接的。网络层的任务就是选择这些中间节点,以确定两台主机之间的通信路径。同时,网络层对上层协议隐藏了网络拓扑连接的细节,使得在传输层和网络应用程序看来,通信的双方是直接相连的。最常用的协议是 IP(Internet Protocol,因特网协议)和 ICMP(Internet Control Message Protocol,因特网控制报文协议)。
IP :能够根据数据包的目的 IP 地址来决定如何投递(直接交付 or 寻找下一跳路由器);
ICMP :它是 IP 协议的重要补充,主要用于检测网络连接。
3. 传输层
传输层为两台主机上的应用程序提供端到端(end to end)的通信,只关心通信的起始端和目的端,而不在乎数据包的中转过程,下图中实线表示实际通信过程,虚线表示逻辑通信过程:
传输层有 3 个重要协议:
TCP(Transmission Control Protocol,传输控制协议):为应用提供可靠的、面向连接的和基于流(stream)的服务。
通常 ARP 维护一个高速缓存,一种包含经常访问或最近访问的机器的 IP 地址到物理地址的映射,这样就避免了重复的 ARP 请求,提高了发送数据包的速度。Linux 中可以使用 arp 命令查看和修改缓存。
五、DNS 工作原理
通常使用机器的域名而不是 IP 地址来进行访问,因此就需要使用 DNS 协议将域名转换为 IP 地址。DNS 是一套分布式的域名服务系统,每个 DNS 服务器上都存放着大量的机器名和 IP 地址的映射,并且是动态更新的。众多网络客户端程序都是用 DNS 协议来向 DNS 服务器拆线呢目标主机的 IP 地址:
16 位标识:用于标记一对 DNS 查询和应答,以此区分一个 DNS 应答是哪个 DNS 查询的回应;
16 位标志:用于协商具体的通信方式和反馈通信状态:
QR:查询/应答标志,0 表示查询,1 表示应答;
opcode:定义查询和应答的类型,0 表示标准查询,1 表示反向查询,2 表示请求服务器状态;
AA:授权应答标志,仅有应答报文使用,1 表示域名服务器是授权服务器;
TC:截断标志,仅当 DNS 报文使用 UDP 服务时使用,1 表示报文超过 512 字节,被截断;