一、概念

1、OSI七层模型图:

C#-Socket_TCP、Socket_UDP、WebSocket、WebService、WCF、WebAPI、MQTT的基础使用_WCF

  (1)应用层:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP;

  (2)传输层:定义传输数据的协议端口号,以及流控和差错校验,协议有TCP UDP;

  (3)网络层:进行逻辑地址寻址,协议有ICMP IGMP IP(IPV4 IPV6);

  (4)数据链路层:建立逻辑连接、进行硬件地址寻址、差错校验等功能,用MAC地址访问介质;

  (5)物理层:建立、维护、断开物理连接。(由底层网络定义协议)。

2、TCP:

  (1)位于OSI传输层,基于soap(信封)协议;

  (2)数据格式是xml、Json;

  (3)是面向连接的,需要先建立连接;

  (4)TCP协议是一个可靠的传输协议,它可以保证传输的一个正确性,保证我们的不丢包不重复,而且数据是按顺序到达的,保证不丢包(握手需要三次,挥手却要四次);

  (5)典型的 TCP/IP之上的协议有 FTP、MSMQ、TCP、Telnet、SMTP、SNTP,HTTP,HTTPS、Named 、Pipes 等;

  (6)传输速度慢(原因之一:握手需要三次,挥手却要四次)。

3、UDP:

  (1)位于OSI传输层;

  (2)数据格式是xml、Json;

  (3)面向无连接的,不需要先建立连接;

  (4)UDP协议是一个不可靠的协议,它是不保证我们的数据能够可靠完整的到达,他只是尽最大的努力去完成交付的,不保证不丢包;

  (5)典型的 TCP/IP 应用有ip电话、流媒体、DNS、DHCP、SNMP(简单网络管理协议)等;

  (6)传输速度快;

  (7)实时性抗干扰性强。

4、Socket(套接字):

  (1)socket是一个抽象层,它将复杂的TCP、UDP操作简化成一下操作;

  (2)表达式:套接字Socket=(IP地址:端口号);

  (3)三种类型:

    a.流套接字(SOCK_STREAM):

      流套接字用于提供面向连接、可靠的数据传输服务,使用了TCP协议进行数据的传输。

    b.数据报套接字(SOCK_DGRAM):

      提供一种无连接的服务。使用UDP协议进行数据的传输。

    c.原始套接字(SOCK_RAW):

      用来处理其他协议发送的数据(处理IP数据包)。

5、Http协议(超文本传输协议):

  (1)位于OSI应用层,通常运行在TCP之上,可以使用UDP传输;

  (2)缺陷:通信只能由客户端发起,HTTP 协议做不到服务器主动向客户端推送信息。

6、WebSocket:

  (1)WebSocket是一种在单个 TCP连接上进行 全双工通信的协议。

  (2)WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。

  (3)在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

  (4)相比http协议可以实现服务器推送技术。

7、WebService:

  (1)基于SOAP或Http协议,Web Service = SOAP + HTTP + WSDL;很老的东西,只有.net framework支持,net core3.1运行时之后不在支持;

  (2)优点支持映射自定义的【数据集(DataSet.xsd)】与WinForm结合使用。 

    注:DataSet.xsd和实体类用法一样,我没试过WCF和WebApi可不可以。

  (3)WebService三要素

 

    a.SOAP (Simple Object Access Protocol):简易对象访问协议,soap用来描述传递信息的格式;

 

    b.WSDL (WebServices Description Language):Web服务描述语言,用来描述WebService、以及如何访问WebService;

 

    c.UDDI (Universal Description Discovery and Integration):通用描述、发现及整合,用来管理、分发、查询webService。

8、WCF:

  (1)WCF是对于ASMX,.Net Remoting,Enterprise Service,WSE,MSMQ等技术的整合,WCF最基本的通信机制是SOAP;

  (2)可以基于TCP或者MessegeQueue来传输数据;

  (3)WCF 支持多种通信协议 Http/Https 、TCP/UDP、MSMQ、命名管道、对等网、消息可达性、事务流等;

  (4)WCF 支持多种消息传输格式 :text,binary,mtom,Json 等;

  (5)由于WCF完全是由托管代码编写,因此开发WCF的应用程序与开发其它的.Net应用程序没有太大的区别,我们仍然可以像创建面向对象的应用程序那样,利用WCF来创建面向服务的应用程序。

    注:WCF与Web Service的关系:Service是早期的技术实现了,也是soap的东西,采用的主要是http协议。微软的Web服务实现称为ASP.NET Web Service,采用Web Service 规范。它使用Soap简单对象访问协议来实现分布式环境里应用程序之间的数据交互。更新完善几代后,微软就推崇WCF了。

