【游戏客户端面试题干货】-- 2021年度最新游戏客户端面试干货( 计算机网络篇 )

  大家好,我是Lampard~~

  经过一番艰苦奋战之后,我终于是进入了心仪的公司。

  今天给大家分享一下我在之前精心准备的一套面试知识。

  今天和大家分享的是计算机网络相关的面试题

   额其实这篇博客在项目开发的过程中,用到的情况并不多(也可能因为我还是新人,接触不多)。然鹅各种游戏大厂都会很注重面试者的基础,在博主所见识过的大厂面试中,它们主要是着重面试者以下几种技能:1.语言:c++,c#,lua,js,python等,2.引擎:内存管理,渲染机制,事件分发机制,计时器调度机制,设计模式等,3.基础:虽然客户端和服务端会有不同的侧重,但是只要你是科班出身,它们就要考察你的基础,比如说计算机网络,操作系统,数据库,计算机组成原理等,4.算法:前三者如果说大家可以靠过目不忘的本领把知识点都背下来,那么算法的测试就是见真章的时候了,做出来不是终点,它们会一直深挖一直深挖,让你一直优化(头皮发麻)。5.项目经验:若各位是校招的话,前面4点会占了80,90%的面试比重,但是若是社招的同学,项目经验就是最重要的,起码占50%的比重,面试官会考察你做过什么系统,看你的能力到哪里。对于客户端来说如果你有计算机图形学,接过战斗系统,接过sdk,负责过打包patch业务,有为项目写过脚本完善工具链,那么就会有加分点。所以多准备准备是没有错滴。最后祝大家疯狂收割offer,通过自己的努力摆脱生活的苟且,走向诗和远方~

一. OSI的七层模型和TCP/IP的五层模型

OSI七层模型

开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,缩写为 OSI),简称为OSI模型(OSI model),一种概念模型,由国际标准化组织提出,一个试图使各种计算机在世界范围内互连为网络的标准框架。

 它把整个网络通讯过程拆分成7层:分别是物理层,链路层,网络层,传输层,会话层,表示层以及应用层,每一层独立完成自己的东西,每一层之间通过协议来进行交流。

TCP/IP五层模型

再往后发展,出现了因特网协议栈,它把osi中的会话层,表示层以及应用层抽象成一层,所以就变成了;物理,链路,网络,传输,应用五层结构。

下面简要介绍以下各层负责的内容,用到的协议:

物理层(单位比特):

主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0,然后把电信号转换位0101的比特流信号。

链路层(单位帧):

单纯的电信号0和1没有任何意义,必须规定电信号多少位一组,每组什么意思(从哪里来,到哪里去,数据内容是什么)。分组方式后来形成了统一的标准,即以太网协议ethernet。

ethernet规定:

  • 一组电信号构成一个数据包,叫做“帧”
  • 每一数据帧分成:报头head和数据data两部分
  • 报头head包含发送者的mac地址,接受者的mac地址,以及数据类型。数据data包含发送的内容

什么是mac地址?mac地址其实就是网卡地址,每块网卡出厂时都被烧制上一个世界唯一的mac地址,长度为48位2进制。有了mac地址,同一网络内的两台主机就可以通信了,它们是通过广播的方式进行联系,每个pc都会收到广播的信息,然后根据接受者来判断自己是否接收该信息。

网络层(单位包):

如果所有的通信都采用以太网的广播方式,那么一台机器发送的包全世界都会收到,这就不仅仅是效率低的问题了,数据赤裸裸的被偷窥,这会是一种灾难。必须找出一种方法来区分哪些计算机属于同一广播域(局域网,信任的网站),哪些不是,如果是就采用广播的方式发送,如果不是,就采用路由的方式。

网络层功能:

引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址。

规定网络地址的协议叫ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示。

ip地址分两个部分:分别标识网络和主机

那么怎么确定哪些地址来自同一网络呢?此时就要引入一个掩码的概念,

子网掩码:

所谓”子网掩码”,就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。

如:IP地址为192.168.11.12,前24位是网络部分,后8位是主机部分,那么子网掩码就是11111111.11111111.11111111.00000000,转换成十进制就是255.255.255.0

利用子网掩码,我们可以判断任意两个IP地址是否处在同一个子网络:将两个ip地址与子网掩码分别进行AND(与)运算(两个位数都为1,运算结果就为1,否则为0)然后比较结果是否相同,是的话就是在同一个子网,否则就不是。

