[计算机网络] - 从英雄联盟,看数据包何去何从?

MDove 0人评论 448人阅读 2018-08-26 13:46:43

https://blog.51cto.com/13931046/2164493

写在前面

我们总是在说TCP/IP协议。HTTP头怎么怎么样;TCP头怎么怎么样;IP头怎么怎么样;MAC头怎么怎么样。不过话又说回来,计算机网络的问题,大多都是问这些。深入了解这部分内容,的确是最优解。

不过作为德智体美劳全面发展的新时代码农,多了解一点,多学习一点。总归是没错的。(不就是多掉几根头发,怕啥!大不了用霸王)

今天,我们就来从英雄联盟入手,聊一聊数据包是怎么从我方水晶(我的计算机)到敌方水晶(目标计算机)的。

当然,如果不想看这些莫名其妙内容的小伙伴,可以直接拉到文章末尾看总结~

开搞

准备工作

首先来说,一般情况下,从应用层到链路层,我们逐层包装了HTTP协议的内容,TCP协议的内容,IP协议的内容。此时到了链路层,准备封装mac地址。

那么这个时候我们需要通过ARP协议得到目标IP的mac地址。第一步,一定要判断一下目标IP是否和自己是同一网段。

A-IP判断:B-IP是否和自己是同一网段,使用的方式是自己的(A-IP)子网掩码与B-IP的IP地址进行“与”(两位同时为“1”,结果才为“1”,否则为0)运算。

如果是同一网段,那么很舒服。直接局域网大吼一声,这个谁知道这个X-IP地址的mac。X-IP所在的网口一看:哎呦卧槽,这不是叫我的么?哥们,里边请里边请。

那么这个包很顺利的都进来了。那么接下来就是我们熟悉的TCP/IP的反向解析的过程。

那如果不在同一网段呢?

让我们先看一张图:

进入联盟的世界

是不是觉得走错片场了?没走错、没走错,接下来就让我,用这张图,解释数据包(英雄)将如何从我方水晶(我的计算机)到敌方水晶(目标计算机)。

假设我们是随机英雄,游戏加载完毕,英雄被创建出来(从应用层到网络层,层层包装),来到了我方泉水(链路层)。

游戏准备开始,呦,我们的英雄是个瑞雯。假设我们的瑞雯,出生就带着一个目标:从上路攻入敌方水晶。

但是我们的瑞雯,只知道目标,其他啥都不知道!敌方上路怎么走?我是新手,不知道啊。泉水商人是个战争贩子,见多识广,去问问他吧!

泉水商人看到瑞雯的目标,给瑞雯指了条明路:你去找我方上路高地塔。

我方上路高地塔,看到了瑞雯的目标说话了:不要慌,虽然我不知道敌方上路到水晶怎么走,但是我知道我方上路门牙怎么走。你从我这走,去它那准没错!

瑞雯拖着符文之刃,来到了我方上路门牙。我方上路门牙一看目标,瑞雯的目的是敌方水晶!我方上路门牙,轻蔑一笑:小姑娘,我劝你不要去找死。

瑞雯冷哼一声:老娘,心悦会员666!此话一出,天也晴了,雨也停了,网络仿佛也很行了。

就这样我们的瑞雯,左手人民币,右手大帽子,一路杀到敌方水晶,顺利完成目标。

正经的来一发

解析一些上述加粗的内容:

名词 解释
瑞雯 这个就不多说了,我们的数据包。
目标 也就是我们的目标IP。
泉水商人 可以理解默认网关,当我们的数据包的目标IP不是源IP的同一网段时,这个包将交给默认网关,由它去处理。至于它怎么处理,下文我们会提及。
上路高地塔、上路门牙 他们二者可以理解为数据包在网络传输过程中如果跳转的路由器。

说实话,用联盟的例子,属实可能有些不是很准确,不过大的框架用此还是可以解释清楚的。接下来我们正经的来聊一聊这个过程~

其实这个过程完全可以通过一个图解释:

数据包离开被发出前,需要先计算一下目标IP是否和自己是同一网段,这里就俩种可能:是与否。
如果是同一网络,直接通过ARP协议(使用“吼”的方式,等待对方应答),得到目标所在的mac,封装到数据包中,发过去即可。
如果不是同一网络,那么就需要先通过ARP协议获取到静态网关的mac地址(同样使用“吼的方式”),将包发给它,至于静态网关怎么找到目标地址,那就是静态网关的事了。

停一停,聊一聊网关与路由器

网关

静态网关:静态网关是在操作系统启动时,通过DHCP协议配置好的,默认网关的IP地址是192.168.1.1。

静态网关就是网关,网关是它所属的这个局域网对外进出的关键。

路由器

而路由器则负责连接多个网关,用于转发数据包到某一个网关上,所以说路由器是管理网关的关键。

