全网最详解计算机网络协议——通信协议综述( 二 )


路由器就像唐僧西天取经路过的一个个国家之间的城关 , 每个城关都连接着两个国家 , 每一个国家都相当于一个局域网 , 每个国家的内部都可以使用MAC地址进行通信;
一旦跨越城关 , 就需要拿出IP头来 , 里面记录着IP源地址(东土大唐) , 欲前往西天拜佛取经(目的IP地址) , 路过宝地 , 借宿一晚 , 请问接下来该如何走?

全网最详解计算机网络协议——通信协议综述

文章插图
 
城关与城关之间的沟通协议叫做路由协议 , 常用的由OSPF和BGP;
城关与城关之间是一个国家 , 网络包知道了要去哪个城关的时候 , 还是要使用国家内部的MAC地址 , 通过下一个城关的MAC地址 , 找到下一个城关 , 然后在问下一步该怎么走 , 一直走到最后一个城关 。最后一个城关知道这个网络包要去的地方 。于是 , 对着这个国家吼一声 , 谁是目标IP啊?目标服务器就会回复一个MAC地址 。网络包过关后 , 通过这个MAC地址就能找到目标服务器;
目标服务器发现MAC地址对上了以后 , 取下MAC头来 , 发送给操作系统的网络层 , 发现IP地址对上了 , 在取下IP头 。IP头里会写上一层封装的TCP协议 , 然后交给传输层,即TCP层 。
在这一层中 , 对于收到的每个包 , 都会有一个回复说明收到了 。这个回复的包绝非这次单次请求的结果 , 例如购物是否成功 , 扣了多少钱等 , 而仅仅是TCP层的一个说明 , 即收到之后的回复 。当然这个回复 , 会沿着刚才来的方向走回去 , 报个平安 , 防止在传输过程中造成的丢包等 。
如果过一段时间还没有收到的话 , 发的端TCP层会重新发送这个包 , 还是上面的请求 , 直到收到平安到达的回复 。这个重试绝非你的浏览器重新将下单这个动作重新请求一次 。对于浏览器来讲 , 就发送了一次下单请求 , TCP层不断自己闷头重试 。除非TCP这一层出了问题 , 例如连接断了 , 才轮到浏览器的应用层重新发送下单请求 。
当网络包平安到达TCP层之后 , TCP头中有目标端口号 , 通过这个端口号 , 可以找到电商网站的进程正在监听这个端口号 , 假设一个Tomcat , 将这个包发给电商网站 。
电商网站的进程得到的是HTTP请求 , 知道要买什么东西 , 买多少 。往往一个电商网站最初接待请求的这个Tomcat只是个接待员 , 负责统筹处理这个请求 , 而不是所有的事情都自己做 。例如 , 这个接待员要告诉专门管理订单的进程 , 登记要买某个商品 , 买多少 , 要告诉管理库存的进程 , 库存要减少多少 , 要告诉支付的进程 , 应该付多少钱 , 等等 。
如何告诉相关的进程呢?往往通过RPC调用 , 即远程过程调用的方式来实现 。远程过程调用就是当告诉管理订单进程的时候 , 接待员不用关心中间的网络互连问题 , 会由RPC框架统一处理 。RPC框架有很多种 , 有基于HTTP协议放在HTTP的报文里面的 , 有直接封装在TCP报文里面的 。
当接待员发现相应的部门都处理完毕 , 就回复一个HTTPS的包 , 告知下单成功 。这个HTTPS的包 , 会像来的时候一样 , 经过千难万险到达你的个人电脑 , 最终进入浏览器 , 显示支付成功;
看到这里相信你对于自己之前学过的计算机网络知识有一个连串的感觉了吧 , 很多公司的面试题都会问在浏览器中输入一个URL的整个过程? 把这一连串说完 , 相信你的面试官也会觉得你学的很扎实;
全网最详解计算机网络协议——通信协议综述

文章插图
 
二、网络分层的真正含义
计算机网络知识点需要背诵 , 但是更是要理解透彻;
2.1 为什么网络要分层?
因为不同层次之间有不同的沟通方式 , 叫做协议 。就像一家公司也是分“层次” , 分为总经理、经理、组长、员工 , 每个人之间都有不同的沟通方式;
因为复杂的程序都要分层 , 想象网络包就是一段Buffer , 或者一块内存 , 是有格式的 。同时 , 想象自己是一个处理网络包的程序 , 而且这个程序可以跑在电脑上 , 可以跑在服务器上 , 可以跑在交换机上 , 也可以跑在路由器上 。你想象自己有很多的网口 , 从某个口拿进一个网络包来 , 用自己的程序处理一下 , 再从另一个网口发送出去;


推荐阅读