打包:IP不是可靠的协议,这是说,IP协议没有提供一种数据未传达以后的处理机制--这被认为是上层协议--TCP或UDP要做的事情。

分包:以太网数据包的”数据”部分,最长只有1500字节。因此,如果IP数据包超过了1500字节,它就需要分割成几个以太网数据包,分开发送了。

传输层(单位报文):

传输层的由来:网络层的ip帮我们区分子网,以太网层的mac帮我们找到主机,再通过端口来标识主机上的应用程序。端口即应用程序与网卡关联的编号。

传输层功能:

建立端口到端口的通信。

传输层有两种协议,TCP和UDP,至于它们的具体内容我们拆开来讲。我们只需要记得,tcp是连接可靠的传输方式,udp是无需建立链接的不可靠的传输方式。TCP协议虽然安全性很高,但是网络开销大,而UDP协议虽然没有提供安全机制,但是网络开销小,在现在这个网络安全已经相对较高的情况下,为了保证传输的速率,我们一般还是会优先考虑UDP协议!

应用层:

应用层功能:

规定应用程序的数据格式。

设备与层的对应关系:

二. TCP-- 传输控制协议

通过上文我们得知tcp是一种面向连接的、可靠的、基于字节流的传输层通信协议。这里我们需要讨论的就分为了两点,一种是如何实现面向连接,第二是如何保证可靠性。

面向连接:三次挥手,四次挥手

TCP是因特网中的传输层协议,使用三次握手协议建立连接。TCP三次握手的过程如下:

  1. 客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。

  2. 服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。

  3. 客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。

举个现实的栗子:

小乌龟去买番茄:老板在吗(向往服务器发送syn请求连接)?

老板:在啊,买东西吗(先回复之前的问题ack,然后再进行确认syn)?

小乌龟:是的啊(对服务端的syn进行再次确认)

三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。

当连接终止时,需要进行四次挥手

  1. 客户端发送FIN(FIN = X传输结束)报文给服务器端。

  2. 服务器端收到FIN报文,回应一个ACK(ACK=x+1)报文,然后继续传输数据

  3. 服务端传输完数据紧接着发送FIN报文给客户端,告知自己也传完了

  4. 客户端收到后回复ACK,表示正式结束连接

当我们了解到三次握手和四次挥手的实现机制时,就会情不自禁的冒出两个问题:

1.为什么要进行三次握手

2.为什么三次握手连接,而断开连接的时候却要四次呢?

首先我们解释为什么需要三次握手,就不能够我跟你说我要连接,你返回收收到了之后就进行传输吗?如果说理想状态下确实问什么问题,但是如果因为网络等原因,我向你请求连接的包延迟到达,我等不到你的回信,以为丢包了,过段时间后又重发了一个。这时相当于发了两个,如果不进行第三次确认的话,服务端收到我们迟到的包的时候,将会以为你想要和它通信,这就出现错误了,所以三次握手防止重复连接

至于为什么连接只需要三步,而取消连接需要四步。其实我们观察图片就会知道,差异在于服务端在收到连接信号的时候,它可以同时发送两个信号:我已经了解请求,是否确认连接?但是结束的时候,虽然收到了客户端的结束请求,但是你传完了,我还没回复完啊,如果你请求一大堆信息我是不是该分报文传给你?所以就有了异步等到传完所有信息后再回复我也传完了,请求结束连接的FIN

可靠性:建立连接,自纠错,拥塞控制和报文重传的机制

我们知道tcp是可靠的,那么它可靠的地方怎么体现呢?

建立连接:通过三次握手建立连接本身就是一个保证数据传输可靠的措施

自纠错:tcp会通过校验和的方式进行自纠错

超时重传:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

拥塞控制:为了避免过多的数据注入网络,导致链路过载,会通过慢开始,拥塞避免,快重传和快恢复方式进行拥塞避免

(1)慢启动

每当建立一个TCP连接时或一个TCP连接发生超时重传后,该连接便进入慢启动阶段。进入慢启动后,TCP实体将拥塞窗口的大小初始化为一个报文段,即:cwnd=1。此后,每收到一个报文段的确认(ACK),cwnd值加倍,即拥塞窗口按指数增加。当cwnd值超过慢启动阐值(ssthresh)或发生报文段丢失重传时,慢启动阶段结束。前者进入拥塞避免阶段,后者重新进入慢启动阶段。

(2)拥塞避免

