计算机网络是个非常复杂的系统\color{red}计算机网络是个非常复杂的系统计算机网络是个非常复杂的系统。早在最初的ARPANET设计时就提出了分层的设计理念。
"分层\color{red}分层分层"可将庞大而复杂的问题,转化为若干较小的局部问题,而这些较小的局部问题就比较易于研究和处理。
下面,我们按照由简单到复杂的顺序,来看看实现计算机网络要面临哪些主要的问题,以及如何将这些问题划分到相应的层次,层层处理。
1.采用怎样的传输媒体(介质)
2. 采用怎样的物理接口
例如,RJ45以太网接口
3. 使用怎样的信号表示比特0和1
例如,这样的方波信号。低电平表示0
,高电平表示1
说明
使用的计算机网络,一般都有多台主机构成。
例如:主机A
,B
,C
,D
,E
通过总线互连,构成了一个总线型网络(早已淘汰
)
假设已经解决的物理层的问题(主机间可以发送信号来传输比特0
或1
了)
若主机A
要给主机C
发送数据。但是,表示数据的信号会通过总线传播到总线上的每一个主机。
那么主机C
如何知道该数据是发送给自己的,自己要接受?
而主机B,D,E又如何知道该数据并不是发送给自己的,自己应该如何拒绝呢?
如何标识网络中的各主机(主机编制问题
,例如MAC
地址)
如何从信号所表示的一连串比特流中区分出地址和数据
分组的封装格式问题
如何协调各主机争用总线
例如,某个时刻总线是空闲的,也就是没有主机使用总线来发送数据。
片刻之后,主机B
和D
同时向总线发送数据,这必然会造成信号碰撞
现在常用的是使用以太网交换机
将多台主机互连形成的交换式以太网
我们发现,只要解决了物理层和数据链路层各自所面临的问题,我们就可以实现分组在一个网络上传输了。
但是
因特网
是由非常多的网络和路由器互连
起来的例如:一个由3个路由器。4个网络互连起来的小型互连网
。(因特网中的很小一部分)
很显然。我们面临着如何标识各网络以及网络中各主机的问题。
共同编址
的问题,例如IP
地址) N1
中各设备的IP
地址。 IP
地址的前三个十进制数用来表示网络,第四个十进制数用来表示主机(C类IP
地址)N1
的网络号为192,168,1IP
地址的前三个数应该都是192,168,1(因为它们都在网络N1
上)。N2
中各设备的IP
地址路由器如何转发分组,如何进行路由选择
源主机与目的主机之间的传输路径往往不止一条
分组从源主机到目地主机可走不同的路径地址
若我们解决了物理层、数据链路层及网络层各自的问题,则可以实现分组网络间传输的间题。
但是
例如:假设这台主机中运行着两个与网络通信相关的应用进程(QQ进程,游览器进程)
这台服务器运行着与网络通信相关的服务器进程。
分组
应应该交给览器进程处理呢。还是应该交给回Q进程处理?误码
。若以上都解决了,则可以实现进程之间基于网络的通信
在此基础上,只需制定各种应用层协议
HTTP
协议SMTP
协议FTP
协议我们将实现讨算机网络就需要解泱的各种主要问题,分别归到了物理层、数据链路层、网络层运输层和应用层。
进而构成了五层协议体系的原理体系结构。
作为一名程序员,将这些问题将它们划分到不同的模块中,逐模块编程实现