网络游戏编程学习笔记(一):计算机网络基础

1.起源:

最初的网络是美国高级研究计划署开发的“阿帕网”(ARPANET)。阿帕网使用了分组交换技术实现其目的,再此之前,长距离之间的信息传输石是通过电路交换实现的。
在这里插入图片描述

在使用电路交换的情况下:假设A-E之间存在一段通话,那么C-D这段线路会被持续占用,导致B-F之间的通话无法进行。
在使用分组交换的情况下取消了电路一个时刻只能专用于一个传输的限制,将传输的信息拆成小块,分组( 分为数据包),在每个节点之间进行储存转发:每个节点储存到来的分组,并转发给最近的一个节点。

分组交换网络中,如何将数据分组,又如何在节点中储存转发的,最初由1822协议定义。后来阿帕网发展为互联网,1822协议也演变为一个协议集合,即TCP/IP协议族。

2.TCP/IP模型

有许多参考模型来解释互联网通信中层与层的交互关系
在这里插入图片描述
为了关注一个游戏开发程序员相关的事情,我们使用 TCP/IP模型。

3.物理层:

TCP/IP模型的最底层,为网络中的计算机或者主机提供物理连接。

4.链路层:

链路层主要任务是提供网络实体之间的通信方法,即如何实现源主机封装信息,通过物理层传输信息,目的主机接受封装好的信息并从中提取信息。

链路层的数据传输单元称为帧。

链路层的主要职责:
(1)定义主机的唯一标识,方便帧数据对接收方进行编址
(2)定义帧的格式,包括目的地址的格式和传输数据的格式
(3)定义帧的长短,以便确定上一层每次传输可以发送的大小
(4)定义一种帧转换为电子信号的物理方法,以便数据可以通过物理层传输,并被接收方接收。

帧的传输是不可靠的,物理介质损坏或者电子干扰等等因素会导致帧丢失,但是链路层不做任何操作来确认帧是否抵达接受方或者帧没有抵达便重新发送。因此链路层的通信是不可靠的,任何需要可靠数据传输的上层协议都需要自己实现这点

对于每种被选择作为物理层实现的物理介质,对应的链路层协议不同:对于通过双绞线链接的主机可以使用以太网的一种进行通信,通过无线电波连接的主机可以使用短程无线网络协议或者远程无线网络协议(3g,4g等)。

5.以太网:

以太网是基于以太网蓝皮书的一组协议,是链路层的协议。
为了给每台主机一个唯一标识,以太网引入了MAC地址。
MAC地址是一个48bit大小的数字,唯一分配给以太网中的每个硬件(网卡)
MAC地址前24位是IEEE分配给厂家的唯一代码,后24位是厂家自己进行唯一分配的。
MAC地址不仅应用于以太网中,大多数的IEEE802系列的链路层协议(无线网和蓝牙)都应用到了MAC地址。

链路层中帧的格式见书p21

帧检验序列可以检查帧在传输过程中丢失或者数据损坏。
游戏开发者需要知道,网络中每台主机接收帧,读取帧后判断它是否为接收者,如果是,读取帧中的数据域,然后根据 长度/类型域处理这些数据。

6.网络层:

链路层提供了将数据从一台可寻址的主机到另外一台主机的方式,但是链路层存在许多不足,需要上层来弥补:
1.烧在硬件中的MAC地址限制了硬件的灵活性:在只使用链路层的情况下,如果一台服务器网卡烧坏了,更换新网卡时会有一个新的MAC地址,那这个 服务器将不会收到任何用户的请求。所以需要一套基于MAC地址上可轻松配置的地址系统。
2.链路层不支持将互联网划分为更小的网络。如果整个互联网都基于链路层,所有计算机都要在同一个网络中,如果只用以太网进行网络传输,一个主机发出的帧必须到达互联网中的每台主机。
3.链路层不支持不同链路层协议的主机之间的通信,更说明我们需要一个链路层硬件地址之上的一个地址系统。
网络层的任务是在链路层基础上提供一套逻辑地址的基础设施。主机可以容易更换硬件,主机群可以划分子网,两个子网中的主机也可以用不同的链路层协议通信。

