- 广域网和局域网
- 标准化机构
- 协议分层模型
- 传输方式分类
- IP地址和MAC地址
- 网络构成要素
- 网络通信示例
广域网和局域网
计算机网络,根据规模可以划分为广域网(WAN)和局域网(LAN)。
标准化机构
标准化组织大致分为三类:国际级标准化机构(ISO[1]、ITU-T[2])、国家级标准化机构(ANSI[3])和民间团体(IETF[4])。
协议分层模型
在OSI参考模型中,将计算机网络分为七层。
应用层:
规定了应用程序通信相关细节。常见协议:HTTP、FTP、TELNET、SSH、SNMP等。
表示层:
负责数据格式转换。
会话层:
负责管理通信连接以及数据分隔。
传输层:
保证传输的可靠性。常见协议:TCP、UDP等。
网络层:
将数据传输到目标地址,负责寻址和路由。常见协议:IP、ICMP、ARP等。
数据链路层:
负责数据帧的生成和接收。
物理层:
负责比特信号与电压、光信号之间的转换。
传输方式分类
面向有连接和面向无连接
在分层协议中,不同层对连接的定义有所不同,有的连接是逻辑的,有的连接是物理的。无连接类型的传输不需要建立和断开连接。发送端不需要确认对端存在,对端不存在或者无法接收消息的情况下,发送端仍然会将数据发送出去。
电路交换和分组交换
单播、广播、多播和任播
- 单播(Unicast):一对一通信。
- 广播(Broadcast):发送给相连的所有主机。
- 多播(Multicast):多播通信典型场景是电视会议。
- 任播(Anycast):在多台主机中选出一台作为接收端。
IP地址和MAC地址
MAC地址是负责最终通信的地址,但是寻址过程中,IP地址是必不可少的。IP地址由网络号和主机号两部分组成,网络号相同说明他们处于同一网段。MAC寻址参考地址转发表,IP寻址参考路由控制表。
网络构成要素
数据链路和通信媒介
| 链路 | 媒介 | 说明 |
|---|---|---|
| 以太网 | 同轴,双绞线,光纤 | 局域网通信 |
| 无线 | 电磁波 | 局域网通信 |
| ATM[5] | 双绞线,光纤 | 局域网、广域网通信 |
| FDDI[6] | 双绞线,光纤 | 局域网、广域网通信 |
| 帧中继 | 双绞线,光纤 | 广域网通信 |
| ISDN[7] | 双绞线,光纤 | 广域网通信 |
网卡
计算机接入网络,必须使用网卡,目前大部分计算机都有内置的NIC。
中继器
在OSI模型的第一层,用于调整和放大数据传输中的光、电信号。中继器不能在传输速度不同的媒介之间转发。连接两个不同速度的网络需要的是网桥或者路由器。
集线器可以看作多口中继器,每个端口可以看成一个中继器。
网桥/2层交换机
网桥能够识别数据链路中的数据帧,并将数据帧临时存到内存,再重新生成信号作为一个全新的帧转发给下一跳。数据帧中有一个数据位叫做FCS[8],用于校验帧数据是否正确发送到目的地。
网桥能够通过地址自学机制和过滤功能控制网络流量。网桥中的地址是MAC地址、硬件地址、物理地址以及适配器地址。
自学式网桥:这类网桥会记住层级通过自己转发数据帧的MAC地址,在后续的数据转发中,可以判断哪些网段中包含持有哪些MAC地址的设备。数据帧直接发到目标网段。
交换集线器(Hub)属于网桥的一种,每个端口提供类似网桥的功能。
路由器/3层交换机
路由器连接网络层上的两个网络,转发分组报文。网桥根据物理地址处理数据,路由器根据IP地址处理数据。
路由器还能分担网络负荷,具备一定的网络安全功能。
4~7层交换机
负责处理OSI模型中从传输层到应用层的数据,以TCP等协议的传输层及上面的应用层为基础,分析收发数据,并对数据进行特定的处理。
4~7层交换机的应用场景有广域网加速、特殊应用访问加速以及防火墙等。
网关
网关与4~7层交换机一样都是传输层及以上的数据,但是网关不仅转发数据,还负责对数据进行转换。
通常会使用一个表示层或应用层网关,在两个不能直接通信的协议之间进行翻译,最终实现两者之间的通信。
常见的网关分类:
- 安全网关:防火墙
- 协议网关:实现不同协议之间的通信
- 应用网关:邮件网关
网络通信示例
网络通信的过程是消息在网络中正确传输的过程,应用消息经过TCP/IP分层模型的不同层,各层在发送消息、接收消息时,进行封包和解包,最终将消息中数据从网络一端的应用传送到另一端的应用。
数据包
数据包结构
数据包中一般会包含以太网包首部、IP包首部、TCP包首部以及会话、表示、应用层的数据。
数据包单位
数据包在数据链路层用帧为单位,在IP和UDP等网络层用包为单位,而段表示TCP数据流中的信息。消息是指应用协议中数据的单位。
发送数据包
应用程序处理消息
应用程序负责将用户消息组装成具体的消息报文b(应用层)并将消息进行编码处理(表示层),最终应用程序会在合适的时机建立通信连接(会话层)并将消息发送出去。
传输模块处理消息
应用程序会根据应用具体的场景选择使用TCP传输协议还是UDP传输协议。
如果是TCP协议,需要在应用层数据的首部附加一个TCP头,包括源端口号、目标端口号、序号以及校验和。
IP模块处理消息
IP模块将传输层传过来的头部和数据合起来当做自己的数据,并在头部加上自己的IP头。IP头部中包含接收端IP地址以及发送端IP地址,还有用来判断其后数据是TCP还是UDP的信息。
IP包生成后,参考路由控制表决定接受此IP包的路由或主机,随后,IP包被发送给连接这些路由器或者主机网络接口的驱动程序,实现真正的数据发送。
如果此时还不知道接收端的MAC地址,可以使用ARP协议进行查找。知道了对端的MAC地址,就可以将MAC地址和IP地址交给以太网驱动程序,实现数据传输。
网络接口处理消息
IP包对于以太驱动来说就是数据,驱动给这些数据加上以太网首部并进行发送。以太网首部中包含接收端MAC地址、发送端MAC地址以及标志以太网类型的以太网数据的协议。
发送处理中的FCS由硬件计算,添加到包的最后。
数据链路中的包
接受数据包
网络接口处理消息
主机收到以太网包后,确定包首部的MAC地址是否是自己,不是自己则丢弃。如果是自己的包,则查找以太网包首部中的类型域,确定数据类型。
如果是IP包,则将数据传给处理IP的子程序,如果是ARP包,则把数据传给ARP处理。如果不识别的类型,则丢弃数据。
网络模块处理消息
以IP协议处理为例,解析得到包首部的IP地址,判断IP地址是否匹配,并确定上一层的协议,根据上一层的协议类型,确定数据传给TCP处理还是UDP处理。
对于有路由器的情况,接收端的地址不是自己的地址,需要借助路由控制表,转发数据到下一个网络节点。
传输模块处理消息
以TCP协议处理为例,首先会计算数据校验和,判断数据是否被破坏,然后检查数据序列号,最后检查数据端口号。
数据接收完毕,会发送确认消息给发送端。接收端如果没有接受到回执,会根据一定的策略重发消息。
数据完整的接收后,传递给端口号识别的应用程序。
应用程序处理消息
应用程序接收到数据后,根据自己程序的协议解析数据,并进行相应的逻辑处理。
文中图片来自百度图片,侵删。
ISO: International Orgnization for Standards ↩︎
ITU-T: International Telecommunication Union Telecommunication Standardization Sector ↩︎
ANSI: American National Standards Institute ↩︎
IETF: The Internet Engineering Task Force ↩︎
ATM: Asynchronous Transfer Mode ↩︎
FDDI: Fiber Distributed Data Interface ↩︎
ISDN: Integrated Services Digital Network ↩︎
FCS: 用CRC(循环冗余校验码)方式校验数据帧中的位。 ↩︎