从英雄联盟,看数据包何去何从?

写在前面

我们总是在说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,如果不是则发送给能够转发出去的路由器。周而复始的执行这个过程。直到合适的网关接到数据,广播给自己局域网内容的计算机。

尾声

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

如果有小伙伴感兴趣,可以自行针对具体的内容,去学习更为专业的内容呦~

原文地址:http://blog.51cto.com/13931046/2164493

时间: 2024-10-11 05:12:42

从英雄联盟,看数据包何去何从?的相关文章

终端、网络到服务端(一)从日常vps云服务器的管理看数据包的传输

从日常vps云服务器的管理看数据包的传输 无论从app移动端,还是pc设备,总要通过接入,通过网络传输到服务端进行数据握手和各类交互,那么从这个角度出发,就可以看到各种终端设备发出的网络请求,最终还是要特定方式连接上服务端的.以vps服务器管理来说,一般vps idc都提供2种接入方式:远程桌面和web接入: 1 远程接入走的是应用层,发送的是segment段地址信息,通过tcp/ip协议的3次握手建立连接,出现远程桌面的登录界面. 2 web登录,一般都是由idc提供一个web管理界面,在会员

[抓包]数据包由于isp不稳定丢包-seq&ack

知识参考: http://www.xianren.org/net/wireshark-q.html 背景 总行wac管理分行ap.手机终端打不开portal页面. 2,分别抓包(portal页面从wac下载,通过udp7070隧道下载,sta获取portal的目的ip2.2.2.1) 在各个环节抓包: 2.1思路:wac和ap分别抓包,判断是没发还是没收到 2.2具体操作:Wac端和ap端分别过滤出2.2.2.1 2.3根据数据包情况,有收有发, 客户端一直确认41996 Wac一直索要383的

C# WPF从RIOT API获取数据(RIOT代表作品《英雄联盟》)

微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. C# WPF从RIOT API获取数据(RIOT代表作品<英雄联盟>) 阅读导航 本文背景 代码实现 本文参考 1. 本文背景 RIOT(拳头)是一家美国网游开发商,成立于2006年,代表作品<英雄联盟>. 本文重点要讲解两个知识点: C# 使用 HttpClient 访问 RIOT 提供的 API 接口,获取召唤者概况信息: C# WPF界面展示召唤者信息搜索.概况信息两个界

用Python抓取并分析了1982场英雄联盟数据,教你开局前预测游戏对局胜负!

英雄联盟想必大多数读者不会陌生,这是一款来自拳头,由腾讯代理的大型网络游戏,现在一进网吧,你就能发现一大片玩英雄联盟的人.在2017年中国战队无缘鸟巢的世界总决赛后,一大片人选择了弃游,只是终究没躲过"真香定理",在2018年的中旬,又有大批战友又回到熟悉的召唤师峡谷战场,时至今日,英雄联盟已经不仅仅是一款游戏,一个电竞项目了,它已经成为了我们生活的快乐源泉了. 问君能有几多愁,辅助闪现抢人头:问君能有几多愁,卡牌千里送人头.问君能有几多愁,皇子开大关队友:清明时节雨纷纷,各种队友各种

英雄联盟设计师:游戏动画压缩如何保质量

转自:http://www.gamelook.com.cn/2015/08/226312 Gamelook报道/不论是哪个平台的游戏,开发商最为头疼的问题之一就是包体大小,因为它不仅影响玩家硬件的存储空间,还直接决定玩家从发现到体验游戏的时间差.而游戏动画则是占用资源最大的部分,所以如何压缩动画是所有开发者都需要面对的问题. 最近,<英雄联盟>开发商Riot Games发布了相关的技术贴,设计师Jaewon Jung通过博客的形式讨论了如何在不降低动画质量的情况下进行动画压缩的话题,并且在文章

猫猫学IOS(十二)UI之UITableView学习(上)LOL英雄联盟练习

猫猫分享,必须精品 素材代码地址:http://blog.csdn.net/u013357243/article/details/44706671 原文地址:http://blog.csdn.net/u013357243?viewmode=contents 先看效果图 源代码 NYViewController的代码 //ps:新建iOS交流学习群:304570962 可以加猫猫QQ:1764541256 或则微信znycat 让我们一起努力学习吧. 原文:http://blog.csdn.net

【bzoj5018】[Snoi2017]英雄联盟 背包dp

题目描述 正在上大学的小皮球热爱英雄联盟这款游戏,而且打的很菜,被网友们戏称为「小学生」.现在,小皮球终于受不了网友们的嘲讽,决定变强了,他变强的方法就是:买皮肤!小皮球只会玩N个英雄,因此,他也只准备给这N个英雄买皮肤,并且决定,以后只玩有皮肤的英雄.这N个英雄中,第i个英雄有Ki款皮肤,价格是每款CiQ币(同一个英雄的皮肤价格相同).为了让自己看起来高大上一些,小皮球决定给同学们展示一下自己的皮肤,展示的思路是这样的:对于有皮肤的每一个英雄,随便选一个皮肤给同学看.比如,小皮球共有5个英雄,

【BZOJ5018】[Snoi2017]英雄联盟 背包

[BZOJ5018][Snoi2017]英雄联盟 Description 正在上大学的小皮球热爱英雄联盟这款游戏,而且打的很菜,被网友们戏称为「小学生」.现在,小皮球终于受不了网友们的嘲讽,决定变强了,他变强的方法就是:买皮肤!小皮球只会玩N个英雄,因此,他也只准备给这N个英雄买皮肤,并且决定,以后只玩有皮肤的英雄.这N个英雄中,第i个英雄有Ki款皮肤,价格是每款CiQ币(同一个英雄的皮肤价格相同).为了让自己看起来高大上一些,小皮球决定给同学们展示一下自己的皮肤,展示的思路是这样的:对于有皮肤

腾讯勇夺全球游戏霸主地位,“英雄联盟”成基石

作者:楠沨 [IT战略家] <英雄联盟>世界总决赛于十月落下帷幕,成千上万粉丝观看了S6系列职业联赛,但鲜少有人知道的是,这是一个中国公司全球统治战略的一部分.(注:英雄联盟为当下最为火热的电子竞技类游戏.) 并购之路 & 合作伙伴自主性战略 腾讯作为亚洲最具价值的科技公司,目前市值高达2490亿美元,已经成为全球最大的游戏发行商,收入超过美国知名游戏公司艺电和暴雪.腾讯主导着中国的游戏市场,并不断通过与外国公司建立战略联盟走上全球扩张之路. 腾讯也在尝试出口自己的游戏,但它在全球取得