因此把网关比做路由器可能不是很恰当。二者并非是同一个东西:如果把整个计算机网络世界比做古代世界的话。那么网关就像一个关卡,路由器则是一座城市。城池可以掌管多个关卡。关卡可以掌管多条官道。

如果我们想从许昌到长安,那么这条路上,虎牢关和函谷关就可以称之为网关,洛阳器就是路由器。许昌和虎牢关可以看做同一个局域网。

许昌的人想从这个局域网出去,必须要从虎牢关(默认网关)出发,而想要到长安城,虎牢关这个网关知道要转发给洛阳城才行;洛阳作为路由器,通过自身的路由表,找到了长安的所在IP,需要转发给函谷关这个网关。

因此数据包就到达了函谷关所管辖的局域网之中,最终送达到了长安。

我们的网络世界由路由器连接了一个有一个局域网,而网关则负责自己所管辖的一亩三分地(局域网)。

继续数据包的旅程

静态网关拿到数据包,继续根据目标IP计算该怎么转发这个包。比如静态网关知道这个目标IP应该有路由器4是转发。那么它会重新封装mac地址,将包发给路由器4。那么这里可能有引出来一个疑问:网络这么大,路由器们是怎么知道某个IP是发给谁的呢?这里就涉及到路由表以及路由协议了。

路由表

通过这张表,路由器知道进来的数据包该从那个网口(网关)出去。而这张表则是由路由协议生成的。

路由协议

路由可以分为:静态路由和动态路由。静态路由可以理解为我们自己去设置路由结构,从哪跳到哪,但是这个只适合于网络情况比较简单的问题。

所以,这部分我们主要聊一聊动态路由。动态路由可以根据路由协议算法生成动态路由表,随网络运行状况的变化而变...

我们的互联网世界是一个复杂且多变的环境,如果抽象出来,可以看成一个图的结构。那么现在的问题对于路由算法来说就变成了,从图中找到目标的最短路径。

这里常见的有俩种:距离矢量路由算法、链路状态路由算法。

动态路由算法 - 距离矢量路由算法:

基于 Bellman-Ford 算法的。就是我们数据结构中。求图的最短路径的算法。算法的基本思路是,每个路由器都保存一个路由表,每一行包含两部分信息,一个是要到目标路由器,从那条线出去
,另一个是到目标路由器的距离。

因为篇幅原因,这部分内容暂时不做展开,如果有小伙伴感兴趣,可以自行去了解呦。

动态路由算法 - 链路状态路由算法

基于 Dijkstra 算法,同样是我们数据结构中的算法。
每个启动的路由器,都会先找到并计算出于自己临近路由器的距离,然后将这个表广播发送给整个网络。最终每个路由器都会有整个路由结构。

因为篇幅原因,这部分内容暂时不做展开,如果有小伙伴感兴趣,可以自行去了解呦。

再次继续数据包的旅程

当我们的路由器拥有了路由表,那么路由器就仿佛拥有了全世界,因此对于此时的计算机网络的世界来说,任何一个都路由到的IP地址,都是可以被访问到的,无非是需要跳转几次个路由器而已。

当我们的数据包,每到达一个路由器时,路由器都会检查这个包的目标IP,然后同自己的路由表内容进行配置,看一看应该发送到那个网关上。

网关接到数据包,如果发现不是自己这个局域网的,那么同样它也会转发给能够结构的路由器,循环往复这个过程,直至到达目的地。

总结

一个数据离开网卡,会有俩个出路,一个是广播给同一个网段的某台计算机;另一个出路是发送给配置好的默认网关。而这个网关则会发送对应的路由器,路由器通过自己的路由表确定下一条的网关。下一个网关,会查看这个数据包是不是自己局域网内的IP,如果不是则发送给能够转发出去的路由器。周而复始的执行这个过程。直到合适的网关接到数据,广播给自己局域网内容的计算机。

尾声

其实本篇内容,偏向于流程的梳理,因为计算机网络的世界本身就是以及极为庞大且复杂的学问,三言俩雨根本无法解释清楚其中的复杂与智慧(说白了,就是我也不会)...因此,本文倾向于去通俗化的解释这个流程。

