链路层
互联网的底层基于包交换(packet-switched),而不是链接。技术上分为WAN和LAN。
链路层是TCP/IP协议栈的最底层。TCP/IP支持很多不同的链路层协议,这取决于网络所使用的硬件,如以太网、令牌环网、FDDI(光纤分布式数据接口)及RS-232串行线路等。我们只关注常见的几个。
1. 以太网
局域网出现过很多种协议,FDDI、ATM。很多已经被淘汰,以太网已成为最常见的局域网网络。最早是用同轴电缆(coaxial cable),最远能传输500米,然后大部分被双绞线(twisted pair cable)取代。双绞线去掉了屏蔽层,更容易被干扰,虽然只能传输100米,但是更便宜和更容易安装。
最开始以太网公用一条线路的时候,电脑可以访问共享的线路(shared medium)不需要任何的确认和同步。这个方法叫做:carrier sense, multiple access with collision detection (CSMA/CD)
,是一个MAC协议(Media Access Control)。
TCP/IP协议栈是没有物理层的概念,物理层的标准由IEEE做了规范。Institute of Electrical and Electronics Engineers(IEEE)是美国的电子电气工程师协会。所有的IEEE 802
标准是为了满足家庭和企业网络的应用;802随着时间发展出了很多协议,其中最广泛的是802.3
(essentially Ethernet)和802.11
(WLAN/Wi-Fi)。在IEEE的设计概念里,是有物理层的。
以太网的速度和cpu的速度是相伴相生的。cpu速度的提高促进了更高速的以太网。
以太网帧(Ethernet frames)
Ethernet II
最常使用的格式。是几家大公司协定的协议,随后被IEEE标准化为802.3
。最开始标准和实际还是有细微局别,最后IEEE标准允许其中一个字段既可以为Length也可以为Type。当Ethernet II
定义的EtherType
大于等于1536(ox0600),这两种格式就能同时在一个物理媒介上运行。
IEEE 802.3 packet and frame format:
IEEE Packet是物理层相关的,preamble
和SFD
都是物理层使用的。preamble
是交替的1和0,像这样10101010 10101010 10101010 10101010 10101010 10101010 10101010
,SFD 是0xAB
,标识preamble的结束。这些数据用来让接受者的电路做clock recovery
。暂未做深入分析,涉及物理层。
最初以太网位编码是用Manchester Phase Encoding (MPE)。用电压变化而不是绝对值表示0或1。 -0.85到+0.85V表示0,+0.85v到-0.85v表示1。
IEEE 802.2
和tcpip协议相关的一些IEEE 802标准:
Name | Description | Official Reference |
---|---|---|
802.1w | Rapid Spanning Tree Protocol (RSTP) | [802.1D-2004] |
802.2 | Logical Link Control (LLC) | [802.2-1998] |
802.3 | Baseline Ethernet and 10Mb/s Ethernet | [802.3-2008] (Section One) |
802.3u | 100Mb/s Ethernet (“Fast Ethernet”) | [802.3-2008] (Section Two) |
802.3z/802.3ab | 1000Mb/s Ethernet (“Gigabit Ethernet”) | [802.3-2008] (Section Three) |
802.3ae | 10Gb/s Ethernet (“Ten-Gigabit Ethernet”) | [802.3-2008] (Section Four) |
802.11a | 54Mb/s Wireless LAN at 5GHz | [802.11-2007] |
802.11b | 11Mb/s Wireless LAN at 2.4GHz | [802.11-2007] |
802.11n | 6.5–600Mb/s Wireless LAN at 2.4 and 5GHz using optional MIMO and 40MHz channels | [802.11n-2009] |
物理地址
48bit的物理地址,也分为三类,单播地址,广播地址,组播地址。
Frame sizes
最小64字节,如果不够,会在末尾加pad,这在之前CSMA/CD上很有用。一个空的TCP包是60直接,所有会有pad。传统以太网最大为1518字节。一种提高大数据传输性能的方法是使用非标准的巨型帧,但是只能在特定环境下使用,因为大多以太网设备不支持。
以太网帧之间还有12个字节的空隙。所以frame efficiency
是1500/(12+8+14+1500+4) =0.975。大约98%。
桥接和交换机
最早的集线器(HUB)或中续器,只是在电信号层面的广播,数据包会发送给所有的端口。现在基本是交换机来扩展局域网,以加入更多的电脑。交换机可以在packet的基础上,只对目的包的端口发生数据。交换机本质上就是高性能的桥接。对网口桥接就是将多个网口当做一个交换机。
交换机会对每个端口自动映射对应的mac地址,存储在filtering databases。当第一次启动,database是空的时候,交换机会将数据包拷贝多份,发送到每个交换机端口。 多个交换机并且有循环的links。可能造成广播风暴(broadcast storm)。STP协议可以解决这个问题。
路由器实现了网络层,比交换机拥有更多的功能。如下图,不过这是理想情况下,实际上路由器为了方便管理,一般都有web界面,实际上是实现了应用层的。
在linux中可以通过brctl命令,进行桥接的操作。
vlan和QoS
802.1q
标准定义了virtual LANs,用于将大局域网拆分成更小的局域网。接入同一交换机的两个不同vlan的电脑,需要一个路由来支持流量隔离。所以支持vlan的交换机需要一定程度的路由功能,比普通交换机会贵点。
802.1p
扩展了802.1q
,提供了QoS
(Quality of service)优先级的定义。。Qos指的是流量优先级和resource reservation control mechanisms
,不是能达到服务质量。但是如何处理不同优先级的packet,没有统一规范,不同路由器支持配置不同的等待队列,每个队列的优先级和保留带宽等。
QoS对实时视频很重要。
QoS应用,IPTV,需要稳定的传输速率和低延时。不能降低传输速率来避免拥塞。电信的网络和电视就分属于不同的vlanId。看电视和上网需要插入对应的lan口上,如果家里拉线,只拉了一根线,那么只能上网,或者只能看电视。用支持vlan的交换机,就能够单线复用了。
2. PPP
点对点协议(Point-to-Point Protocol)也是一种链路层协议,包含了一系列协议。用来在两个路由器之间,中间不包含其它任何主机上建立连接。PPP可以在多种物理网络上运行,串行线路、电话线、光纤等。
可以提供连接认证,传送机密和压缩。
常用来在串行线路(serial links)上从低速的dial-up modems
到高速的optical links
发送IP数据包。
The PPP basic frame:
因为是点对点的线路,Addr和Control都是固定值,甚至可以去除。
点对点协议和P2P是两个不同的东西。P2P传输是一种区别于client-server的网络应用方式。比如BitTorrent,就能在用户之间建立TCP链接,来加快文件的下载。
PPPoE
ppp over Ethernet(PPPoE)。当广域网的连接设备充当桥接的时候。通过PC来建立PPP链接
PPPoE的示意图 DSL电话网络已经很少了,现在都是光纤入户。除了DSL Modem换成光猫,原理还是差不多。
全双工 ,自动协商
windows电脑在以太网配置->高级
里面可以看见。
Linux# ethtool eth0
Settings for eth0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Supports auto-negotiation: Yes
...
链路层重传多少次,提供多高的稳定性的争论在RFC3366。
参考
- TCPIP详解
- 单线复用、单线多用和vlan的理解:https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=309204&page=1#pid2503294
- Ethernet_frame: https://en.wikipedia.org/wiki/Ethernet_frame https://en.wikipedia.org/wiki/Ethernet_physical_layer
- Qos:https://en.wikipedia.org/wiki/Quality_of_service
- Point-to-Point Protocol:https://en.wikipedia.org/wiki/Point-to-Point_Protocol