在慢启阶段,当cwnd值超过慢启动阐值(ssthresh)后,慢启动过程结束,TCP连接进入拥塞避免阶段。在拥塞避免阶段,每一次发送的cwnd个报文段被完全确认后,才将cwnd值加1。在此阶段,cwnd值线性增加。

(3)快速重传

快速重传是对超时重传的改进。当源端收到对同一个报文的三个重复确认时,就确定一个报文段已经丢失,因此立刻重传丢失的报文段,而不必等到重传定时器(RTO)超时。以此减少不必要的等待时间。

(4)快速恢复

快速恢复是对丢失恢复机制的改进。在快速重传之后,不经过慢启动过程而直接进入拥塞避免阶段。每当快速重传后,置ssthresh=cwnd/2、ewnd=ssthresh+3。此后,每收到一个重复确认,将cwnd值加1,直至收到对丢失报文段和其后若干报文段的累积确认后,置cwnd=ssthresh,进入拥塞避免阶段。

三. UDP和TCP的区别

UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议(我可以丢数据,但是你一定要快要实时)。

为了在给定的主机上能识别多个目的地址,同时允许多个应用程序在同一台主机上工作并能独立地进行数据包的发送和接收,设计用户数据报协议UDP。

UDP使用底层的互联网协议来传送报文,同IP一样提供不可靠的无连接数据包传输服务。它不提供报文到达确认、排序、及流量控制等功能。

UDP Helper可以实现对指定UDP端口广播报文的中继转发,即将指定UDP端口的广播报文转换为单播报文发送给指定的服务器,起到中继的作用。

UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同。TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。与TCP不同,UDP协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据包的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把UDP协议称为不可靠的传输协议。

TCP 是面向连接的传输控制协议,而UDP 提供了无连接的数据报服务;TCP 具有高可靠性,确保传输数据的正确性,不出现丢失或乱序;UDP 在传输数据前不建立连接,不对数据报进行检查与修改,无须等待对方的应答,所以会出现分组丢失、重复、乱序,应用程序需要负责传输可靠性方面的所有工作;UDP 具有较好的实时性,工作效率较 TCP 协议高;UDP 段结构比 TCP 的段结构简单,因此网络开销也小。TCP 协议可以保证接收端毫无差错地接收到发送端发出的字节流,为应用程序提供可靠的通信服务。对可靠性要求高的通信系统往往使用 TCP 传输数据。

一句话就是要快要实时性选UDP,要可靠安全选择TCP。

四. HTTP和HTTPS的区别

HTTP:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。它可以使浏览器更加高效。HTTP 协议是以明文方式发送信息的,如果黑客截取了 Web 浏览器和服务器之间的传输报文,就可以直接获得其中的信息。

HTTPS:是以安全为目标的 HTTP 通道,是 HTTP 的安全版。HTTPS 的安全基础是 SSL。SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。SSL 协议可分为两层:SSL 记录协议(SSL Record Protocol),它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL 握手协议(SSL Handshake Protocol),它建立在 SSL 记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

一句话回答则是http较快,且不安全。https会通过ssl协议的方式进行加密,更安全但时延高,成本高。

五. MAC地址和IP地址

mac地址是链路层的概念,是网卡的地址,目的在于找到具体哪一台主机。IP是网络层的地址,在链路层的基础上用来定位局域网。用于判断是以广播方式还是以路由方式进行信息传播。

IP地址可以通过ARP协议找出MAC地址,mac地址也可以通过RARP来找到IP地址。

博客参考:

TCP/IP五层模型详解

好,今天的分享就到这里,祝各位功力渐长平步青云,谢谢大家~~

