计算机网络概观

计算机与计算机之间的通信需要遵循不同层次的协议,来实现计算机的通信。本文是我整理书上和网络上关于计算机网络的知识,通过本文简介的 5 层协议可以对计算网络有个整体的把握。

计算机网络是一些互相连接的、 自治的计算机的集合。为了减少网络架构的复杂程度,我们把网络分成 5 层。

Internet-protocol-stack

分层的好处有:

  1. 各层之间是独立的
  2. 灵活性好
  3. 结构上可分割开
  4. 易于实现和维护
  5. 能促进标准化工作

物理层

物理层关注在连接计算机的传输媒体上传输数据比特流,这些媒介可以传送物理信号,比如亮度、电压或者振幅。我们只需要找出对应关系,比如高电压对应 1 ,低电压对应 0 ,从而保证发送方的比特流信息能够接收方翻译成 0/1 序列即可。

链路层

接收到 0/1 序列后,还不能解读出信息。所以需要规定哪些 0/1 序列组成帧来翻译。所以链路层确定了 0/1 序列的分组规则。识别出帧后,每一帧中的信息包括发送者 (Source, SRC)、接受者 (Destination, DST)、数据类型 (Type)、探测错误的校验序列 (Frame Check Sequence) 等等信息。当然最重要的是需要传输的数据。

以太网 (Ethernet) 和 WiFi 是现在最常见的链路层协议。这样的话局域中的两台计算机就可以进行通信了,链路层就像一个小区的邮差,每一帧就是信封,将信息装好,并且在信封上写好了收件人和发件人,也就是标记好了 MAC 地址。

网络层

如果只有链路层,那么寻找一个收件人就要在全世界中寻找,显然不现实嘛,哪有一个小区的邮差认识所有收件人。于是需要网络层协议来判断收件人和发件人是不是在同一个子网络,也就是两人是不是在同一个小区。如果是一个子网络就用广播方式发送,否则就需要路由方式来发送。一个路由 (router) 有多个网卡 (NIC,Network Interface Controller) 。每个网卡可以接入多个网络,网络地址协议可以帮助我们判断收件人在哪个子网络中,帧经过路由时,路由读取网络地址,帮我们找到子网络,然后我们在经过 MAC 地址发送到收件人手上。这里的网络地址协议就是 IP 协议,它相当于在两个社区都有分局的邮局,邮局把 A 分局的邮件发到 B 分局,然后再经过 B 邮局的邮差来送给收件人。

由于链路层协议开发在先,IP 协议只能把帧的信息 (payload) 上动手脚了。所以发件人得把收件人信息写在信的开头而不是信封上了,邮局收到信,把信拆开,看到收件人的信息,才可以知道收件人的子网络,然后再由路由把信给收件人所在得分局。

传输层

至此,任意两台计算机已经完成通信了。但是一台机器上可能有很多程序,比如你一边浏览网页,一边在线聊天。所以还需要判断接收得数据给哪个程序使用,依据就是端口 (port) 。端口是 0 到 65535 之间的一个整数,0 到 1023 是被系统占用,需要 root 权限使用。比如你聊天,你的机器会随机选择一个端口连接到远程机器的固定端口。网络层已经可以把信送到某个房子里,但是一个房子住着几口人,还需要收件人信息(端口)来确定,网络地址协议完成了主机与主机的通信,传输层完成了端口与端口的通信。

UDP 和 TCP 是两种不同的传输协议,UDP协议的优点是比较简单,容易实现,但是缺点是可靠性较差,一旦数据包发出,无法知道对方是否收到。TCP协议能够确保数据不会遗失。它的缺点是过程复杂、实现困难、消耗较多的资源。

应用层

至此,任意两台机器上的程序已经可以完成通信了,也就是任意两个人都可以进行信件来往了。不同的程序需要不同的数据格式,比如用于 Web 浏览的 HTTP 协议,用于传输文件的 FTP 协议等等。其实可以想想成每个人有自己的职业,在他们职业中需要按照一定规范来通信,比如外交需要写抬头,程序员需要写注释。

总结

网络层是实现互联网的最重要的一层。正是在网络层面上,各个局域网根据IP协议相互连接,最终构成覆盖全球的 Internet 。

summary

最终链路层传输的数据结构如下所示。

signal

相关文章