C#网络程序开发学习(1) 网络程序开发基础知识

一、网络通信模型分类

1.分散式系统 Decentralized

用户只需要管理自己的计算机系统,各自独立的系统之间没有信息交换共享,所以有大量的数据冗余,并且存在数据不一致性的问题

2.集中式系统 Centralized

一台主计算机保存共享的所有数据,用户通过终端连接到这台主计算机上进行数据访问。所谓终端,包括显示器、键盘等,使用通信链路接收和发送数据

优点是资源集中,减小冗余,缺点是可靠性不如分散式系统,一旦主机出现故障,整个系统都会瘫痪,并且由于系统共享,系统响应较慢,不能满足特殊需要

3.分布式系统 Distributed

是集中式系统和分散式系统的混合,由多个连接起来的独立计算机组成

相对于计算机网络,分布式系统的资源是透明的,也就是说用户使用时无需知道该资源是本地的还是远程的,两者都可任意调用;计算机网络需要先知道资源的位置,和资源的主机建立连接后才能使用。

分布式系统具有高度内聚性,也就是高度自治

4.C/S模型 Client/Server

也就是客户机/服务器结构,当前大多数通信网络都是这种模型

C/S模型将网络事务处理分为客户端和服务端,客户端主要负责界面和业务逻辑,并且为用户提供网络请求服务的接口,服务器端一般是以数据处理能力较强的数据库管理系统作为后台,负责接收和处理用户对服务的请求,并且将服务透明地提供给用户

5.B/S模型 Browse/Server

浏览器/服务器模式

只安装、维护一个服务器Server,客户端采用浏览器运行软件,和C/S结构并没有本质区别,是一种特例,特殊在于这种模型必须使用HTTP

采用的是三层客户/服务器结构,在Server和Client增加了一层Middleware(中间件),将整个体系分为表示层、业务逻辑层、数据存储层,这三层相互独立,任何一层的改变不影响其它层的功能

中间件负责客户机和服务器,服务器之间的连接和通信

6.P2P模型 Peer to Peer

对等互连模型,各台主机具有相同功能,没有主从之分,都可以当服务器。缺点是可靠性低。

7.TCP/IP网络模型及协议 Transmission Control Protocol/Internet Protocol

是全球互联网工作的基础,将网络从上之下分为应用层、传输层、网络层、网络接口层

这是自顶向下的分层结构,每一层需要下一层所提供的服务来满足自己的需求,本层协议生辰多个数据封装在下一层协议的数据中进行传输,各层间的协议具有依赖关系

  • 应用层 : 最高层,提供面向用户的网络服务,负责应用程序之间的沟通,主要协议有:SMTP(简单邮件传输协议),FTP(文件传输协议),HTTP(超文本传输协议),DNS(域名系统),Telnet(网络远程访问协议)
  • 传输层 : 位于第三层,完成多台主机之间的通信,提供节点间的数据传送和应用程序间的通信服务。主要功能是数据格式化、数据确认、丢失重传等等。协议有TCP(传输控制协议),UDP(用户数据报协议)
  • 网络层 : 位于第二层,也成为网络互连层,或者IP层。提供基本的数据封包传送功能,本质是使用IP协议将不同的物理网络互联,组成一个传输IP数据报的虚拟网络,实现不同按网络的互联功能。除了IP协议外,还有ICMP(Internet控制报文协议),IGMP(Internet组管理协议)
  • 网络接口层 : 位于最底层,负责接受IP数据报并发送到物理网络,或者从网络上接受物理帧,抽取IP数据报转交给网络层

8.TCP

是一种面向连接的,可靠地,基于字节流的传输层通信协议。

面向连接->两个使用TCP的进程(服务器和客户端)在交换数据之前必须建立连接,然后才能传输数据,建立连接的时候采用C/S模式,主动发起连接的进程叫做客户端,被动等待链接的进程叫做服务器

TCP提供全双工的数据传输服务,所以建立了TCP连接的主机可以发送和接受数据

TCP面向字节流,意味着用户数据没有边界,也就是说,如果发送进程发送了两个512字节的数据,接收方可能接受的是两个512字节的数据,也可能接收到一个1024字节的数据,因此,如何判断数据边界必须由发送方和接收方共同约定

TCP接受到数据包后,将信息送到更高层的应用程序,例如FTP的服务程序和客户程序,应用程序处理完后,再将信息送回到传输层,再到网络层,最后到达接收方

TCP不支持广播和组播

9.UDP

和TCP同一层,但是提供的是无连接的、不可靠的传输层协议。支持广播和组播,在多媒体很有用

10.IP

网络层接收来自网络接口层的数据包,并将数据包发送到传输层,也将传输层的数据包传送到网络接口层。IP主要包括无连接数据报、数据报路由器选择、差错处理等功能

先不谈多么深奥,简而言之,Internet利用IP把世界上所有愿意接入Internet的计算机局域网络连接起来,使之能够互相通信

11.端口

主机之间的通信,实际上是主机之间的进程的通信,所以需要知道IP地址和端口号。IP地址只能标识到某一台主机,不能标识主机上的进程,端口(port)就是用来表示进程的

端口分为物理端口和逻辑端口

定义端口是为了解决与多个应用进程同时进行通信的问题,端口地址由两个字节的二进制数表示,范围是0-65535,端口分配规则如下

  • 端口0 不使用或者作为特殊使用
  • 端口1-255 保留给特定的服务
  • 端口256-1023 保留给其他服务
  • 端口1024-49999 用做任意客户的端口
  • 端口50000-65535 用做用户的服务器端口

一个完整的网络通信需要有两个进程组成,并且只能使用同一种高层协议,因此可以用五元组来标识,即协议、本地地址、本地端口号、远地地址、远地端口号

12.套接字 Socket

套接字是支持TCP/IP的基本操作单元,是不同主机之间的进程进行双向通信的端点,使用套接字区分不同应用程序进程间的连接

套接字包括发送方IP,发送方端口号,接收方IP,接收方端口号,协议五部分

13.基于Socket的网络进程通信机制

Socket屏蔽了TCP/IP协议栈的复杂性,在编程人员看来,两个网络进程间的通信实质上就是它们各自绑定的套接字之间的通信。所以通信的网络进程至少需要一对套接字,分别运行于服务端和客户端

服务器端需要

1.打开套接字

2.命名套接字并绑定

3.监听是否有用户连接

4.若有用户连接就发送/接受数据

5.关闭套接字

客户端需要

1.打开套接字

2.连接远程主机

3.发送/接受数据

4.关闭套接字

你可能感兴趣的:(C#网络编程)