1.socket简介

游戏开发中最常用的便是socket,socket本质是api,是对tcp/ip的封装。tcp/ip协议族是一个网络通信模型以及一系列网络传输协议,为互联网的基础通信架构。

tcp/ip网络模型分为四层:应用层、传输层、网络层、网络接口层。下面的表格是tcp/ip模型和osi模型的对比。

  

tcp/ip

osi

应用层

应用层

表示层

会话层

传输层

传输层

网络层

网络层

网络接口层(又称链路层)

数据链路层

物理层

 

最上面是应用层,里面包含了http,ftp等协议。

第二层是传输层,提供应用程序间的通信,tcp和udp就属于这一层,socket是应用层与传输层之间的同一个抽象层。

接下来的便是网络层,负责计算机之间的通信,将数据加上ip地址选择去往目标的路径。包括ip、icmp控制报文协议等。

最下层是网络接口层,又称为链路层。负责接收ip数据包并通过网络发送,或者从网络上接收物理帧,抽出ip数据包,交给ip层。

 

socket其实是一种特殊的文件,一些函数对其进行读写操作。

SocketChannel和NioSocketChannel区别 socket 和 tcp_服务器

socket的tcp连接流程如上图所示,udp连接则不需要建立连接。

 

2.socket接口函数

以c#为例,介绍socket的基本函数。

2.1.socket()函数

Socket(AddressFamily family, SocketType type, ProtocolType proto)

AddressFamily 地址族,决定了socket的地址类型
SocketType socket类型,包括Stream、Dgram、Raw、Rdm、Seqpacket。
ProtocolType socket使用的协议类型,常见的有tcp,udp。

2.2.bind()函数

Bind( EndPoint localEP )

EndPoint是表示ip+端口

2.3.listen()、connect()函数

Listen(int backlog)

backlog是socket可以排队的最大连接个数


Connect(IPAddress address, int port)//有多个重载函数

IPAddress表示地址,port表示端口

2.4.accept()函数

Socket Accept()//有多个重载函数

accept会返回一个新的套接字用来与客户端收发消息,绑定监听的套接字是另一个。

 2.5.send和receive

send和receive有多个重载函数,可以理解为用于读取写入和读取套接字数据缓冲区 。

 

2.6.close()函数

void Close()//有多个重载函数
在服务器与客户端建立连接之后,会进行一些读写操作,完成了读写操作就要关闭相应的socket描述字,好比操作完打开的文件要调用fclose关闭打开的文件。

 

3.tcp和udp的区别

tcp 

udp

连接

无连接

可靠

不可靠

面向字节流

面向报文

首部复杂20字节

首部简单8字节

传输速度慢

传输速度快

tcp和udp的主要区别如上图所示

 

3.1tcp和udp的头部结构

tcp头部结构

源端口号

目的端口号

数据序列号

确认序列号

偏移

保留

6个标志位

窗口大小                

校验和

紧急指针

可选项

数据



6个标志位
URG-紧急指针有效
ACK-确认序号有效
PSH-接收方应尽快将这个报文交给应用层
RST-连接重置
SYN-同步序号用来发起一个连接
FIN-终止一个连接

 

udp头部结构

源端口

目的端口

数据长度

校验和   

数据

(1)16位源端口号,记录源端口号,在需要对方回信时选用。不需要时可用全0。
(2)16位目的端口号,记录目标端口号。这在终点交付报文时必须要使用到。
(3)数据长度 UDP数据报的长度(包括数据和首部),其最小值为8B(即仅有首部没有数据的情况)。
(4)校验和,检测UDP数据报在传输中是否有错,有错就丢弃。

 

3.2tcp的三次握手

第一次握手,客户端发送一个SYN包(序列号为x),进入SYN_SEND状态,等待服务器确认。

第二次握手,服务器收到SYN包需要返回一个ACK包(确认序列号为x+1),并且发送一个SYN包(序列号为y),此时服务器为SYN_RECV状态。

第三次握手,客户端收到服务器的ACK+SYN包,向服务器发送一个ACK包(确认序列号为y+1),客户端和服务器进入ESTABLISHED状态,连接正式建立。

 

3.3tcp的四次挥手

SocketChannel和NioSocketChannel区别 socket 和 tcp_服务器_02

 

 

 4.http的介绍

http协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是建立在tcp协议之上的一种应用。

http的特点包括:

1.无连接,服务器处理完客户的请求,并收到客户的应答后,即断开连接。

2.无状态,无状态是指协议对于事务处理没有记忆能力。

3.灵活,允许传输任意类型的数据。

4.1http的消息结构

http请求报文结构,依次为:请求行、请求头、空行、请求数据。如下图:

 

请求方法 

空格

URL

空格

协议版本

回车符

换行符

头部字段名



回车符

换行符

......

头部字段名:



回车符

换行符

回车符

换行符

请求数据

http响应报文结构,依次为:状态行、响应头、空行、响应数据。如下图:

协议版本

空格

状态码

空格

解释状态码的原因短语

回车符

换行符

头部字段名



回车符

换行符

......

头部字段名:



回车符

换行符

回车符

换行符

响应数据

 

4.2http的请求方法

GET

请求指定的页面信息,并返回实体主体。

POST

用来传输实体的主体。

HEAD

和GET类似,不过不返回报文的主体,只返回头部。

PUT

从客户端向服务器传送的数据取代指定的文档的内容。

DELETE

指明客户端想让服务器删除某个资源,与PUT方法相反。

CONNECT

 CONNECT方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。

主要使用SSL(安全套接层)和TLS(传输层安全)协议把通信内容加密后经网络隧道传输。

OPTIONS

用来查询针对请求URL指定的资源支持的方法。