搬砖:[计算机网络] - 从英雄联盟,看数据包何去何从?相关推荐

  1. [计算机网络] - 从英雄联盟,看数据包何去何从?

    写在前面 我们总是在说TCP/IP协议.HTTP头怎么怎么样:TCP头怎么怎么样:IP头怎么怎么样:MAC头怎么怎么样.不过话又说回来,计算机网络的问题,大多都是问这些.深入了解这部分内容,的确是最优 ...

  2. 揭秘英雄联盟的数据服务器

    揭秘英雄联盟的数据服务器 Hey,大家好!我是 Bill "LtRandolph" Clark,一名英雄联盟的游戏工程师.许多 Rioter 工程师关注大量的内容需要直接发送给玩家 ...

  3. CSGO/steam游戏搬砖项目入行前必看知识点汇总(一)

    CSGO/steam游戏搬砖项目入行前必看知识点汇总(一) CSGO武器皮肤的入门级知识点,入行前一定要看 CSGO武器皮肤有什么用以及如何分类?有多少人已经彻底搞清楚了这个问题?今天这篇文章是专为新 ...

  4. 英雄联盟台词语音包数据挖掘(基于python调用百度接口对台词进行语音识别)

    背景 寒假的时候,由于up非常喜欢剪辑英雄联盟视频,但是在剪辑的时候会遇到没有英雄台词原声的问题,所以就去各大网站上找,但是遇到的问题是要么就是英雄台词不全,要么就是其他皮肤的原声没有.后来在某多商城 ...

  5. 计算机网络考试数据包格式,计算机网络实验 分析ICMP协议数据包格式.doc

    计算机网络实验 分析ICMP协议数据包格式 实 验 报 告 实验课程名称 计算机网络实验 实验项目名称 分析ICMP协议数据包格式 年 级 08 专 业 电子信息科学与技术 学生姓名 郎子龙 学 号 ...

  6. 月入过万的steam搬砖项目教程拆解,看这一篇就够了

    大家好! 我是阿阳 一.项目介绍 其实,Steam就是一个美国的游戏平台,搬砖主要是搬的一款火遍全球的游戏CSGO的装备和饰品.CS听说过吧,这款游戏就是CS的一个系列. 二.项目原理 搬砖的原理就是 ...

  7. 【计算机网络 24】TCP/IP数据包结构详解

    一.前言 一般来说,网络编程我们只需要调用一些封装好的函数或者组件就能完成大部分的工作,但是一些特殊的情况下,就需要深入的理解 网络数据包的结构,以及协议分析.如:网络监控,故障排查等. IP包是不安 ...

  8. 通过Leaguepedia API实现抓取英雄联盟赛事数据

    概述 在帮助文档可以看到,Leaguepedia的赛事数据可以通过mwclient这个包抓取相关赛事数据,包括首龙.首塔.赛区.比赛名称.BP.英雄.经济.胜负等等数据. ##安装mwclient p ...

  9. WPF实现雷达图(仿英雄联盟)

    前言 有小伙伴提出需要实现雷达图. 由于在WPF中没有现成的雷达图控件,所以我们自己实现一个. PS:有更好的方式欢迎推荐. 代码如下 一.创建 RadarChart.cs 菜单继承 Control代 ...

最新文章

  1. 知方可补不足~开发人员可以自己定义VS文件模版
  2. 4.5 matlab三维曲面(mesh、fmesh、meshc、meshz、surf、fsurf、surfc、surfl)
  3. Android研究-linux内核启动到android系统
  4. Vue + Element UI 实现权限管理系统 前端篇(八):管理应用状态
  5. eclipse/myeclipse选中编辑区域文件,Package Explorer定位文件所在项目及目录
  6. 微信小程序开发之路(二)
  7. 《编程能力基础》刷题笔记(41 题)
  8. iOS开发之企业级账号的使用注意的坑
  9. ERP操作手册要不要做?
  10. fanuc机器人试题_E01OF工业机器人FANUC系统维护试题库.docx
  11. 计算机毕业设计 SSM+Vue音乐播放网站系统 云音乐播放系统 付费音乐播放系统Java Vue MySQL数据库 远程调试 代码讲解
  12. DDR3内存频率标识对应
  13. 网络地址快速计算方法:IP地址24位-30位掩码绕过二进制计算迅速得到网络地址
  14. 犹太人一直被誉为高智商的民族——那么犹太人天生就很聪明吗?听听他们自己的解释:...
  15. 极进网络(Extreme Networks )Extreme VDX 6940 交换机光模块配置方案
  16. hc-sr04程序c语言,HC-SR04(HY-SRF05)超声波测距串口显示(超详细版单片机源程序)
  17. vagrant Linux虚拟机与win共享目录时的大小写及共享失败问题(vagrant share folder/synced_folder case sensitivity)
  18. php array_diff_assoc,关于array_diff_assoc的详细介绍
  19. HTML送朋友的唯美新年贺卡/祝福贺卡/生日礼物/情人节礼物
  20. 查询出编号长度大于4的code_中国大学MOOC-翁恺-C语言程序设计习题集-解答汇总...

热门文章

  1. 制作Ubuntu安装启动U盘
  2. (转) ios苹果开发者账号申请
  3. 计算机适合科学实验室在哪里,高效的科学实验室如何实现
  4. 有超过50%的树懒,在屎拉到一半的途中意外身亡
  5. html图片高度全屏居中,CSS解决固定高度图片居中裁剪问题
  6. android桌面歌词显示,【Android】桌面歌词悬浮效果简单实现
  7. 「GoCN酷Go推荐」Go 语言高性能图像处理神器 h2non/bimg
  8. clickhouse数据库备份
  9. FineReport BI报表工具
  10. 太豪爽了,特价房五百套、奥迪6.3折,更多补贴都在苏宁双十一