计算机网络
0. 前言:如果让你来设计网络?
0.1 物理层
假如你是一台电脑,你的名字叫A
。
在很久很久以前,你不和任何电脑相连接,孤苦伶仃。
直到有一天,你希望与另一台电脑B
建立联系
于是你们各开了一个网口,用一根网线连接了起来
有一天,一个新伙伴C
加入了
但聪明的你们很快发现,可以每个人各开两个网口
用一共三根网线相连
随着越来越多电脑的加入,你发现身上开的网口实在太多了
(实际上根本不能开多网口)
而且网线密密麻麻,混乱不堪
于是你们发明了一个中间设备
你们将网线都插在这个设备上,由这个设备做转发
就可以彼此之间通信了
本质上和原来一样,只不过网口的数量和网线的数量减少了
你给他取名叫
集线器(hub)
集线器仅仅是无脑将电信号转发到所有出口,不做任何处理
你觉得他是没有智商的
因此把人家定性在了
物理层
由于转发到了所有出口
那和集线器相连的B
,C
,D
,E
四台机器怎么知道数据包是不是发送给自己的呢?
首先,你要给所有连接到集线器的设备都取个名字
原来你们叫A
,B
,C
,D
但现在需要一个更专业的、全局唯一的名字作为标志
你把这个更高端的名字称为
Mac地址
例如,你的Mac地址是AAA
而你的伙伴的Mac地址是BBB
以此类推,确保每个Mac地址都是独一无二的
这样,只要A
在发送数据包给B
时,只要在头部拼接一个这样的结构的数据就可以了:
B
在收到数据包后
根据头部的目标Mac地址信息
判断这个数据包的确是发给自己的
于是就收下了
其他的B
,C
,D
,E
收到数据包后
根据头部的目标Mac地址信息
判断这个数据包并不是发给自己的
于是便丢弃
虽然集线器使整个布局干净不少
但原来我只需要发送给电脑B
的消息
现在却要发送给集线器中所有的电脑
这样既不安全,也不节省网络资源
0.2 数据链路层
如果把集线器弄得更智能一些
只发给目标Mac地址指向的那台电脑就好了
虽然只比集线器多了一点点区别
但看起来似乎更智能了
你把这东西叫做
交换机(Switch)
也正因为这一点点智能,你把他放在了另一个场景
数据链路层
交换机内部维护一张Mac地址表
记录着每一个Mac地址的设备,连接在其哪一个端口上
Mac地址 | 端口 |
---|---|
bb-bb-bb-bb-bb-bb | 1 |
cc-cc-cc-cc-cc-cc | 2 |
aa-aa-aa-aa-aa-aa | 3 |
dd-dd-dd-dd-dd-dd | 4 |
假如你仍然发送给B
一个数据包,
构造了这样的数据结构从网口发出
当数据到达交换机时
交换机内部通过自己维护的Mac地址表
发现目标机器B
的Mac地址映射到了端口1
上
于是把数据从1号端口发送给了B
你给这样传输方式而组成的小范围网络,叫做
以太网
当然,最开始的时候Mac地址表是空的
是怎么逐步建立起来的呢
假如在Mac地址表为空时
你给B
发送了数据
这个包从端口3
进入的交换机
所以此时交换机就可以在Mac地址表记录第一条数据
Mac地址 | 端口 |
---|---|
aa-aa-aa-aa-aa-aa | 3 |
交换机看目标Mac地址在Mac表中并没有映射关系
于是将此包发给了所有端口,也就是所有机器
之后只有机器B
收到了确实是发给自己的包
于是做出响应
响应数据从端口1
进入交换机
于是交换机此时在地址表中更新了第二条数据
Mac地址 | 端口 |
---|---|
bb-bb-bb-bb-bb-bb | 1 |
aa-aa-aa-aa-aa-aa | 3 |
经过该网络中的机器不断的通信
交换机最终将Mac地址表建立完毕
随着机器越来越多,交换机的端口也不够了
但聪明的你发现
只要将多个交换机连接起来
这个问题就可以轻而易举的搞定了
你不需要设计任何额外的东西
只需要按照之前的设计和规则来操作
就可以实现所有电脑的互联
不过需要注意的是,两个交换机相连的线
在Mac地址表中并不是一条记录
而是要将另一台交换机连接的四台机器与该端口的记录
全都记录在表中
最终两个交换机将分别记录从A
到H
所有机器的映射关系
比如:
Mac地址 | 端口 |
---|---|
bb-bb-bb-bb-bb-bb | 1 |
cc-cc-cc-cc-cc-cc | 2 |
aa-aa-aa-aa-aa-aa | 3 |
dd-dd-dd-dd-dd-dd | 4 |
ee-ee-ee-ee-ee-ee | 5 |
ff-ff-ff-ff-ff-ff | 5 |
gg-gg-gg-gg-gg-gg | 5 |
hh-hh-hh-hh-hh-hh | 5 |
Mac地址 | 端口 |
---|---|
bb-bb-bb-bb-bb-bb | 1 |
cc-cc-cc-cc-cc-cc | 1 |
aa-aa-aa-aa-aa-aa | 1 |
dd-dd-dd-dd-dd-dd | 1 |
ee-ee-ee-ee-ee-ee | 2 |
ff-ff-ff-ff-ff-ff | 3 |
gg-gg-gg-gg-gg-gg | 4 |
hh-hh-hh-hh-hh-hh | 5 |
这在只有8台甚至只有几百台电脑的时候都还好
所以这种交换机的交换方式已经足够支持一阵子了
但很快,电脑的数量发展到几万、几十万甚至更多
0.3 网络层
交换机已经无法支撑如此庞大的数据关系了
此时你动了歪脑筋
你发现了问题的关键在于
连接其他交换机的那根网线
后面不知道有多少个设备在源源不断的连接起来
从而使得地址表越来越大
那我能不能把这根网线接入到一个新的设备
这个设备就跟电脑一样
有自己独立的Mac地址
而且同时还能帮我把数据包做一次转发呢?
这个设备就是
路由器(Router)
作为一个独立的拥有Mac地址的设备
并且可以帮我把数据包做一次转发
你把他定在了
网络层
好了,现在交换机的Mac地址表中
只需要多出一条ABAB
与其端口的映射关系
又可以成功将数据包转交给路由器了
那如何做到把A
发送给C
和D
甚至是E
,F
,G
,H
的数据包,统统先发送给路由器呢?
不难想到这样一个点子:
假如电脑C
和D
拥有共同的前缀
C的Mac地址:FFFF-FFFF-CCCC
D的Mac地址:FFFF-FFFF-DDDD
那我们就可以说,将目标地址FFFF-FFFF-?
开头的
统统先发送给路由器这样是否可行呢?
答案是不行的
我们先从现实中的Mac地址入手
Mac地址也叫物理地址、硬件地址
长度为48位
比如:00-16-EA-AR-3C-40
他是由网络设备制造商生产时烧录在网卡的一种闪存芯片
前24位:00-16-EA
代表网络硬件制造商的编号
后24位AE-3C-40
是该厂家自己分配的,一般具有系列号
Mac地址就如同身份证上的身份证一样,具有唯一性
于是你发明了一个新的地址
给每一台机器一个32位的编号
11000000101010000000000000000001
你觉得这有些不清晰
于是把它分成四个部分,中间用点相连
你还觉得不清晰,于是转换为十进制
192.168.0.1
最后,你给了这个地址一个响亮的名字:
IP地址
现在每一台电脑都既有自己的Mac地址,又有自己的IP地址
只不过IP地址是软件层面上的
可以随时修改
Mac地址一般是无法修改的
假如我想把数据包发送给A
,B
,C
,D
中的一台设备
无论是哪一台,我都可以这样描述:
将IP地址为192.168.0开头的全部发送给路由器,之后再怎么发,交给他!
那交给路由器之后,路由器又是怎么把数据包准确转发给其他设备的呢?
我们先给所有的电脑加上自己的IP地址
现在两个设备之间进行传输
除了加上数据链路层的头部之外
还要再增加一个网络层的头部
假如A
给B
发送数据
由于他们直接连着交换机
所以A
直接发出如下数据包即可:
其实网络层并没有发挥作用
但如果A
给C
发送数据
A
就需要先转交给路由器然后再有路由器转发给C
由于这个过程仍然需要以太网
所以这个数据包是分成两段:
A-路由器
这段的包和路由器-C
这段的包
那A
给C
发数据包,怎么知道是否要经过路由器转发呢?
经过一番思考,你发明了
子网
如果源IP与目的IP处于一个子网,直接将包通过交换机发出去
如果源IP与目的IP不处于一个子网,就交给路由器去处理
现在,只需要解决什么叫处于一个子网就好了
你规定如下:
192.168.0.1和192.168.0.2处于一个子网
192.168.0.1和192.168.1.1不处于一个子网
即你想表示,对于192.168.0.1
来说,192.168.0
开头的就算是在一个子网
否则就是在不同的子网
那对于其他计算机兄弟来说,怎么表达这个意思呢?
于是你们发明了
子网掩码
假如某台机器的子网掩码定为255.255.255.0
这表示将源IP与目的IP分别与这个子网掩码进行与运算
相等则是在一个子网
不相等则不是在一个子网
例如
A电脑:\(192.168.0.1 \& 255.255.255.0 = 192.168.0.0\)
至此,经过物理层、数据链路层、网络层这前三层的协议
以及根据这些协议设计的各种网络设备
网线、集线器、交换机、路由器
理论上只要有对方的IP地址
就可以将地球上的任意位置的两个节点
0.4 传输层
前三层协议只能将数据从一台主机传输到另外一台主机
但是,到了目的地之后
数据包具体交给哪个程序呢?
所以,你需要将通信的进程区分开来
于是就给每个进程分配一个数字编号
你给他起了一个响亮的名字:
端口号
然后你在需要发送的包上,增加了传输层的头部、源端口号和目标端口号
这样,你将原本主机到主机的通信
升级为了进程和进程之间的通信
你没有意识到,你不知不觉实现了
UDP协议
就这样,你用UDP协议无忧无虑的同B进行着通信,一直没发生什么问题
但很快,你发现事情变得非常复杂
丢包问题
由于网络的不可靠,数据包可能在半路丢失,而A
和B
却无法察觉
对于丢包问题,只需要解决两个事就好了:
A怎么知道包丢了?
丢了的包怎么办?
于是你设计了一个方案:
A
每发送一个包,都必须收到来自B
的确认(ACK)
再发下一个
否则在一定时间内没有收到确认,就重传这个包
你管他叫
停止等待协议
只要按照这个协议来,虽然A
无法保证B
一定能收到包,但A
能确认B
是否收到了包
收不到就重试
尽最大努力让这个通信变得可靠
于是你们现在的通信有了一个新的特征:
可靠交付
但很快,你又发现了一个问题
效率问题
停止等待虽然能解决问题,但是效率太低了
A
本来能在发完第一个数据包之后立刻发第二个数据包
但由于停止等待协议
A
必须等数据到达了B
,且B
的确认包又回到了A
才可以继续发第二个数据包
这差的可不是一星半点
于是你对这个过程进行了改进
采用流水线的方式,不再傻傻的等
顺序问题
网络是复杂的、不可靠的
有的时候A
发出去的数据包
分别走了不同的路由到达B
可能无法保证和发送数据包时一样的顺序
这时,你想到一个好方法:
A
在发送的数据包
中增加一个序号(seq)
同时B
要在ACK包
上增加一个确认号(ack)
这样不但解决了停止等待协议的效率问题
也通过这样标序号的方式解决了顺序问题
而B
这个确认号意义非凡
比如B
发了一个确认号为3
它不仅仅表示A
发送的序号为2
的包收到了
还表示2
之前的数据包都收到了
这种方式叫做
累计确认或累计应答
注意:实际上
ack
的号是收到的最后一个数据包的序号seq
+ 1,也就是告诉对方下一个应该发的序号是多少
有的时候,A
发送数据包的速度太快,而B
的接收能力不够但B
却没有告知A
这种情况
那怎么办呢?
很简单,B
告诉A
自己的接收能力
A
根据B
的接收能力相应控制自己的发送速率就好了
于是B
决定,每次发送数据包给A
时,顺带传过来一个值
叫窗口大小(win)
这个值就表示B
的接收能力
同理,每次A
给B
发包时也带上自己的窗口大小
表示A
的接收能力
拥塞问题
但有的时候,不是B
的接收能力不够
而是网络不太好,造成了网络拥塞
拥塞控制与流量控制有些像
但流量控制是受B
的接收能力影响
而拥塞控制是受网络环境的影响
拥塞问题的解决仍然是通过控制窗口的大小
只不过,流量控制的窗口大小是B
直接告诉A
的
而拥塞控制的窗口大小按理说就应该是网络环境主动告诉A
这明显不现实
所以只能通过A
不断单方面的试探
不断感知网络环境的好坏
进而确定自己的拥塞窗口的大小
有的时候,B
主机的相应进程还没准备好或者是挂掉了
A
就发送了数据包
导致了浪费
这个问题在于,A
在跟B
通信之前
没有事先确认B
是否已经准备好
就开始发了一连串的信息
就好比你跟一个人打电话
你还没有“喂”一下确认对方有没有在听
你就巴拉巴拉说了一堆
这个问题该怎么解决呢?
地球人都知道,三次握手嘛
A
与B
各自在内存中维护着自己的状态变量
三次握手之后,双方的状态都变成了连接已建立
第一次握手:
A
给B
发送SYN
第二次握手:
B
给A
发送ACK
与SYN
第三次握手:
A
给B
发送ACK
虽然只发了三次数据包,并且在各自的内存中维护了状态变量
但这么说总觉得太low
你看这个过程相当于双方建立连接的过程
于是你灵机一动,就叫他
面向连接
但凡事有始有终
有了连接的过程
就要考虑释放连接的过程:四次握手
A:再见,我要关闭了(FIN)
B:我知道了(ACK)
B:再见,我要关闭了(FIN)
A:我知道了(ACK)
以上阐述的,就是TCP协议的主要内容
TCP协议是面向连接的、可靠的、基于字节流的传输层通信协议
面向连接的、可靠的我们通过上文已经理解。
那如何理解基于字节流呢?
很简单,TCP在建立连接时
需要告诉对方最大报文段大小
也就是说,如果需要发送的数据很大
在TCP层是需要按照最大报文段大小来切割成一个个的TCP报文段的
切割的时候不用管原来的数据是什么意思、需要在哪里断句
只需要切割的时候标上序号
接收方再根据这个序号拼成最终想要的完整数据就行了
在TCP传输这里
就把他当作一个个的字节
也就是基于字节的含义了
1. 计算机网络概述
1.1 互联网的构成
- 网络边缘(Network
Edge):网络边缘是指直接与终端用户相连接的部分,包括用户的计算机、智能手机、平板电脑等设备,以及家庭网络、办公室网络等。网络边缘的主要功能包括:
- 终端设备:用户使用的各种设备,如计算机、手机、平板等,这些设备通过网络接口(如以太网、Wi-Fi等)连接到互联网。
- 接入网络:用于将终端设备连接到互联网的网络,如家庭宽带、移动网络、企业局域网(LAN)等。接入网络可以是有线的(如DSL、光纤)或无线的(如Wi-Fi、4G、5G)。
- 边缘路由器:位于网络边缘的路由器,负责将用户的流量发送到互联网,并将来自互联网的流量转发给用户设备。
- 终端设备:用户使用的各种设备,如计算机、手机、平板等,这些设备通过网络接口(如以太网、Wi-Fi等)连接到互联网。
- 网络核心(Network
Core):网络核心是指连接各个网络边缘并提供高速数据传输的部分。它由一组高性能的核心路由器和交换机组成,形成一个高带宽、低延迟的网络骨干。网络核心的主要功能包括:
- 高速传输:核心网络设备通常具有非常高的带宽,能够支持大规模的数据传输,确保不同网络边缘之间的通信高效且可靠。
- 路由选择:核心路由器根据预定义的路由协议,选择最佳路径将数据包从源传送到目的地。
- 数据中继:核心网络设备负责将来自不同边缘网络的数据包中继传输,通过多个中继节点确保数据能够正确到达目的地。
- 高速传输:核心网络设备通常具有非常高的带宽,能够支持大规模的数据传输,确保不同网络边缘之间的通信高效且可靠。
- 二者的差别
- 网络边缘更关注用户接入和服务质量,通常需要处理较低的带宽需求和较高的服务多样性。
- 网络核心更关注高效的数据传输和网络可靠性,通常需要处理巨大的数据流量和复杂的路由决策。
- 网络边缘更关注用户接入和服务质量,通常需要处理较低的带宽需求和较高的服务多样性。
1.2 网络分类
个域网(PAN, Personal Area Network):
- 能在便携式消费电器与通信设备之间进行短距离通信的网络
- 覆盖范围一般在10米半径以内,如蓝牙耳机等
- 能在便携式消费电器与通信设备之间进行短距离通信的网络
局域网(LAN, Local Area Network):
- 局部地区形成的区域网络,如企业网络
- 分布地形有限,可大可小,大到一栋建筑,小到办公室内的组网
- 电脑WLAN接入,打印机共享等等
- 局部地区形成的区域网络,如企业网络
城域网(MAN, Metropolitan Area Network):
- 范围覆盖一个城市的网络
广域网(WAN, Wide Area Network):
- 覆盖很大地理区域,乃至覆盖地区和国家
1.3 接入网
1.3.1 接入网的用途
- 接入网的用途是将主机连接到边缘路由器上
- 边缘路由器是端系统Host去往任何其他远程端系统的路径上的第一台路由器
1.3.2 各种异构网络通过边缘路由器接入
异构网络(Heterogeneous Networks)是指由不同类型的网络组成的整体。这些网络可能在技术标准、传输介质、网络协议、拓扑结构等方面存在差异。常见的异构网络包括:
- 有线网络:如以太网(Ethernet)、光纤网络。
- 无线网络:如Wi-Fi、蜂窝网络(4G、5G)、蓝牙。
- 局域网(LAN):企业内部或家庭内部的网络。
- 广域网(WAN):覆盖更大地理范围的网络,如互联网。
1.3.3 接入网分类
光纤到户(FTTH, Fiber to the Home):是一种将光纤直接铺设到用户家庭的接入技术。它的特点和优势包括:
- 高速宽带:光纤能够提供极高的带宽,支持数百兆比特甚至数千兆比特的传输速率。
- 稳定性和可靠性:光纤不受电磁干扰,数据传输稳定,可靠性高。
- 长距离传输:光纤信号可以在没有中继的情况下传输更远的距离,适合覆盖广泛的地理区域。
- 未来发展:随着技术进步,光纤网络能够支持更高的速率和更先进的服务(如4K/8K视频、虚拟现实等)。
- 高速宽带:光纤能够提供极高的带宽,支持数百兆比特甚至数千兆比特的传输速率。
数字用户线(Digital Subscriber Line, DSL):利用现有的电话线提供宽带接入服务。
同轴电缆:广泛用于有线电视(CATV)网络,也可以用于宽带接入。
无线接入(Wireless Access):包括多种技术,如Wi-Fi、蜂窝网络(4G、5G)和固定无线接入(FWA)。其特点如下:
- 灵活性和便捷性:无线接入无需铺设有线,部署灵活,适合用户移动和临时需求。
- 覆盖范围:Wi-Fi适合家庭和小范围覆盖,蜂窝网络适合广域覆盖(城市、乡村),FWA适合偏远地区固定宽带接入。
- 速率:Wi-Fi和蜂窝网络速率不断提高,5G网络可以提供极高的传输速率,适合高清视频、AR/VR等高带宽应用。
- 易受干扰:无线信号易受干扰,传输质量受环境和距离影响较大。
- 灵活性和便捷性:无线接入无需铺设有线,部署灵活,适合用户移动和临时需求。
企业和家庭网络:企业和家庭网络是指企业内部或家庭内部的局域网(LAN),通过各种接入技术连接到互联网。其特点包括:
- 局域网(LAN):企业和家庭内部通常通过有线(以太网)或无线(Wi-Fi)组成局域网,连接各种终端设备(电脑、手机、打印机等)。
- 网络设备:使用交换机、路由器和无线接入点(AP)等设备构建内部网络,并通过边缘路由器连接到ISP的接入网。
- 安全性:企业网络通常需要更高的安全性,部署防火墙、VPN等安全措施,家庭网络则注重便捷性和易用性。
- 管理和维护:企业网络通常由专业的IT人员管理和维护,家庭网络则由用户自行管理或由ISP提供技术支持。
- 局域网(LAN):企业和家庭内部通常通过有线(以太网)或无线(Wi-Fi)组成局域网,连接各种终端设备(电脑、手机、打印机等)。
1.4 网络核心的两大功能
- 路由:确定数据分组从源到目标所使用的路径(全局操作)
- 转发:路由器或交换机将接收到的数据分组转发出去(即移动到该设备的某个输出接口)(本地操作)
1.5 网络分层
1.5.1 OSI 7层模型
OSI七层模型(Open Systems Interconnection
Model)是国际标准化组织(ISO)提出的网络通信参考模型。它将网络通信的功能分成七个层次,从低到高分别是:物理层
、数据链路层
、网络层
、传输层
、会话层
、表示层
和应用层
。每一层都有特定的功能和协议
- 物理层(Physical Layer):
- 功能:
- 物理层负责网络设备之间的实际传输介质的连接和数据传输。
- 涉及到电缆、光纤、无线电波等传输介质,以及电压、电流、信号频率等传输方式。
- 协议和设备:
- 常见的协议和标准包括:以太网(Ethernet)、USB、光纤(Fiber Optics)。
- 相关设备包括:集线器(Hub)、网卡(NIC)、传输介质(电缆、光纤)。
- 功能:
- 数据链路层(Data Link Layer):
- 功能:
- 数据链路层负责节点间的可靠传输,包括错误检测、纠正和流量控制。
- 它将数据封装成帧(Frame),在同一网络段内进行传输。
- 协议和设备:
- 常见的协议有:以太网(Ethernet)、点对点协议(PPP)、帧中继(Frame Relay)。
- 相关设备包括:交换机(Switch)、网桥(Bridge)。
- 功能:
- 网络层(Network Layer):
- 功能:
- 网络层负责数据包(Packet)在不同网络之间的路由选择和转发。
- 它处理逻辑地址(如IP地址),并确定数据包的传输路径。
- 协议和设备:
- 常见的协议有:互联网协议(IP)、互联网控制报文协议(ICMP)、路由协议(如OSPF、BGP)。
- 相关设备包括:路由器(Router)。
- 功能:
- 传输层(Transport Layer):
- 功能:
- 传输层负责端到端的通信,确保数据可靠传输。
- 它提供数据分段、传输控制、错误校验和恢复功能。
- 协议和设备:
- 常见的协议有:传输控制协议(TCP)、用户数据报协议(UDP)。
- 传输层的功能主要由操作系统的网络栈实现。
- 功能:
- 会话层(Session Layer):
- 功能:
- 会话层负责建立、管理和终止应用程序之间的会话。
- 它处理会话控制、同步和对话管理。
- 协议和设备:
- 常见的协议有:远程过程调用(RPC)、会话初始协议(SIP)。
- 功能:
- 表示层(Presentation Layer):
- 功能:
- 表示层负责数据格式的转换、加密和解密、数据压缩等。
- 它确保发送方和接收方以一致的方式解释数据。
- 协议和设备:
- 常见的标准和协议有:数据表示标准(如ASCII、JPEG、MPEG)、加密协议(如SSL/TLS)。
- 功能:
- 应用层(Application Layer):
- 功能:
- 应用层是OSI模型的最高层,直接为用户提供各种网络服务。
- 它负责处理应用程序的网络功能,如文件传输、电子邮件、远程登录等。
- 协议和设备:
- 常见的协议有:超文本传输协议(HTTP)、文件传输协议(FTP)、简单邮件传输协议(SMTP)、域名系统(DNS)。
- 应用程序软件和服务运行在应用层上。
- 功能:
- 想象你要寄送一个包裹:
- 物理层是你用来运输包裹的卡车、火车或飞机。
- 数据链路层是你在包裹上写详细地址和贴上邮票,确保包裹在一个城市内递送正确。
- 网络层是邮局选择最佳路线,把包裹从一个城市送到另一个城市。
- 传输层是快递公司确保包裹从你家门口送到收件人家门口,过程中不会丢失或损坏。
- 会话层是确保在电话通话中,你和对方的声音能顺利传输,即使中断也能恢复。
- 表示层是把包裹的内容翻译成收件人能理解的语言,或者加密包裹以保护隐私。
- 应用层是包裹里的实际内容,如信件、礼物,或你在网上购买的商品。
1.5.2 TCP / IP 4层模型
TCP/IP四层模型是互联网的核心协议套件模型,它将网络通信功能分为四个层次,从低到高分别是:网络接口层
、互联网层
、传输层
和应用层
。每一层都有特定的功能和协议。
- 网络接口层(Network Interface Layer):
- 功能:
- 负责管理设备和物理传输介质之间的通信。
- 包括数据链路层和物理层的功能,处理实际的硬件和网络介质。
- 协议和设备:
- 常见的协议有:以太网(Ethernet)、Wi-Fi、点对点协议(PPP)。
- 相关设备包括:网卡(NIC)、交换机(Switch)、集线器(Hub)。
- 功能:
- 互联网层(Internet Layer):
- 功能;
- 负责数据包的路由和转发,确保数据在不同网络之间的传输。
- 提供逻辑寻址和路由选择,处理数据包的封装和解封装。
- 协议和设备:
- 常见的协议有:互联网协议(IP,包括IPv4和IPv6)、互联网控制报文协议(ICMP)、地址解析协议(ARP)。
- 相关设备包括:路由器(Router)。
- 功能;
- 传输层(Transport Layer):
- 功能:
- 提供端到端的通信服务,确保数据可靠传输。
- 负责数据分段、传输控制、错误校验和恢复。
- 协议和设备:
- 常见的协议有:传输控制协议(TCP)、用户数据报协议(UDP)。
- TCP提供可靠的、面向连接的服务,确保数据顺序无误地传输。
- UDP提供不可靠的、无连接的服务,适用于需要快速传输但不需要保证可靠性的应用。
- 功能:
- 应用层(Application Layer):
- 功能:
- 直接为用户提供各种网络服务
- 处理应用程序的网络功能,如文件传输、电子邮件、远程登录等
- 协议和设备:
- 常见的协议有:超文本传输协议(HTTP)、文件传输协议(FTP)、简单邮件传输协议(SMTP)、域名系统(DNS)、简单网络管理协议(SNMP)、动态主机配置协议(DHCP)。
- 应用程序软件和服务运行在应用层上。
- 功能:
1.5.3 两种模型比较
- OSI模型的不足:
- 从未真正被实现
- TCP/IP已成为事实标准,OSI缺少厂家支持
- 技术实现糟糕
- OSI分层欠缺技术考虑:会话层、表示层很少内容;数据链路层、网络层内容繁杂。模型和协议过于复杂
- 分层间功能重复:差错控制、流量控制等在不同层反复出现
- 非技术因素
- TCP/IP实现为UNIX一部分,免费
- OSI被认为是政府和机构的强加标准
- 从未真正被实现
- TCP/IP模型的不足
- 核心概念未能实现
- 未明确区分服务、接口和协议等核心概念
- 不具备通用性
- 不适于描述TCP/IP之外的其他协议栈
- 混用接口与分层的设计
- 链路层和物理层一起被定义为网络接口层,而非真正意义上的分层
- 模型欠缺完整性
- 未包含物理层与数据链路层
- 物理层与数据链路层是至关重要的部分
- 核心概念未能实现
注意:教材是以下分层来讲述的:物理层
、数据链路层
、网络层
、运输层
、应用层
2、物理层
- 物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。
举个例子,物理层就像一个快递员,负责把你要寄的东西送到目的地。他的主要任务是确保“东西”(数据比特流)能在不同的路上(传输介质)顺利送达,而不管这条路是什么
- 物理层的作用是要尽可能地屏蔽掉不同传输媒体和通信手段的差异。
就像快递员不管你家门口是柏油马路、泥泞小路还是一条河,他只需知道如何开车、骑车或划船,把包裹安全送到目的地。
- 如果路是柏油马路(比如双绞线),他可能会开车。
- 如果路是河(比如光纤),他可能会划船。
- 如果是无线电波,那就好比快递员通过无人机送快递。
- 用于物理层的协议也常称为物理层规程 (procedure)。
2.1 物理介绍
2.1.1 引导型介绍
信号在固体介质中传播,例如铜、光纤、同轴电缆
- 光纤
- 高速运行:高速点对点运输(10 - 100 Gbps)
- 低错误率:中继器相距很远,对电磁噪声免疫
- 双绞线
- 两根绝缘铜线互相缠绕为一对
- 电话线为1对双绞线,网线为4对双绞线,广泛用于计算机网络(以太网)双向传输
- 第5类:100 Mbps~1 Gbps;第6类:10Gbps
- 传输距离一般为为100米
- 同轴电缆
- 两根同心铜导线,双向传输
- 电缆上的多个频率通道
- 带宽可达100Mbps
- 传输距离一般为200米
2.1.2 非引导型介质
信号自由传播,例如无线电(陆地无线电、卫星无线电信道)
- 无线电
- 电磁频谱中各种“波段”携带的信号
- 没有物理“电线”
- 不依赖介质的广播
- 半双工(发送方到接收方)
- 无线链路类型:
- 无线局域网(WiFi) 10-100 Mbps;10米
- 广域(如3/4/5G蜂窝) 在~10公里范围内
- 蓝牙:短距离,有限速率
- 地面微波:点对点;45 Mbps
- 同步卫星:36000km高空, 280毫秒的往返时延
- 低轨卫星:近地,但围绕地球高速运动,需要大量卫星才能覆盖地球
2.2 数据交换方式
2.2.1 分组交换
分组交换是一种将数据分割成小块(称为分组或包)的传输方式。每个分组包含数据和控制信息(如源地址和目的地址),独立地在网络中传输,最终在目的地重新组装成完整的信息。
主要缺点:
不具有实时性
存在延迟
会造成通信阻塞
存在无用的重复数据
会出现丢包的情况
优点:
- 设计简单
- 资源利用率很高
2.2.2 电路交换
电路交换是一种在通信前预先建立固定路径(电路)的传输方式。通信双方在通话前通过交换机建立一个专用的通信电路,数据在该电路上传输,通信结束后释放电路。
电路连接的三个阶段
- 建立连接
- 数据传输
- 释放连接
优点
- 传输速度快、高效
- 实时
缺点
- 资源利用率低
- 新建连接需要占据一定的时间,甚至比通话的时间还长
电路交换的多路复用
频分多路复用(FDM, Frequency Division Multiplexing):将可用带宽划分为多个互不重叠的频段,每个频段传输一路信号。每个信号在不同的频率上独立传输,避免互相干扰。
特点:
- 并行传输:各信号在不同频率上同时传输,实现并行通信。
- 恒定带宽:每个信号占用固定的频率带宽,不受其他信号的影响。
- 硬件复杂度:需要频率分配和滤波器来确保信号不互相干扰,硬件设计较为复杂。
应用:
- 广播电视:多个电视台在不同频率上广播信号。
- 无线通信:如传统模拟蜂窝网络(AMPS)。
- 有线通信:如光纤通信中的波分复用(WDM)。
示例:假设有三个信号要通过同一介质传输,频分多路复用会将可用频谱划分为三段,每个信号占用一个频段,例如:
- 信号A占用100-200 MHz频段
- 信号B占用200-300 MHz频段
- 信号C占用300-400 MHz频段
通过这种方式,三路信号可以同时在各自的频段上传输而互不干扰
时分多路复用(Time Division Multiplexing, TDM):将时间划分为多个时隙,每个时隙传输一路信号。在一个周期内,每个信号轮流占用时隙进行传输。
特点:
- 顺序传输:各信号在不同时间段轮流传输,实现顺序通信。
- 动态带宽:每个信号的带宽利用率可以根据需要进行动态调整。
- 时间同步:需要严格的时间同步机制,确保各信号在正确的时隙传输。
应用:
- 数字电话网络:如Plesiochronous Digital Hierarchy(PDH)和Synchronous Digital Hierarchy(SDH)。
- 移动通信:如GSM(Global System for Mobile Communications)。
示例:假设有三个信号要通过同一介质传输,时分多路复用会将传输时间划分为三个时隙,每个信号在一个时隙内传输。例如:
- 在第一个时隙(T1)传输信号A
- 在第二个时隙(T2)传输信号B
- 在第三个时隙(T3)传输信号C
通过这种方式,三路信号在不同时间轮流使用同一传输介质
2.2.3 分组交换和电路交换对比
特点 | 分组交换 | 电路交换 |
---|---|---|
建立连接 | 不需要预先建立固定路径 | 需要预先建立通信电路 |
资源利用率 | 高效,资源共享 | 低效,资源独占 |
传输延迟 | 可能变化,不稳定 | 低且稳定 |
容错率 | 高,具备路径选择灵活性 | 低,路径故障影响通信 |
应用场景 | 互联网数据传输,局域网 | 传统电话网络,实时通信 |
宽带利用 | 动态调整,根据需求变化 | 固定宽带,占用整个通话过程 |
适用场景 | 数据传输和互联网应用 | 需要低延迟和稳定性的实时通信应用,如传统的电话通话 |
2.3 信道复用
信道复用(Channel Multiplexing)是指在同一传输介质上同时传输多个信号的技术。通过信道复用技术,可以提高传输介质的利用效率,实现多个信号的同时传输。
2.3.1 频分多路复用(Frequency Division Multiplexing, FDM)
工作原理
将可用带宽划分为多个互不重叠的频段,每个频段传输一路信号。
每个信号在不同的频率上独立传输,避免互相干扰。
特点
并行传输:各信号在不同频率上同时传输,实现并行通信。
恒定带宽:每个信号占用固定的频率带宽,不受其他信号的影响。
硬件复杂度:需要频率分配和滤波器来确保信号不互相干扰,硬件设计较为复杂。
应用
广播电视
无线通信
有线通信中的波分复用(WDM)
2.3.2 时分多路复用(Time Division Multiplexing, TDM)
- 工作原理
- 将时间划分为多个时隙,每个时隙传输一路信号。
- 在一个周期内,每个信号轮流占用时隙进行传输。
- 特点
- 顺序传输:各信号在不同时间段轮流传输,实现顺序通信。
- 动态带宽:每个信号的带宽利用率可以根据需要进行动态调整。
- 时间同步:需要严格的时间同步机制,确保各信号在正确的时隙传输。
- 应用
- 数字电话网络
- 移动通信(如GSM)
2.3.3 码分多路复用(Code Division Multiplexing, CDM)
工作原理
- 为每个信号分配一个独特的编码序列,所有信号在同一频率范围内同时传输。
- 接收端使用相应的编码序列解码所需的信号,其它编码序列的信号被视为噪声。
特点
- 高效利用频谱:所有信号共享同一频谱,编码序列确保信号独立传输。
- 抗干扰能力强:编码序列提供抗干扰能力,特别适合多径传播环境。
- 复杂度高:编码和解码过程复杂,需要强大的处理能力。
应用
- 蜂窝移动通信(如CDMA)
- 卫星通信、
具体例子:假设有四个用户(A、B、C、D)在同一蜂窝网络中通信。每个用户被分配一个独特的编码序列,用于区分不同的信号。这里使用伪随机序列作为编码序列:
- 用户A的编码序列:1010
- 用户B的编码序列:1100
- 用户C的编码序列:1001
- 用户D的编码序列:0110
每个用户的信号通过与其编码序列相乘来进行编码,然后所有编码信号叠加在一起在同一频谱上进行传输。
- 编码过程:
- 用户A发送比特1,其编码信号为:1010
- 用户B发送比特0,其编码信号为:0000
2.3.4 波分多路复用(Wavelength Division Multiplexing, WDM)
- 工作原理
- 将光纤的可用光谱划分为多个波长,每个波长传输一路信号。
- 各个波长的信号在同一光纤上独立传输,互不干扰。
- 特点
- 高带宽:利用光纤的巨大带宽,提供极高的数据传输速率。
- 并行传输:多个波长的信号在同一光纤上同时传输。
- 硬件复杂度:需要精确的波长分配和滤波设备,硬件设计复杂。
- 应用
- 长距离光纤通信
- 数据中心互连
3、 数据链路层
3.1 功能(要解决的问题)
成帧(Framing)
将比特流划分成帧的主要目的是为了检测和纠正物理层在比特传输中可能出现的错误,数据链路层功能需借助帧的各个域来实现
差错控制(Error Control)
处理传输中出现的差错,如位错误、丢失等
流量控制(Flow Control)
确保发送方的发送速率,不大于接收方的处理速率,避免接收缓冲区溢出
3.2 数据链路层提供的服务
- 无确认、无连接服务(Unacknowledged connections)
- 接收方不对收到的帧进行确认
- 适用场景:误码率低的可靠信道;实时通信
- 网络实例:以太网
- 有确认、无连接服务(Acknowledged connections)
- 每一帧都得到单独的确认
- 适用场景:不可靠的信道(无线信道)
- 网络实例:802.11
- 有确认、有连接服务(Acknowleddge
connection-oriented)
- 适用场景:长延迟的不可靠信道
3.3 成帧(Framing)
3.3.1 什么是成帧和帧
成帧(Framing)旨在将网络层传递的数据包(通常称为网络层数据报)封装为数据链路层课传输的单位,称为帧(Frame)。每个帧包含了实际的数据以及用于传输控制和错误检测的附加信息
帧的结构:
- 帧头(Header):包含控制信息,如源地址、目的地址、协议标识、帧序号等。这些信息帮助接收方识别帧并正确处理2.
- 数据字段(Payload/Data):包含要传输的实际数据,即从网络层传递下来的数据包
- 帧尾(Trailer):通常包括错误检测信息,如循环冗余校验(CRC),用于检测帧在传输过程中是否发生错误
3.3.1 要解决的关键问题:如何表示一个帧的开始?
- 接收方必须能从物理层接收的比特流中明确区分出一帧的开始和结束,这个问题被称为帧同步或帧定界
- 关键:选择何种定界符?定界符出现在数据部分如何处理?
3.3.2 成帧(framing)的方式
带比特填充的定界符法
定界符:两个0比特之间,连续6个1比特,即
01111110
,0x7E发送方检查有效载荷:若在有效载荷中出现连续5个1比特,则直接插入1个0比特
接收方的处理:
- 若出现连续5个1比特
- 若下一个比特为0,则为有效载荷,直接丢弃0比特
- 若下一个比特为1,则连同后一比特的0,构成定界符,一帧结束
物理层编码违例
物理层编码违例(Physical Layer Coding Violation)是物理层的一种信号编码技术,通常用于在数据传输过程中标识特定的控制信息,如帧的开始和结束、错误检测或其他特殊信号
核心思想:选择的定界符不会在数据部分出现
4B/5B编码方案:
- 4比特数据映射成5比特编码,剩余的一半码字(16个码字)未使用,可以用作帧界定符。
- 传统的NRZ(不归零)编码存在这样的问题:如果数据中有长串的0或1,信号电平会长时间保持不变,导致时钟同步困难
- 4B/5B编码通过将4位数据映射为5位编码,确保在传输的数据流中不会出现长时间没有电平变化的情况,从而提高了信号的可靠性和传输质量
- 具体示例
4位数据 5位编码 0000 11110 0001 01001 0010 10100 0011 10101 0100 01010 0101 01011 0110 01110 0111 01111 1000 10010 1001 10011 1010 10110 1011 10111 1100 11010 1101 11011 1110 11100 1111 11101 示例说明
- 输入数据:假设我妈需要传输数据序列
0101 1100 0011
- 编码过程:
0101
-->01011
1100
-->11010
0011
-->10101
- 传输信号:编码后的数据序列为
01011 11010 10101
- 解码过程:
- 接收
01011
,查表还原为0101
- 接收
11010
,查表还原为1100
- 接收
10101
,查表还原为0011
- 接收
- 最终数据:成功还原为原始数据序列
0101 1100 0011
前导码:
- 前导码(Preamble)是网络通信中用于信号同步的一个特殊序列,通常位于数据帧的最前端
- 例如:在以太网协议(如IEEE
802.3)中,前导码通常由7个字节组成,每个字节为
10101010
(十六进制为0xAA
),紧接着是一个帧起始定界符(Start Frame Delimiter)
曼切斯特编码/差分曼切斯特编码:
- 正常的信号在周期中间有跳变,持续的高电平(或低电平)为违例码,可以用作定界符
- 例如:802.5令牌环网