7.IPV4:

实现网络层最常用的协议就是IPv4。
IPv4的IP地址是32比特数字,以英文句号划分每8比特。
IP数据包包头中IP包包总长长度为16bit,所以IP数据包做大长度是65535字节,IP数据包包头是160bit也就是20字节,所以IP数据包数据部分最大长度为65515字节。
直连路由和地址解析协议:
IPv4是如何使用一种链路层协议传输数据包的:主机A发送B一个网络层数据包,主机A准备了一个包含已知源ip地址和目标ip地址的网络层,交付给链路层,但是链路层不识别ip地址,所以链路层需要找出目标IP地址所对应的硬件地址,链路层的地址解析协议(ARP)协议提供了方法。

ARP分为:ARP报文和一个记录IP到硬件地址的映射关系表。

当网络层需要用到链路层向一台主机发送数据包时,首先查询ARP对照表中目标IP地址对应的硬件地址,如果找得到,便取硬件地址构造一个链路层的帧;如果取不到,便通过广播一个ARP报文,当得到响应ARP报文后,拿到对应的硬件地址。

当一个主机广播ARP报文时,其他主机虽然不是目标主机,但是也会更新这个主机的信息到对应表中。

子网和间接路由:

子网掩码是一个32bit数字,与IP地址表示方法相同,如果主机与子网掩码的按位与的结果相同,那么这些主机在同一个子网中

无类别域间路由:IP地址/子网掩码的有效位数。比如18.19.100.0/24

子网定义后,IPv4提供了一种在不同网络之间传输数据包的方法。实现该方法的是每台主机ip模块中的路由表。

对于一个可达的目标子网,路由表中有一行信息,内容是如何将数据包发送到这个子网。网关表示这台主机通过链路层发送数据包的下一台主机的ip地址。如果网关是空的,那么整个目标子网都是直达路由可达的。

特殊的IP地址:
127.0.0.1 回路地址或本地地址,如果要求IP模块发送数据包到127.0.0.1,数据包不会发送到任何地方而是被发送到下一层做处理。
255.255.255.255:受限广播地址,数据包会被发送到相同链路层的所有主机,而不被路由器转发。

分片:

8.传输层:

传输层的任务是实现主机上单独进程之间的通信,只知道A给B发了一个数据包是不够的,需要知道B收到数据包后,需要发送给哪个进程进行处理。为了解决这个问题,传输层引入了端口。

端口号是16bit数字。一个进程可以绑定任何一个端口,但是一个端口不能被多个进程绑定,为了避免争夺端口,互联网数字分配机构(IANA)负责端口号的注册。

每一个传输层的协议只能注册一个端口号。

用户数据报协议UDP:
UDP不提供堵塞网络的流量限制服务,不保证数据顺序传输喝准确到达。

传输控制协议TCP:
TCP在两台主机之间创建持久性链接,提供可靠数据流传输。TCP保证所有数据按顺序抵达接收方。

TCP的数据传输单元称为TCP报文段

TCP报文段结构:
源端口号和目标端口号各16bit;
序列号:32bit,单调递增,是这个报文段的第一个字节的序号。
确认号:发送方期望收到的下一个字节的序列号。对所有序列号低于这个数字的数据做一个实际的确认,TCP保证所有的数据都是按序传输,主机期望收到的下一个字节的序列号通常比刚刚收到的前一个字节的序列号要多1,这个数字的发送方确认收到所有小于这个值的序列号。

TCP三次握手:

本文部分内容总结于《网络多人游戏架构与编程》
本文部分图片和内容来自和参考:https://www.runoob.com/w3cnote/summary-of-network.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值