3D网络实战学习——网络基础(一)

目前辞职在家,疫情期间也找不到工作,正好看到了一本书《3D网络游戏实战》,趁机学习一下网络知识,希望在此期间能找个游戏公司收留我QAQ。

网络基础

基础概念

先说网络游戏大多是基于TCP/IP协议的BS(客户端–服务器)结构,客户端运行在用户的电脑或手机上,服务端运行在游戏运营商的服务器上,如图:
典型的网络游戏框架

七层网络模型

在实现网络传输时,人们把通信问题划分成了多个小问题,为每个小问题设计类一个单独的协议,制定了开放系统互联的七层参考模型:在这里插入图片描述
其中应用层、表示层和会话层统称为应用层,没有很明确的界定,一般由程序开发者实现。传输层、网络层、数据链路层和物理层为底层,由操作系统提供。
下面以向客户端发送“hello“为例,说明过程。
例子
应用层:
用户把字符串“hello”转换成二进制流传递给传输层。
传输层:
数据传输。
网络层:
对传输的消息添加信息(指定目的、拆分等)
数据链路层:
传输中若发生差错,为了达成只将有错的数据进行重发,数据链路层将比特流组合成帧,然后以帧为单位进行传送。所以在这一层会拆分数据或者添加一些额外的数据保证传输。
物理层:
数据通过物理介质进行传输的过程(电缆、光纤等),这些数据通过物理介质传输到目的地,目的地再依照与上述相反的过程进行解析,得到“hello”。

IP与端口

IP: 网络上的计算机都是通过IP地址进行识别的。
端口: 是设备与外界通信交流的出口,每台计算机可以分配0-65535个端口。其中0-1023号端口成为众所周知的端口号,他们被分配黑一些固定的服务。

C#中的相关类型

C#的System.Net命名空间中提供了IP和端口相关的类。在这里插入图片描述

TCP协议

TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,
而与之对应的UDP协议则是无连接的、不可靠的协议,但是传输效率比TCP高。
TCP连接的建立(三次握手)

TCP是面向连接的,无论哪一方在向另一方发送数据前,都必须在双方之间建立一条连接。在TCP/IP协议中,TCP协议提供可靠的连接服务,链接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号,并交换TCP窗口大小的信息。在这里插入图片描述
三次握手流程举例:
加入三个军队,A、B、C,A和B单独一方都不可能打掉C,所以两个决定合作,怎么能确定什么时候一起进攻呢:
1.A派人去告诉B今夜子时发动总攻,但是A派的人可能中途夭折,所以A只有确认了B收到消息后才敢发动总攻,所以要等待B的回音(如果等待时间过长则在派出一个,多次尝试后才放弃)
2.B收到了A的消息,B会派人回应A,但是B也面临A一样的担忧,所以也得在等A回音。
3.A收到了B的回应,确认消息。这时在派出人回应B。
4.B收到了回应,也确定了A收到了他们的回应,这里即完成了通信,可以发起总攻。

TCP连接的终止(四次挥手)

客户端和服务器通过三次握手建立了连接以后,等待数据传输完毕,便要断开连接。与三次握手相似,需要通过四次挥手来确保断开连接。在这里插入图片描述
第一次挥手: 主机1(可以使客户端也可以是服务器)向主机2发送一个终止信号(FIN),此时主机1进入FIN_WAIT_1状态,他没有需要发送的数据,只需要等待主机2的回应。
第二次挥手: 主机2收到了主机1发的FIN信号,向主机1回应一个ACK。收到ACK的主机1进入FIN_WAIT_2状态。
第三次挥手: 在主机2把所有数据发送完毕之后,主机2向主机1发送终止信号(FIN),请求关闭连接。
第四次挥手: 主机1收到主机2发送的终止信号(FIN),向主机2回应ACK,然后主机1进入TIME_WAIT状态(等待一段时间,以便处理主机2的重发数据)。主机2收到主机1的回应后,关闭连接。四次挥手完成。

Socket套接字

套接字是支持TCP/IP协议网络通信的基本操作单元,可以将套接字看做不用主机间的进程双向通信的端点,
它构成了单个主机内及整个网络间的编程界面。
Socket连接的流程

1.开启一个连接之前,需要先完成Socket(新建一个套接字)和Bind(指定套接字的IP和端口)两个步骤(客户端在调用Connect时会由系统分配端口,因此可省去Bind)。
2.服务端通过Listen开启监听,等待客户端接入。
3.客户端通过Connect连接服务器,服务端通过Accept接收客户端连接,三次握手就是在这期间完成。
4.客户端和服务端通过write和read发送和接收数据,操作系统将会完成TCP数据的确认、重发等步骤。
5.通过close关闭连接,这里完成四次挥手操作。
在这里插入图片描述

Socket类

System.Net.Sockets命名空间的Socket为网络通信提供了一套丰富的方法和属性。这个大家去官方看下API吧(毕竟每个版本不一定一样),这里就不多说了。

下一章会开始着手做一个简单的网络程序。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值