博主:爱码叔
个人博客站点: icodebook
公众号:漫话软件设计
专注于软件设计与架构、技术管理。擅长用通俗易懂的语言讲解技术。对技术管理工作有自己的一定见解。文章会第一时间首发在个站上,欢迎大家关注访问!
本文个站链接

为什么计算机网络有这么多层

初接触计算机网络,不理解为什么有这么多层。发个信息不是很简单的事情吗?

就像寄信,扔到邮筒里,邮递员投递到收信人邮箱。这个过程很简单啊,为什么计算机发个信息这么麻烦?

寄信过程看似简单,其实和计算机发送信息的底层原理是一样的。计算机网络传输要做的事情,现实中寄信也一样不少。

下面我们就通过寄信这个例子来理解计算机网络。

一、分层和协议

计算机网络有5层、7层模型。模型中的每层又有不同种类的协议。在进入例子前,我们先看看什么是分层和协议。

分层

分层是为了在逻辑上划分职责,确保每一层职责单一,这对于开发同学很容易理解。反过来我们也可以从职责找对应的层。一会我们尝试在寄信例子中找找计算机网络中对应的层。

协议

我们再看看什么是协议。

词典解释:经过谈判、协商而制定的共同承认、共同遵守的文件。

简单说就是双方达成一致,需要一同遵守的规则。

通信协议可以理解为通信双方达成一致的规则,以确保一方能把信息发出,另一方能接收并且读懂。

特别注意这里的信息并不单单指信的内容。信息也指信封上的地址、邮编等内容。

二、理解计算机网络五层结构

2.1 书信格式 — 应用层

书信的内容是最重要的信息。书信内容基于约定格式书写,书信格式是信件内容的协议。现实中书信有标准格式,如下图:

书信如果没有按照上面格式书写,其实并不妨碍阅读。但是计算机只能机械的根据约定格式解析信息,所以格式对于计算机传输信息非常重要。

此处对应网络的应用层协议。确保你发给我的信息是约定好的格式,以便我能解析并读懂。

应用层常见协议

  1. HTTP
  2. SMTP及POP

2.2 收信人地址、邮编 — 网络层

寄信人需要在信封上填写收信人地址和邮编信息。邮递员根据这些信息找到收件人信箱,完成投递。

这里的协议是地址书写规则以及邮编的规范。不按照约定写地址或者胡乱写邮编,信件是要被退回的。

此处对应网络的网络层协议。确保信息被发送到指定的IP的电脑。每一台电脑就好比上图中有唯一编号的邮箱。

网络层常见协议

  1. IP

2.3 寄信需要中转站多次中转运送 — 数据链路层

信件并不是一次运输就能发送到收件人手中。邮递员取信后进行分拣,根据规则发往某个邮政网点。信件还会继续在邮政网点中根据规则流动。运送到离收信地址最近的网点后,邮递员投递到收件人邮箱。

这里的协议是信件在网点中流动与接收的规则。

此处对应网络的数据链路层协议。除了上面例子所说的让信息在网络节点中流动,还定义了如下规则:

  1. 如何将二进制信息封装为帧进行传输。
  2. 如何进行错误检查,确保传输准确性。

数据链路层常见协议

  1. ARP
  2. NAT
  3. DNS
  4. 以太网

2.4 要送信,先修路 — 物理层

上面说了这么多,其实玩的都是虚的, 拔了网线啥也不是…

如果没有通往收信人的路,前面的工作都是瞎忙。最底层支撑送信的是道路。道路将一个个邮政网点以及寄、收信人地址串连起来。

此处对应网络的物理层。也就是通信的媒介,比如网线。这一层没有协议,但是物理层要具备传输信号的物理特性。

2.5 挂号信 — 传输层

前文已经讨论过下面这几层:

  1. 应用层
  2. 网络层
  3. 数据链路层
  4. 物理层

熟悉计算机网络的同学一眼就能看出少了传输层。耳熟能详的TCP和UDP协议都服务于这一层。其实,寄信这个例子也存在对应场景。我们来看看挂号信。

挂号信和平信最大的区别是需要收信人签收。也就是说挂号信保证送达。另外挂号信需要去邮局发信,不能随便丢到邮筒里。可以看到挂号信的邮寄和签收过程都和平信存在差异。


挂号信保证送达?!告诉我,你想到什么了?是不是TCP协议?

没错,这个例子对应的就是传输层。挂号信需要去邮局发信,平信通过邮箱发送,这也对应了不同传输层协议使用的端口不一样。

计算机网络中,传输层协议定义了信息传输的约定。拿TCP协议举例。主要做了下面几件事情。

发送方

  1. 分割数据
  2. 加上TCP包头后按顺序发送
  3. 接收接收方的确认信息,未确认会再次发送

接收方

  1. 去掉包头后,组装数据
  2. 发送确认信息给发送方
  3. 处理重复数据包

其实就是拆信息、发送、组装信息的过程。

为了确保送达,加入了确认机制。
为了保证传输正确,加入了验证机制。
此外还有开始、结束的握手、挥手机制。、

传输层常见协议

  1. TCP
  2. UDP

总结

通过寄信,我们找到了计算机网络五层架构对应的真实例子。

  1. 应用层 (书信格式言)
  2. 传输层 (挂号信、平信的区别)
  3. 网络层 (收信人地址、邮编)
  4. 数据链路层 (邮局网点间运输)
  5. 物理层 (公路)

记住寄信的例子,就再也不用担心记不住计算机网络结构了!计算机领域优秀的设计都来源于现实世界,计算机网络也是如此。