【游戏客户端面试题干货】-- 2021年度最新游戏客户端面试干货( 计算机网络篇 )相关推荐

  1. 【游戏客户端面试题干货】-- 2021年度最新游戏客户端面试干货(操作系统篇)

    [游戏客户端面试题干货]-- 2021年度最新游戏客户端面试干货(操作系统篇)   大家好,我是Lampard~~   经过一番艰苦奋战之后,我终于是进入了心仪的公司.   今天给大家分享一下我在之前 ...

  2. 【游戏客户端面试题干货】-- 2021年度最新游戏客户端面试干货( C++篇 )

    [游戏客户端面试题干货]-- 2021年度最新游戏客户端面试干货( C++篇 )   大家好,我是Lampard~~   经过春招一番艰苦奋战之后,我终于是进入了心仪的公司.   今天给大家分享一下我 ...

  3. 【游戏客户端面试题干货】--2021年最新游戏客户端面试干货(lua篇)

      [游戏客户端面试题干货]-- 2021年度最新游戏客户端面试干货(lua篇)     大家好,我是Lampard~~   经过春招一番艰苦奋战之后,我终于是进入了心仪的公司.   今天给大家分享一 ...

  4. 【游戏客户端与服务器面试题】-- 2022年最新游戏客户端与服务器面试(lua篇持续更新)

    [游戏客户端与服务器面试题干货]-- 2022年度最新游戏客户端面试干货(lua篇) 文章目录 一.Lua的8种数据类型 (1) nil 类型 (2) boolean类型 (3) number类型 1 ...

  5. Java软件开发面试题!2021年京东Java岗面试必问

    前言 面试技巧另外开篇再说,先上面试干货吧.面试的题目并不一定有严格的顺序关系,有的是从前一个问题延伸而来,(探究的是一个知识的深度),有的是考察面试者的知识广度.有的纯粹是我想到哪里写到哪里的啦.. ...

  6. java面试题oracle,2021年度javasqloracle面试题汇总.doc

    (口述题)请简述迅雷.BT等p2p下载软件实现原理.如何资源分布. 解释:A想来B家做客,但是遭到了B管家NAT?B回绝,理由是:我从来没有听我家B提过你名 字,这时A找到了A,B都结识朋友serve ...

  7. SAP License:2021年度最新FICO面试题目

    SAP的FICO顾问可以按能力分为5阶,第一阶:基本会点第三阶:在有限的帮忙下能解决大部分问题第五阶:高级顾问.如果下面的题目你全会做了,基本能达到第三阶啦. FI 1.请简述会计科目分为哪两个阶层, ...

  8. [最新] Android 代码规范大全(Android开发速看),2021年最新大厂Android面试笔试题目

    | 数据库类 | 功能名 + DBHelper | 新闻数据库:NewsDBHelper | | 自定义的共享基础类 | Base + 基础 | BaseActivity, BaseFragment ...

  9. Java面试题:2021大厂最全Java面试资料

    一般来说在成为Java开发工程师的道路上,面试是必不可少的事情,同时也是每个Java开发工程师必然需要经历的事情.很多人在Java面试的时候,会因为踩坑,而导致与自己心怡的工作失之交臂.所以很多想要成 ...

最新文章

  1. php redis set集合操作,php对redis的set(集合)操作
  2. 团队项目的分工及绩效评估方法
  3. Java项目中如何更优雅的处理空值?
  4. linux git 备份迁移,linux – 从GitHub迁移到GitLab(作为POSIX环境中的遥控器)
  5. ES6~ES12——Array Includes、Object values、Object entries、Object fromEntries、flat、flatMap、空值合并运算符、可选链等
  6. 物联网生态品牌白皮书
  7. linux SNAT、DNAT目标函数
  8. 批处理For--分割字符串
  9. 十大最佳外国Android游戏下载平台
  10. Java程序员之从菜鸟到职场高手的必看...
  11. 特征选择(模型输入参数的分析选择)方法汇总
  12. 离散数学 传递闭包 Warshall算法
  13. 小程序定位,接入腾讯位置服务
  14. java常见面试题库大全
  15. 书单|双十一必入的科普口碑好书
  16. xm在线转换成mp3_全民K歌月花费25万,95后表示在线K歌可以换一种玩法
  17. stm32 软件怎么设置写保护_STM32F407 读保护,写保护,解锁过程【芯片已设置读保护,无法读取更多信息】...
  18. MP3Stego的使用方法
  19. OSS PHP SDK报“Use of undefined constant CURLOPT_CLOSEPOLICY - assumed”错误
  20. LayoutInflater.from的含义

热门文章

  1. 网络变压器的工作原理:如何用LCR测量仪进行网络变压器的对称性检测?
  2. 游戏插件开发之防插件剥离的简单保护壳工具设计(利用反汇编引擎实现自动化代码保护)下
  3. pygame中文文档 四
  4. opencv学习四:色彩空间转换
  5. Android 自定义日历
  6. 1.2379软性退火硬度
  7. FLASH使用技术提示
  8. 数字经济时代,智慧组织的变革之路
  9. win7字体_onenote无法同时或分别设置默认的中英文字体,如何解决?
  10. DDX/DDV工作内幕