9、WebAPI(是一个比较宽泛的概念,这里指微软WebAPI):

  (1)基于http协议上;

  (2)数据格式可以是xml,json,ATOM;

  (3)支持MVC的特征,像路由、控制器、action、filter、模型绑定、控制反转(IOC)或依赖注入(DI),单元测试;

    注:

      SOAP:微软所提出的用于创建在因特网上传输的结构化格式数据或消息的协议。SOAP是使用WCF和XML格式的主要基础。

      REST:并非是像SOAP那样的协议。它是用来构建Web Services的一种架构设计模式。Web API使用这种模式来构建Web服务。

补充:

  (1)WCF与WEBAPI的选择:

    a.当你想创建一个支持消息、消息队列、双工通信的服务时,你应该选择WCF

    b.当你想创建一个服务,可以用更快速的传输通道时,像TCP、Named Pipes或者甚至是UDP(在WCF4.5中),在其他传输通道不可用的时候也可以支持HTTP,你应该选择WCF。

    c.当你想创建一个基于HTTP的面向资源的服务并且可以使用HTTP的全部特征时(比如URIs、request/response头,缓存,版本控制,多种内容格式),你应该选择Web API

    d.当你想让你的服务用于浏览器、手机、iPhone和平板电脑时,你应该选择Web API

    引自:

二、使用C#实现上面的网络协议

1、下载代码:

  代码地址: C#_网络协议研究(原github Net5-Web-APIs-Demo与Net5-Web-APIs-TestTools项目)

  示例工程:Net5-Web-APIs-Demo(原 https://github.com/qq840937370/Net5-Web-APIs-Demo)

  测试工程:Net5-Web-APIs-TestTools(原 https://github.com/qq840937370/Net5-Web-APIs-TestTools)

TCP

整理完毕(独立端口)

UDP

整理完毕(独立端口)

WebSocket

整理完毕(作者技术太差,未实现WebApi中使用WebSocket协议;只能使用独立端口)

WebService

整理完毕

WCF

后期整理

WebAPI

整理完毕

MQTT

整理完毕(作者技术太差,未实现WebApi中使用MQTT协议,只能使用独立通道)

2、C#+TCP

  (1)文字讲解: ① C#-TCP协议通讯(一)-TCPClientHelper-Net5

          ② C#-TCP协议通讯(二)-处理TCP粘包与拆包

  (2)视频演示: C#-TCP与UDP通讯示例演示

3、C#+UDP

  (1)文字讲解: ① C#-UDP协议通讯(一)-UDPClientHelper_Net5

          ② C#-UDP协议通讯(二)-优化丢包问题

  (2)视频演示: C#-TCP与UDP通讯示例演示

4、C#+WebSocket

  (1)文字讲解:C#-WebSocket通讯_Net5

  (2)视频演示: C#-WebSocket通讯示例演示

5、C#+WebService

  (1)文字讲解:C#-WebService通讯_Net5

  (2)视频演示: C#-WebService通讯示例演示

6、C#+WCF

  (1)文字讲解:C#-WCF协议通讯_Net5

  (2)视频演示:后期整理

7、C#+WebAPI(微软)

  (1)文字讲解:C#-Http协议通讯(一)-目录

  (2)视频演示: C#-WebAPI调用示例演示

8、C#+MQTT

  (1)文字讲解:MQTT学习笔记(C#)-MQTTnet

  (2)视频演示: C#-MQTT调用示例演示

API调试工具推荐:

  (1) Postman

  (2) Apifox

  (3) Jmeter(阿帕奇)

  (4)本章中的调试工程

  (5)WebApi可以直接使用Swagger插件进行调试。

 SoapUI进行调试( 备份下载;密码g34j74)

三、常用通讯框架

1、HPSocket通讯框架

  (1)文字讲解: C#-网络通讯框架(一)-HPSocket

  (2)视频演示: C#-网络通讯框架_HPSocket TCP演示

2、DotNetty通讯框架

  (1)文字讲解:后补

  (2)视频演示:后补

3、SignalR通讯框架

  (1)文字讲解:C#-网络通讯框架(三)-SignalR(SignalRCore版)_Net7

  (2)视频演示:后补

四、补充:

1、Event select模型:

  select模型主要用于解决传统tcp通信线程过多的问题,而EventSelect模型则用于解决select模型的效率问题,因为select模型的内部是使用Sleep函数来阻塞线程,然后消耗系统时间片,从而降低了效率,而event+select模型则使用WSAEVENT的通知机制。

2、IOCP 通信模型:

  IOCP(I/O Completion Port),常称I/O完成端口。 IOCP模型属于一种 通讯模型,适用于能控制并发执行的高负载服务器的一个技术。 通俗一点说,就是用于高效处理很多很多的客户端进行数据交换的一个模型。或者可以说,就是能异步I/O操作的模型。优化线程池调度,提高CPU和内存缓冲的命中率。

作者:꧁执笔小白꧂