1.TCP/IP分层和TCP/IP协议栈
OSI七层模型注重的是模型本身,这个模型对讨论和研究计算机网络是非常有益的。但是,大家更喜欢用TCP/IP协议来分层,它注重的是协议。
TCP/IP分层后,将各种协议对应到这些分层,那么就称TCP/IP协议栈。
OSI七层协议、TCP/IP分层和TCP/IP协议栈的对应关系如下图。
在TCP/IP分层中,OSI的应用层、表示层、会话层全都统一为应用层,而底层的物理层和链路层又统一为接口层。每个TCP/IP分层都对应一些协议,这些协议组成了TCP/IP协议栈。
最顶层的是应用层协议,比如HTTP协议、DNS协议、FTP协议、POP3协议等。
传输层包含两个协议,TCP协议和UDP协议,在这一层将指定通信端口。
网络层包括ARP协议、IP协议、ICMP协议、IGMP协议等等,网络层的协议有些并不完全属于网络层,有可能向下跨到链路层,但总的来说,将它们都归类到网络层协议。
网络接口层的协议包含了点对点的PPP协议,以太网还有帧中继以及其他一些协议。
有了TCP/IP协议栈之后,可以将目光集中在各种协议上,通过分析各个协议,就能比较清晰的理解各层的责任、功能等等特性。
但是TCP/IP分层模型的缺点也是很大的,它将原本的OSI七层粗鲁的归纳成四层,带来的是丢弃了很多细节,在通用性上也要差得多,比如TCP/IP分层显然不适合描述蓝牙。但仅对于网络分析来说,TCP/IP的分层显然要宏观且方便的多。
2.局域网:以太网
以太网(Ethernet)是链路层的一种,它是局域网技术。除了以太网链路,还有广域网的链路,包括点对点的PPP协议、帧中继等。
无论是局域网还是广域网,只要身处链路层,所有数据帧都在通信链路的一个个链路节点上传输。链路层传输时需要保证数据能够且正确被下一个链路接收。所以,在链路层中,需要提供最基本的两个服务:
1)封装成帧和解封帧
2)差错校验和纠正
这里只介绍一些关于局域网相关的知识。
局域网目前所使用的技术都是以太网技术。在以前,还有各种各样的局域网技术,比如令牌环、FDDI、ATM等,但随着以太网硬件(比如集线器、交换机、网卡等)价格不断降低,且随着发展,以太网的局域网的速率也不必其他局域网技术差,所以目前以太网统领了局域网市场。
当使用以太网时,链路层封装的数据帧时以太网帧,以太网帧是以太网的最小传输单位。
每个以太网帧最小64字节,以太网帧的格式如下图所示。
注意,上图中只有链路层部分才是以太网帧的数据,所以7字节的前同步码(Preamble)、1字节的帧起始定界符、12字节的帧间距不属于以太网帧,它们属于物理层。其中,帧间距的存在,说明每个帧之间是间隔传输的,并不是完全连续传输。
主要看以太网帧格式。首先是6字节的目标MAC地址和6字节的源MAC地址,然后是可选的tag标记,一般当它不存在,之后是表示类型的2个字节,接着便是数据包部分,尾部是一个4字节的CRC的帧校验码。
目标MAC字段记录了目标的MAC地址,当某网卡或适配器接收到了一个以太网帧,如果它的MAC地址正好是帧中记录的目标地址,则将该帧解封后的数据包传递给网络层。此外,如果收到的是广播帧(目标MAC地址为FF-FF-FF-FF-FF-FF),则也将其传递给网络层,但如果收到目标MAC地址不是本接口地址的任何数据帧,都将直接丢弃。
源MAC地址字段记录的是该帧的出口MAC地址。
类型字段(2字节)允许以太网复用网络层的协议,从而可以将其与网络层协议结合起来。它可以识别上层使用的是什么协议,以便接收到帧之后,将数据包指定给网络层的指定协议。事实上,所以协议格式中的类型字符的作用都是为了将该协议与上一层的协议结合起来。
FCS字段的目的是使得接收到帧时,能够检测出帧中是否出了差错,并且纠正差错。
最后是中间的数据部分,它的大小范围为46-1500字节,最小46字节是因为数据帧的最小字节数为64字节,最大1500字节是因为数据包的最大大小为1500字节。
如果发现数据部分小于46字节,在封装帧的时候自动填充到46字节。这要求上层协议必须能够识别出填充的这部分并正确的去除掉这部分。
上图显示了以太网帧和上层数据包之间的关系。
最后,还需要明确的是封装帧和解封帧现在都是网卡来完成的,操作系统不会参与,所以不会占用CPU资源。
3.虚拟局域网:VLAN
交换机的每一个端口都是一个冲突域,它能够隔离冲突域,但是交换机无法隔离广播域。只要有广播帧(即目标MAC为FF-FF-FF-FF-FF-FF的帧),交换机会将其广播给所有接口上的主机。如果有某个主机不断的发送ARP请求(该协议的请求会导致一次广播),比如中了ARP病毒,或者编程不慎等等原因都有可能,这将导致这个广播域内发生广播风暴,造成网络堵塞,严重时甚至整个广播域内谁也无法互联。
另一方面,公司网络规划时,按照物理为位置划分网段并不一定方便管理,比如可能更合理的是按照部门进行划分网段。
这时就可以使用VLAN(Virtual Local Area Network)技术,它是一种虚拟局域网技术,主要是为了解决交换机无法隔离广播的问题。VLAN可以将一个LAN划分成多个逻辑的LAN,即VLAN,使得每一个VLAN都是一个隔离的广播域。各VLAN之间不能直接通信,但VLAN内的主机间通信和原来的LAN内通信是一样的,这使得广播帧只会在一个VLAN内扩散,从而有效减小了广播域,也因此将广播风暴的影响限制在一个VLAN内。
因为VLAN可以将LAN划分成多个VLAN,它可以在一定程度上无视地理位置划分多个网段带来的不便。通过VLAN可以使得局域网的组织变得非常灵活。
例如,假设公司有四层办公楼,每一楼层都有接入层交换机,它们汇聚到机房,而且每一层都有市场部、财务部、研发部等,使用VLAN可以轻松地将分布在不同楼层的同一部门组织在同一个网段内,所有层的市场部在VLAN1,所有层的财务部在VLAN2,所有层的研发部在VLAN3中。
另一方面,每个VLAN是一个隔离的广播域,同一个VLAN中的计算机在同一个网段中。这使得VLAN之间无法直接通信,VLAN之间想要通信,需要经过路由,所以VLAN技术需要额外配合路由设备来实现,当然,三层交换机也可以。