C#Socket

 一.网络协议

如果要理解Socket,要熟悉TCP/IP即传输控制协议/网间协议,定义了主机如何连入因特网,数据如何在它们之间传输的标准。

TCP/IP协议参考模型,把所有的TCP/IP系列协议归类到四个抽象层中:应用层,传输层,网络层,数据链路层,每一抽象层建立在低一层提供的服务上,并且为高一层提供服务。

互联网为什么分层?

层与层之间定好规则(就是接口),每一层做好自己的事,层可以内部演化。

协议:规范,遵守的规则

一共分为几层?5层,下面具体分析一下这5层

C#SocketC#Socket

 

 

 

实体层

 物理连接,光纤/电缆等。传递的是0和1

C#Socket

链接层

 规定一下0和1的解读方式。

以太网

  • 大概是一组信号当做数据包,成为帧-Head-data
  • Head:描述信息(发送者---接收者)
  • Data:真实数据
  • 数据必须是网卡到网卡的(每个网卡有Mac地址)
  • 广播一下,对着局域网的全部网卡都发一遍

互联网是多个局域网组成的。局域网是子网络。

网络层

  •  解决不同的计算机,在不同的局域网通讯问题。
  • IPV4确定属于哪个子网,独立的IP比较贵的。每个计算机都有一个IP地址:192.168.1.1一共32位的
  • 把帧里面data分成2块(Head包括IP地址+长度,data真实数据)
  • 帧长度是有限制的,如果超过,会拆成不同的包,每个包都有head和包序号

传输层

  • 问题:电脑里面多个程序都使用网络,帧过来,到底给那个程序?得有个东西,告诉去给那个程序。(端口改闪亮登场了....)
  • 保证:电脑上的某程序的信息,发送到某个电脑上的某个程序。
  • 端口:0~65535,其中0到1023系统用的。保证程序和程序进行交流
  • 主机+端口=套件字(Socket),socket其实就是保证分布在不同电脑的程序交互,可以做网络应用程序开发
  • UDP协议,把data拆分成head+data(head只放端口)。不保证数据一定会被收到。特点:简单,可靠
  • TCP协议,数据的可达性,确保数据不丢失,确认过程。复杂版本的UDP。特点:负载低效,抵消更多资源,可靠。

应用层

 http协议举例,说明data数据里面的含义。指定data里面什么格式,什么意义。

 

二.网络通讯

推荐一个框架,跨平台的

中文网站

https://www.supersocket.net/

Supersocket有三大对象:Session,AppServer,Commands

  • Session:每个用户的连接,就是一个Session
  • AppServer:Socket服务器的实例
  • Commands:客户端回发数据的命令

客户端发的信息格式:CommandName+空格-+参数0+空格+参数1+空格+参数N+rn

服务端的处理:CommandName命令类来处理

 

心跳检测机制:

  • 用来检测客户端是否掉线,客户端在线,间隔时间内服务器发送一个心跳包,服务器返回应答。
  • 如果心跳周期内,没收到,服务器就认为你下线了

 

发表评论

相关文章