作者:一天,本文首发于公众号:网络之路博客
前一篇介绍了OSI参考模型/TCP/IP协议体系每层的作用以及分层的好处,但是对于一个应用数据访问来说,在TCP/IP协议体系中,它不是独立完成的,而是各层之间共同完成,直到从物理层介质变成比特流发送出去,这一篇就以一个平时常用的网站访问来了解下整个的通信过程。(这个过程不严谨,只是让初学者理解起来更加方便,省去了一些细节的过程。)
这里只是讲解重点部分,很多协议的细节或者网络环境都进行了简化,这个其实就是后面我们要学的,但是对于初学者来说,先了解一个通信的大致过程,以及数据包在处理过程中,每一层发生了什么事情,这样在后续的学习中就会一个很大的帮助。
(1)打开浏览器,输入www.ccieh3c.com,这个时候应用程序浏览器会查找hosts文件或者DNS缓存,是否有这个域名对应的IP信息,如果没有则会发送给DNS进行请求,转换成对应的IP。(这里假设ccieh3c.com的地址是1.1.1.1,浏览器知道,DNS协议在后续会讲解)得到IP后,浏览器开始打包访问的请求,使用HTTP或者HTTPS,不管使用哪种,里面请求的是ccieh3c.com的首页,对应的协议会把这个请求给组织好进行封装,然后通过socket接口交给下一层传输层去完成。
(2)传输层有两种协议,一种TCP(面向连接协议),一种UDP(无连接协议),而HTTP使用的是TCP协议,简单理解面向连接就是TCP能够保证数据能够到达对方,如果对方没收到,就会重新发送,直到对方收到为止。(这里暂时省去了TCP的细节)TCP会产生两个端口号,一个是访问者自己浏览器随机生成的端口号(假设为21345),服务器WEB的端口号为标准端口号(80),这个端口号我们在后续会在提及,传输层封装完毕,会交给下一层网络层。
(3)在TCP/IP中网络层使用的是IP协议,IP协议里面涉及两个重要地址,一个是源IP地址,一个是目的IP地址,源地址表示访问者,目的就是我们要去访问的服务器地址1.1.1.1,大家可能好奇,平时我打开电脑就能上网了呀,并没有去设置过什么IP地址,那是因为在网络里面有另外一个协议帮助电脑自动获取地址,这个协议就是DHCP。
这个时候电脑操作系统知道了服务器的目标IP,就开始根据这个IP找服务器,并且操作系统会做一个判断,这个目标IP地址是不是本地,还是其他的地方的,显然在服务器IP 1.1.1.1与本地电脑IP 192.168.255.2不在一个地方,不在一个地方的话,那怎么去往对方呢?操作系统会进行一个操作,把这个数据丢给默认网关,192.168.255.254,让网关来进行转发。
(4)这个时候是不是就万事大吉了,知道了服务器的IP地址,也知道去往对方交给网关处理就行了,但是要考虑这样一个问题,这个数据是要继续往下面封装的,下一层是数据链路层,在数据链路层里面可能存在着多个设备,那访问者怎么来确定你就是我要找的网关呢?
到这里,访问者电脑总算是完成了整个的数据封装流程,把这个浏览器的请求发送出去,交给网关了。
(5)网关收到以后,需要考虑一个问题,这个数据是给自己的呢?还是交给其他地方的?这个时候网关就需要做一个操作,就是把数据给解封装,因为网关只有看到了对应的信息,它才能够判断这个包到底是给自己的还是交给其他。
接下来的流程就不提物理层了,只要是正常规范的网卡跟线路它都能够去处理这些比特流的内容,后续重点放在二层、三层上面(这个也是路由交换的重点。)网关通过解封装后,得到以太网头部,发现目标mac是自己,继续解封装,得到IP头部,发现目标IP地址是1.1.1.1,这个地址不是自己,那就是需要交给其他地方的,网关会执行一个操作,查找路由表,选择去往1.1.1.1的最优路径。这里从图上面可以发现去往目的地可以通过B,也可以通过C到达,也非常像我们去往一个地方,比如去北京,都知道做飞机是最快的,但是可能从你源地方那没有机场,你需要做班车或者地铁到最近的机场才行。同样的,网关查路由表发现去往目的IP 1.1.1.1,有B、C两条路径可以发送,它会通过路由算法做出一个计算,选择一条最优的路径抵达到对方,然后发送出去,比如这里从B去往目的地最优,这个条目会体现在路由表里面,网关知道去往1.1.1.1,发送给B,这个时候就有2个疑问了,第一:链路层与网络层的头部已经被解封装去掉了,路由器需要重新封装,第二:封装的内容怎么填写。
从访问者电脑到网关,以太网的头部源MAC地址是电脑的,目的MAC地址是网关的,那么到了网关这里,网关的网卡接口也有自己的MAC地址,B路由器的接口也有自己的MAC地址,这时候网关封装链路层的以太网头部在用之前的信息就不行了,因为它表示的是电脑找网关这段链路中用的,而到了这里则变成了网关去往1.1.1.1,交给B处理,那是不是以太网头部的源MAC变成了网关接口的MAC,而目的MAC变成了B的,这样B在收到这个包以后,它会发现原来是找它的,它也跟网关一样执行一样的解封装,查路由表,在封装,最终到达D。(网关到B,B到D获取的MAC同样通过ARP协议)
在这个结构里面,D的身后就是WEB服务器了,D在收到这个数据以后,也跟之前网关、B的操作一样,解封装链路层,发现目的MAC是找自己,解封网络网络层后 ,发现IP是1.1.1.1,就在自己身后,通过ARP得到服务器的MAC,然后封装好 ,交给服务器。
服务器收到以后,开始如下的解封装。
(6)服务器收到请求后会进行回包,最终跟来的时候一样,通过封装,然后中间经过路由器转发,最终也到达客户端,解封装,最终内容呈现在了浏览器的界面上。(是不是觉得不可思议,平时我们打开浏览器输入一个域名回车,中间竟然发生了这么多的事情。)
从上面的通信例子,跟我们生活中寄快递是不是有点类似,在某平台购买了一个商品,卖家作为发送方,将商品进行打包,通过快递平台选择一家,让其收件、打印单号(包含收件人信息:地址+姓名+电话),快递小哥会上门收件,回到快递点,快递公司会通过去往相近地区统一装车发往下一个转运中心,可能中间会经过一个或者多个转运中心,期间也可能会经历一次或者多次卸车、装车的过程,以及去往的路径也不一样,可能某一段走的陆运、某一段走的是空运,到达了最近的转运中心,开始卸车,将同一个区域的送往代理点,代理点的送货员将对应快递送到指定的地址(这个地址可能是某公司、某小区、某学校,这是没办法确定具体的收件人),最终会通过电话号码联系到最终的收件人进行收件,这样完成了整个的运输过程, 买家收到以后,就是一个拆件的过程。这里说下,快递的举例是没法全部跟上面的通信过程全部对应上的,只是说很多流程比较相似,便于初学者理解,毕竟用生活的例子代入进来比枯燥的协议流程要容易理解些,通过一个网络通信的流程以及生活的例子,这里列出几个重点信息(也是我们后续要学的内容)
到这里呢,这篇内容就接近尾声了,这里先说下,最开始的案例有部分的流程是不对的,但是对于初学者来说,只能简化按这样的顺序讲解,否则就非常的复杂,不易于理解,后续在随着深入,博主会继续把这个流程在梳理一次,这样印象就更加深刻了,从最开始的举例,到中间的生活中的快递举例,在到后面的重要细节总结,一直在重复的讲解数据在传递过程中发生的事情,因为这个流程很关键,也是我们学习的重点,所以不断的重复加深印象,了解了整个通信过程,好处在于后续学习协议的时候会更加理解,并且排错的时候知道如何下手,因为清楚的知道每一层的作用,大致能够定位卡在哪个地方,比如网络层,目的IP在路由表中不存在,那自然数据就发不出去了,又或者以太网头部封装中,网关设备的MAC获取错误,自然数据会转发给错误的设备,希望大家可以多花时间去理解这个大致通信过程,做到心底有底,剩下的内容就是我们接下来要慢慢去学习的细节部分,完善整个路由交换的知识框架,这样才好进行网络的规划、对接、运用什么技术实现客户的需求等。顺便接下来留几个疑问,这样也是下面要开始涉及的内容了。
(可以尝试自己根据上面的举例理解下,这样提高学习兴趣,后面会更有动力哇,但是切记不要钻牛角尖,这样很容易卡死在胡同里面,降低学习兴趣。)
心底有底,剩下的内容就是我们接下来要慢慢去学习的细节部分,完善整个路由交换的知识框架,这样才好进行网络的规划、对接、运用什么技术实现客户的需求等。顺便接下来留几个疑问,这样也是下面要开始涉及的内容了。
(可以尝试自己根据上面的举例理解下,这样提高学习兴趣,后面会更有动力哇,但是切记不要钻牛角尖,这样很容易卡死在胡同里面,降低学习兴趣。)