关键术语:
数据帧:数据链路层的协议数据单元,来自于网际层的IP级别的数据报以预定义的格式封装为数据帧。
子网:IP地址是以网络号和主机号来表示网络上的主机的,只有在一个网络号下的计算机之间才能“直接”互通,不同网络号的计算机要通过网关(Gateway)才能互通。但这样的划分在某些情况下显得并不十分灵活。为此IP网络还允许划分成更小的网络,称为子网(Subnet)。
网络适配器:也称网卡,它使得用户可以通过电缆或无线相互连接。每一个网卡都有一个被称为MAC地址的独一无二的48位串行号。
传输介质:传输介质是通信网络中发送方和接收方之间的物理通路。常用的传输介质可分为有线(双绞线、同轴电缆和光纤)和无线两类。
布线类型:网络所使用的线缆类型对其他设计会有一定影响。比如适配器传递的比特流的电子特性。
前导码:表示帧起始的一系列比特。
目标地址:接收帧的网络适配器物理地址。
源地址:发送帧的网络适配器的物理地址。
长度:表示数据段的长度。
数据:帧中传输的数据。
帧校验序列:发送方计算帧的循环冗余码校验(CRC)值,把这个值写到帧中,接收方重新计算CRC,与FCS字段的值比较,判断数据是否丢失或改变。
先来一个概述,你首先得要明白:TCP/IP协议栈的设计保证了与硬件交互相关的细节都发生网络访问层,即应用层,传输层,网际层不必关心硬件设计的问题,使得TCP/IP能够工作于多种不同的传输介质。
为了设计网络访问层的软件组件,开发人员必须假定物理网络具有特定的性质,因此,网络访问层的软件必须伴随特定的硬件设计。
TCP/IP协议栈的最底层是网络访问层(也叫网络接入层,链路层等),它对应着OSI的物理层和数据链路层。
OSI的物理层:在发送端,物理层负责把数据帧转换为适合于传输介质的比特流。
在接收端,物理层会把这些脉冲重新组合为数据帧。
OSI的数据链路层有两个独立的任务:
介质访问控制(MAC):提供与网络适配器(也称网卡)连接的接口。
逻辑链路控制(LLC):对子网上传递的帧进行错误检查,并且管理子网上通信设备之间的链路。
注意:NDIS和ODI
网络驱动程序接口规范(NDIS)和开放数据链路接口规范(ODI)目的在于让单个协议栈(如TCP/IP)使用多个网络适配器,并让单个网络适配器使用多个上层协议
网络访问层主要是为物理网络准备数据所必需的服务和功能:
- 与计算机网络适配器的连接。
- 根据合适的访问方式调整数据的传输。
- 把数据转化为电子流或模拟脉冲的形式,以在传输介质上进行传输。
- 对接收到的数据进行错误的检查。
- 给发送的数据添加错误检查信息,从而让接收端计算机能够对数据进行错误检查。
介绍网络访问层,也少不了要介绍网络体系。网络体系(如以太网)具有一系列的规范来管理介质访问,物理寻址,计算机与传输介质的交互。在决定网络体系时,实际上是在决定如何设计网络访问层。
网络访问层包含了
IEEE 802.3(以太网):基于线缆的网络
IEEE 802.11(无线网络) :无线网络技术
IEEE 802.16(WiMax) :用于移动通信长距离无线连接技术
点到点协议(PPP):Modem通过电话线进行连接的技术
以及其他的网络体系。
由于网络访问层封装了传输介质的细节,因此协议栈的上层则可以独立于硬件进行操作。
物理寻址:
网络访问层需要把逻辑IP地址(通过协议软件来配置)与网络适配器的固定物理地址(即独一无二的MAC地址)相关联。TCP/IP使用地址解析协议(ARP)和逆向地址解析协议(RARP)为IP地址,MAC地址建立了一个对应关系。
PS:逻辑IP地址只存在软件之中。
以太网:
在早期的以太网上,全部计算机共享一个传输介质。所以以太网使用了载波侦听多路访问/冲突检测(CSMA/CD)的方法来判断计算机何时可以把数据发送到访问介质。
CSMA:CSMA会监听传输介质的状态,若传输介质空闲,则尝试发送数据。
CD:两台计算机同时尝试发送数据时产生冲突时,计算机会停止发送,然后等待一个随机时间,再次尝试发送。这就是CD。
但上述以太网在非常多计算机的情况下会由于冲突的增多影响性能。所以在现代的以太网中,计算机通常连接到一个中央网络设备(比如交换机)中,交换机会对流量进行管理,从而减少冲突的产生。
在以太网中。网络层主要把网际层的数据报转换成能够通过网络适配器硬件进行传输的形式,它会执行以下操作:
- 把网际层的数据分解成较小的数据块,以符合以太网帧数据段的要求。
- 将数据块打包成帧。帧里面包含着以太网网络适配器处理帧所需要的。
- 将数据帧传递给对应于OSI物理层的底层组件,后者把帧转换为比特流,并且通过传输介质发送出去。
以太网网络适配器会接收到这些帧,并检查目标地址是否与网络适配器的地址相匹配,若能匹配,网络适配器则会处理接收到的帧。
802.3的以太网帧所包含的内容:
前导码 (总共8字节,包括帧起始字符1字节) |
帧起始字符 |
目的地址 (6字节) |
源地址 (6字 节) |
类型/长度 (2字 节) |
数据 (46-1500字节) |
帧校验序列 (4字节) |