博主:爱码叔
个人博客站点: icodebook
公众号:漫话软件设计
专注于软件设计与架构、技术管理。擅长用通俗易懂的语言讲解技术。对技术管理工作有自己的一定见解。文章会第一时间首发在个站上,欢迎大家关注访问!
本文个站链接
为什么计算机网络有这么多层
初接触计算机网络,不理解为什么有这么多层。发个信息不是很简单的事情吗?
就像寄信,扔到邮筒里,邮递员投递到收信人邮箱。这个过程很简单啊,为什么计算机发个信息这么麻烦?
寄信过程看似简单,其实和计算机发送信息的底层原理是一样的。计算机网络传输要做的事情,现实中寄信也一样不少。
下面我们就通过寄信这个例子来理解计算机网络。
一、分层和协议
计算机网络有5层、7层模型。模型中的每层又有不同种类的协议。在进入例子前,我们先看看什么是分层和协议。
分层
分层是为了在逻辑上划分职责,确保每一层职责单一,这对于开发同学很容易理解。反过来我们也可以从职责找对应的层。一会我们尝试在寄信例子中找找计算机网络中对应的层。
协议
我们再看看什么是协议。
词典解释:经过谈判、协商而制定的共同承认、共同遵守的文件。
简单说就是双方达成一致,需要一同遵守的规则。
通信协议可以理解为通信双方达成一致的规则,以确保一方能把信息发出,另一方能接收并且读懂。
特别注意这里的信息并不单单指信的内容。信息也指信封上的地址、邮编等内容。
二、理解计算机网络五层结构
2.1 书信格式 — 应用层
书信的内容是最重要的信息。书信内容基于约定格式书写,书信格式是信件内容的协议。现实中书信有标准格式,如下图:
书信如果没有按照上面格式书写,其实并不妨碍阅读。但是计算机只能机械的根据约定格式解析信息,所以格式对于计算机传输信息非常重要。
此处对应网络的应用层协议。确保你发给我的信息是约定好的格式,以便我能解析并读懂。
应用层常见协议
- HTTP
- SMTP及POP
2.2 收信人地址、邮编 — 网络层
寄信人需要在信封上填写收信人地址和邮编信息。邮递员根据这些信息找到收件人信箱,完成投递。
这里的协议是地址书写规则以及邮编的规范。不按照约定写地址或者胡乱写邮编,信件是要被退回的。
此处对应网络的网络层协议。确保信息被发送到指定的IP的电脑。每一台电脑就好比上图中有唯一编号的邮箱。
网络层常见协议
- IP
2.3 寄信需要中转站多次中转运送 — 数据链路层
信件并不是一次运输就能发送到收件人手中。邮递员取信后进行分拣,根据规则发往某个邮政网点。信件还会继续在邮政网点中根据规则流动。运送到离收信地址最近的网点后,邮递员投递到收件人邮箱。
这里的协议是信件在网点中流动与接收的规则。
此处对应网络的数据链路层协议。除了上面例子所说的让信息在网络节点中流动,还定义了如下规则:
- 如何将二进制信息封装为帧进行传输。
- 如何进行错误检查,确保传输准确性。
数据链路层常见协议
- ARP
- NAT
- DNS
- 以太网
2.4 要送信,先修路 — 物理层
上面说了这么多,其实玩的都是虚的, 拔了网线啥也不是…
如果没有通往收信人的路,前面的工作都是瞎忙。最底层支撑送信的是道路。道路将一个个邮政网点以及寄、收信人地址串连起来。
此处对应网络的物理层。也就是通信的媒介,比如网线。这一层没有协议,但是物理层要具备传输信号的物理特性。
2.5 挂号信 — 传输层
前文已经讨论过下面这几层:
- 应用层
- 网络层
- 数据链路层
- 物理层
熟悉计算机网络的同学一眼就能看出少了传输层。耳熟能详的TCP和UDP协议都服务于这一层。其实,寄信这个例子也存在对应场景。我们来看看挂号信。
挂号信和平信最大的区别是需要收信人签收。也就是说挂号信保证送达。另外挂号信需要去邮局发信,不能随便丢到邮筒里。可以看到挂号信的邮寄和签收过程都和平信存在差异。
挂号信保证送达?!告诉我,你想到什么了?是不是TCP协议?
没错,这个例子对应的就是传输层。挂号信需要去邮局发信,平信通过邮箱发送,这也对应了不同传输层协议使用的端口不一样。
计算机网络中,传输层协议定义了信息传输的约定。拿TCP协议举例。主要做了下面几件事情。
发送方
- 分割数据
- 加上TCP包头后按顺序发送
- 接收接收方的确认信息,未确认会再次发送
接收方
- 去掉包头后,组装数据
- 发送确认信息给发送方
- 处理重复数据包
其实就是拆信息、发送、组装信息的过程。
为了确保送达,加入了确认机制。
为了保证传输正确,加入了验证机制。
此外还有开始、结束的握手、挥手机制。、
传输层常见协议
- TCP
- UDP
总结
通过寄信,我们找到了计算机网络五层架构对应的真实例子。
- 应用层 (书信格式言)
- 传输层 (挂号信、平信的区别)
- 网络层 (收信人地址、邮编)
- 数据链路层 (邮局网点间运输)
- 物理层 (公路)
记住寄信的例子,就再也不用担心记不住计算机网络结构了!计算机领域优秀的设计都来源于现实世界,计算机网络也是如此。