多点头发,少点代码
我是龙叔,一个分享互联网技术和心路历程的大叔
本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues。
https://github.com/midou-tech/articles
最近很忙,写技术文章还是很花费时间的。但是,就在前几天出了一篇TCP粘包问题的文章 (TCP粘包,难道说这是一个伪命题???),反映不错。本来计划计算机网络文章慢慢的出,现在看来必须的加快速度了。
龙叔在学习网络的时候有这样几个疑惑:
为什么需要抽象出五层模型出来?
难道不是直接在网线(光纤传输)中传输数据就好了么?大不了到了端点用的是WIFI传输(无线信号)。
这两个问题真的很困惑我,不知道大家有没有这样的疑惑?如果有的话,龙叔将为你答疑解惑。如果有其他的疑惑欢迎加我微信沟通 (公众号回复【龙叔】即可获得龙叔的联系方式)。
在回答问题之前我先带你领略下使用最为广泛的五层模型,分别是哪五层?各层解决了什么问题?
五层模型是哪五层?
左边是OSI的七层模型,这模型很牛逼。但是现在基本是存在教科书的啦,学习网络的同学都是知道有这个模型,实际情况使用很少的。
右边是TCP/IP五层分层模型。分别是物理层(硬件)、数据链路层(网卡层)、网络层(互联网层)、传输层、应用层。在日常工作中接触最多的是上两层,偶尔会去触碰网络层。数据链路层和物理层不是我们工作范围。当然如果是一些专门的网络安全部门,网管(不是网吧的网管)等岗位,下面几层就是非常熟悉的。
五层模型还是很清楚明了的,每层用到的重要协议都表示在图中,还表示了操作系统的内核工作范围和用户工作范围。
各层解决了什么问题?
应用层:
应用层是网络体系架构中的最高层。这意味着什么?想想就知道,最高层就是要和人交互的层次嘛。
应用层是计算机网络与用户交互的接口或者界面,直接向用户提供服务。
提供哪些服务呢?
这个...,就非常多了,比如Web服务、E-mail服务、DNS服务、DHCP服务、FTP服务等等。
所以很明了,应用层解决的问题就是如何为用户提供服务,以及提供高效、可靠、满意的服务。如何解决这些问题也就是我们这些攻城狮存在的必要了,根据不同的业务场景用不同的方法解决这些问题。例如使用多线程、协程,高并发的web框架,使用epoll处理模式,分布式处理等等技术来解决提供高效、可靠、满意的服务。
总结下,应用层是为用户提供服务接口或者界面,同时要解决服务的高效、可靠、满意。
传输层
负责端到端的通信,是面向网络通信的低三层和面向信息处理的高三层之间的中间一层,起到桥梁作用。很明显了,传输层解决的问题就是端到端的传输问题。
看到这句话肯定很多人有疑问,先别说,继续看(我知道有人会说,网络层不是已经把数据转发到对应的主机了么,为何还要传输层?)。
位于两台网络主机间的真正数据通信主体不是这两台主机,而是两台主机中的各种网络应用进程,也就是应用程序。一台主机上有很多应用程序,很多应用程序都在进行网络通信,这时候就必须使用到传输层的知识去解决了。
怎样完成端到端的传输呢?
分为两个步骤:一是虚拟传输连接的建立(此处仍仅针对面向连接的传输层协议),二是源端用户数据沿着传输连接传送到目的端。
在整个数据传输过程中,传输层服务需要完成以下8个方面的基本功能:传输层寻址、传输连接建立、数据传输、传输连接释放、流量控制、拥塞控制、多路复用和解复用、崩溃恢复。
这里面每个功能都能细说一篇文章,这里就不一一展开了,后面会出系列的文章,所以点关注,不迷路。每个功能都是面试的考点,所以我后面一定会快速更新出来的。
总结下,传输层主要是为了解决端到端(这里的端到端指的是进程到进程)的通信,起到网络通信桥梁作用。
网络层
网络层也被称为中转层,是网络体系结构中非常重要的一层,在技术上又是非常复杂的一层,因为它既要解决不同网络的节点间通信的路由和协议识别问题,又要通过路由选择策略解决网络拥塞问题,尽可能提高网络通信的可靠性。
网络层解决的主要问题是,从A主机把数据运送到B主机是走高速呢、飞机呢、还是火车呢或者是多种混合的方案呢。一句话就是,网络层关注的是如何将分组从源端沿着网络路径传送到目的端(这个端指的是主机不是应用程序)。
为了实现这个目标,网络层必须知道通信子网的拓扑结构,并且在拓扑结构中选择适当的路径。同时网络层还必须谨慎地选择路由路径,以避免发生某些通信线路和路由器负载过重,而其他线路和路由器空闲的情形。
总结下,网络层主要是为了解决不同网络之间数据传输和转发问题。
数据链路层
物理层中也有许多规程或协议,但它们是用来构建物理传输线路、建立物理意义的网络通信,不是用来控制数据传输的。
设计数据链路层的主要解决的问题就是在原始的、有差错的物理传输线路的基础上,采取差错检测、差错控制与流量控制等方法,将有差错的物理线路改进成逻辑上无差错的数据链路,以便向它的上一层(网络层)提供高质量的服务。一句话总结就是 控制数据传输。
总结下,数据链路层是为了解决数据传输的控制作用。
物理层
物理层位于各计算机网络体系结构的最底层,主要负责在物理介质上为数据链路层提供原始比特流传输的物理链接。
物理层解决的问题就是数据传输。上面的所有层都是封装数据和管理,物理层是传输数据的唯一出口,所有数据到达物理层都会变成二进制的载波信号。
总结下,物理层就是真正传输数据。
为什么不是直接在物理线路中进行通信就行了?而是搞出这么多层网络模型呢?
我觉得在学习计算机网络时能思考这个问题的都是非常的人,比如龙叔我。
物理层是物理线路的抽象,物理层解决的主要问题传输就是数据传输,也是网络通信中唯一的数据传输出口。其实物理层就相当于日常交通网络中的各种道路,如公路、铁路和航线,它们是我们出门旅行必须要依靠的基础设施。
但是物理层不是针对具体的传输介质、设备和通信协议的,因为它们可以有许多种选择(如传输介质中就可以有同轴电缆、双绞线和光纤等),只要能实现物理层的某种功能就行了。不同的传输介质和设备选择,必须要有对应的通信协议支持,而且这也决定了不同的选择有不同的物理层性能。
就像路有好多种一样,如有泥巴路、沙子路、水泥路、柏油马路、普通铁路、高速铁路等,这些不同的路可以承载的重量和速率都不一样。
传输介质不同,各种传输介质传输速率不同;所有人都在进行传输,怎么管理这些人;高铁、航线不可能通到家门口;就算到了家门口怎么把这些数据完整交付给家中的某个人呢;
所以就必须抽象出这些层来解决这些问题。物理层专门做数据传输(好比基础交通设施)、数据链路层制定传输规则(好比交通规则)、网络层把各个交通线路连接起来(就好比各个交通枢纽站)、传输层是端到端的符数据通信(好比把快递小哥把包裹移交到你的手里)、应用层负责提供服务(好比包裹到你手里了,你在享受包裹里面的礼物)。
是不是有些明白为啥需要抽象出多层了,是的。
想想都知道要是光有物理层那网络通信没法玩了,数据都是二进制,透明传输,数据还有可能乱序,丢数据,数据被篡改等等问题。
计算机网络通信过程图
本文讲清楚了文章开头的几个疑惑,至于各层中详细的功能和面试常考的点,篇幅有限,我和大家一起期待下一篇文章。关注我,精彩内容不错过,微信搜索 龙跃十二 即可关注。
觉得本篇文章对你有帮助,非常感谢你能帮我点个赞,你的小小鼓励会成为我创作的动力。