6

C#Socket - 东方承丘

 2 years ago
source link: https://www.cnblogs.com/dfcq/p/16454405.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

C#Socket

 一.网络协议

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

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

互联网为什么分层?

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

协议:规范,遵守的规则

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

2004791-20220712155016591-2097670351.png
2004791-20220712155048573-2088181419.png

实体层

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

链接层

 规定一下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+\r\n

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

心跳检测机制:

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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK