【Unity 3D】C#中Socket及TCP三次握手与四次挥手详解(超详细 图文解释)

简介: 【Unity 3D】C#中Socket及TCP三次握手与四次挥手详解(超详细 图文解释)

觉得有帮助请点赞关注收藏~~~

Socket编程,就是对网络中不同主机上的应用进程进行双向通信的端点的抽象,一个Socket就是网络上进程通信的一端,提供了应用层利用网络协议交换数据的机制,从所处的地位来讲,Socket上连应用进程,下连网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议进行交互的接口

提起Socket就不得避免的要说到TCP/IP 而Socket是应用层与TCP/IP协议通信的中间软件抽象层,它是一组接口,也就是复杂的TCP/IP协议族隐藏在Socket接口后面,让Socket去组织数据,以符合指定的协议

一、Socket简介

上面已经知道网络中的进程是通过Socket通信的,Socket起源于UNIX 而UNIX/LINUX基本原理之一就是一切皆文件,都可以用打开读写模式操作,Socket相当于是一个特殊的文件,Socket函数就是对网络进行的操作。

Socket的任务就是让服务器端和客户端进行连接,然后发送数据,先从服务端说起,服务端先初始化Socket,然后与端口绑定,对端口进行监听,调用Accept函数阻塞,等待客户端连接,在这时,如果客户端初始化一个Socket,然后连接服务器,如果连接成功,这时客户端与服务器端的连接就建立了,客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束

二、Socket函数的基本使用

Socket函数,既然Socket是 Open-Write/Read-Close模式的一种实现,那么Socket就提供了这些操作对应的函数接口

public Socket(AddressFamily addressFamily,SocketType socketType,ProtocolType,protocolType);

Bind函数

当调用Socket函数创建一个Socket对象时,返回的Socket对象存在于协议族空间中,但没有一个具体的地址,要想给他赋予一个地址,就必须调用Bind函数 否则会随机分配一个端口

public void Bind(EndPoint localEP);

Listen,Connect函数

如果一台服务器在调用Socket Bind函数后 就会调用Listen函数监听这个Socket对象,如果客户端这时调用Connect函数发出连接请求,服务器端就会接收到这个请求

Accept函数

调用完上面的函数后,服务器端会调用Accept函数接收请求,这样连接就建立好了,此时就可以进行网络IO操作了,Accept函数代表启动TCP连接

public Socket Accept();

Send,Receive函数

Receive函数负责读取内容,Send函数将buffer中的bytes字节内容发送出去

Close函数

完成上述操作后要关闭响应的Socket对象,就像操作完文件后要调用Close函数关闭文件一样

public void Close();

三、Socket中TCP的三次握手详解

我们知道TCP建立连接时要进行三次握手,三次握手即建立TCP连接,就是指建立一个TCP连接时,需要客户端总共三个包以确认连接的建立,在Socket编程中,这一过程由客户端执行Connect出发

第一次握手:客户端执行Connect函数触发连接,将标识位SYN置为1,并产生一个随机值sqe=j,并将该数据包发送给服务器端,客户端进入发送状态,等待服务器端确认

第二次握手:服务器端收到数据包后由标识位SYN=1知道客户端请求建立连接,客户端将标识位SYN置为1,然后令ACK=J+1 并产生一个随机数seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入接收状态

第三次握手: 客户端收到数据包后,检查ACK是否为J+1,如果正确则将标识位ACK置为1,之后再令ACK=k+1,并将数据包发送给服务器端,服务器端检查ACK是否为K+1,如果正确则连接成功,客户端和服务器端进入成功状态,完成三次握手,客户端和服务器端就可以开始传输数据

四、Socket中TCP的四次挥手

结束连接时TCP需要四次挥手 如下图所示

某个应用进程首先调用Close函数主动关闭连接,这时TCP发送一个FIN M

另一端接收到FIN M之后,执行被动关闭,对这个FIN进行确认,它的接收也作为文件结束符传递给应用进程,因为FIN的接收意味着应用进程在相应的连接上再也接收不到其他数据

一段时间之后,接收到文件结束符的应用进程调用Close函数关闭它的Socket,这会使他的TCP也发送一个FIN N

接收到这个FIN的源发送端的TCP对它进行确认,这样每个方向上都有一个FIN和一个ACK

创作不易 觉得有帮助请点赞关注收藏~~~

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
1月前
|
数据处理 C# C++
如何使用C#和C++结构体实现Socket通信
如何使用C#和C++结构体实现Socket通信
|
3天前
|
存储 网络协议 关系型数据库
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
|
8天前
|
网络协议 Linux Windows
TCP/IP、Http、Socket之间的区别
TCP/IP、Http、Socket之间的区别
|
11天前
|
网络协议 Ubuntu Unix
Linux 下使用 socket 实现 TCP 客户端
Linux 下使用 socket 实现 TCP 客户端
|
1月前
|
网络协议 Linux
TCP 和 UDP 的 Socket 调用
【2月更文挑战第19天】
TCP 和 UDP 的 Socket 调用
|
1月前
|
网络协议 Java
【计算机网络】TCP socket编程
【计算机网络】TCP socket编程
|
3月前
|
定位技术 C# 图形学
Unity和C#游戏编程入门:创建迷宫小球游戏示例
Unity和C#游戏编程入门:创建迷宫小球游戏示例
72 2
|
3月前
|
网络协议 Linux API
Linux C TCP编程(socket,select/poll/epoll)
本文主要介绍了linux下标准的TCP通信流程,实现了客户端和服务器的通信,主要实现了消息的回发,即服务器将消息原封不动的回发给客户端。如果对接口不熟悉可以参考socket api介绍或者参考其他博客。
26 0
|
4月前
|
C# 图形学
【Unity 3D】元宇宙案例之虚拟地球信息射线实战(附源码、演示视频和步骤 超详细)
【Unity 3D】元宇宙案例之虚拟地球信息射线实战(附源码、演示视频和步骤 超详细)
50 0
|
4月前
|
人工智能 自然语言处理 区块链
【Unity 3D】元宇宙概念、应用前景、价值链等概述
【Unity 3D】元宇宙概念、应用前景、价值链等概述
52 0