**数据通信模式:**分散式系统、集中式系统、分布系统式
在分布式系统的基础上进一步抽象出来的编程模型:
C/S模式(Client/Server):
主要特点:胖客户端应用程序变成架构,主要工作都是在客户端完成
C/S模式将网络事务处理分为两部分 客户端和服务端Client用于位用户提供操作,通识向网络提供请求服务, Server负责接受并处理客户端发出的服务请求,将处理结果返回客户端
编写服务端应用程序建议使用WCF,客户端建议使用WPF
P2P模式(peer to peer)
B/S(Browse/Server):B/S模式的应用程序也叫WEB应用程序
仅用HTTP(Hypertext Transfer Protocol,超文本传输协议)进行通信
优点:单台计算机可以访问认可Web服务器
采用三层架构:
TCP/IP四层协议中将五层结构中的物理层和数据链路层的功能全都放到了网络接口层中,五层结构主要是将OSI中的会话层和表示层放到了应用层中。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j5Cm0PdF-1587011641639)(https://img2018.cnblogs.com/blog/1941724/202002/1941724-20200229164237727-1018421075.png)]
数据链路层之间传输的是真
网络层发送的是数据报 给数据加上IP得知
传输层给数据加上端口号
应用层:负责应用程序之间的沟通,主要协议有简单SMTP(邮件传输)、FTP(文件传输协议)、Telnet(网络远程访问协议)
传输层:该层提供节点间的数据传送以及应用程序之间的通信服务,主要功能是格式化数据、数据确认和丢失重传等,把数据报加入传输数据并把它传送到下一层中。主要协议有:TCP(传输控制协议)、UDP(用户数据报协议) TCP是面向连接的 UDP无连接
网际层:主要功能是把数据报通过最佳路径送到目的端,不检查数据包是否被正常接收,核心协议——ip协议
网路接口层层:mac地址 完成点到点的运输 扶着接收ip数据报转交给下一层。
注意私有IP和公有IP的区别私有IP是一个封闭网络中对内部的主机进行分配的 , 公有ip是在全网范围内不同的主机所分配的标识
子网掩码:用于屏蔽IP地址的一部分以区分网络标识和主机标识
子网掩码把所有的网络位用1来表示,主机位用0来标识
- eg: 如果将子网掩码设置为255.255.255.0,则对于IP地址192.168.1.X,其网络标示部分为192.168.1;主机标示为:X
目前IP地址主要有两种编址方案:
IPV4编址方案:用点分十进制法共分为五类
A类:0.x.x.x~127.x.x.x (32位最高位为0)
B类:128.x.x.x~191.x.x.x (32位最高2位为10)
C类:192.x.x.x~223.x.x.x (32位最高3位为110)
D类:224.x.x.x~239.x.x.x(32位最高4位为1110)
E类:240.x.x.x~255.x.x.x(32位最高5位为11110)
A类:网络位·主机位·主机位·主机位 可容纳1600万台机器 A类中有一个特殊IP地址127.0.0.1用于本机的回路测试
B类:网络位·网络位·主机位·主机位 65535台机器
C类:网络位·网络位·网络位·主机位 255台机器
D类用于组播,E类用于科学研究。 TCP/IP协议规定用1110开始的地址都为多点广播地址
需要掌控的几个基本类:
IPAddress类 提供网际协议IP地址:
IPAdress位于System.Net命名空间下,提供对IP地址的转换和处理功能。
常用方法:Parse类将IP地址字符串类型转化为IPAddress类型:
Try
{
IPAddress ip = IPAddress.Parse("143.24.20.36");
}
Catch
{
MessageBox.Show("请输入正确的IP地址!");
}
如果IP地址字符串格式不正确,调用Parse方法时会出现异常。
利用实例的AddressFamily属性可以判断IP地址的类型
`IPAddress ip = IPAddress.Parse("::1");
if (ip.AddressFamily == AddressFamily.InterNetworkV6)
{
MessageBox.Show("这是IPv6地址");
}`
IPAdress类还提供了7个只读字段,分别代表程序中使用的特殊IP
包含IP地址和端口号的IPEndAddress类:
IPEndPoint描述应用程序连接到主机上的服务所需的主机和端口信息
public IPEndPoint(IPAddress address, int port);
第一个参数指定IP地址,第二个参数指定端口号。
eg:
IPAddress localAddress = IPAddress.Parse("192.168.1.1");
IPEndPoint iep = new IPEndPoint(localAddress, 65000);
string s1 = "IP地址为:" + iep.Address;
string s2 = "IP端口为:" + iep.Port;
为Internet或Intranet主机体统信息容器的IPHostEntry类:
IPHostEntry类将一个域名系统(DNS)的主机名与一组别名和一组匹配的IP地址关联。该类和一般Dns类一起使用。
DNS(域名系统)是用来将域名和IP地址进行映射转换的分布式数据库
常用属性:
IPAddress[] ips = Dns.GetHostEntry(“news.sohu.com”).AddressList;
方法名称 | 说明 |
---|---|
GetHosstAddressess | 返回指定主机的Internet协议IP地址,与该方法对应的还有异步方法 |
GetHostEntry | 将主机名或IP地址解析为IPHostEntry实例,与该方法对应的还有异步方法 |
GetHostName | 获取本地计算机的主机名 |
GetHostAddresses方法:
利用GetHostAddresses方法可以获取指定主机的IP地址,该方法返回一个IPAddress类型的数据
方法原型为 public static IPAddress[] GetHostAddress(string hostNameOr Address)
参数是要解析的主机名或IP地址
eg: IPAddress[] ip = Dns.HostAddress(“www.cctv.com”)
若hostNameOrAddress是IP地址,则直接返回此地址;若hostNameOrAddress是空字符串,则返回本机所有IPv4和IPv6地址。
GetHostEntry方法:
GetHostEntry方法可返回一个IPHostEntry实例,用于在DNS服务器中查询与某个主机名或IP地址关联的IP地址列表。
方法原型为:public static IPHostEntry GetHostEntry (string hostNameOrAddress)
参数中的hostNameOrAddress表示要解析的主机名或IP地址
当参数为空字符串时,返回本地主机的IPHostEntry实例。
GetHostName方法
该方法用于获取本机主机名
eg:
string hostname = Dns.GetHostName( );
**网络适配器:**又称网卡或网络接口卡(NIC),是连接计算机与网络的硬件设备。整理计算机上发往网线上的数据,并将数据分解为适当大小的数据包之后向网络上发送。
System.Net.NetworkInformation命名空间提供了:
NetworkInterface类:
NetworkInterface类提供了网络适配器的配置和统计信息。可以利用这个类检测本机有多少个网络适配器、网络适配器型号以及网络适配器的速度等。
本机的每一个网络适配器都包含一个NetworkInter对象与之相对应
可以通过静态方法获取网络适配器对象
NetworkInterface常用的属性:
属性及方法 | 说明 |
---|---|
Name属性 | 网络适配器名称 |
Speed属性 | 网络适配器速度 |
GetAllNetwordInterfaces方法 | 返回描述本地计算机上的所有网络适配器对象 |
GetIPProperties方法 | 返回描述此适配器配置的对象 |
GetIsNetworkAvailable方法 | 指示是否有任何可用的网络连接 |
GetPhysicalAddress方法 | 返回此适配器的媒体访问控制(MAC)地址 |
Supports方法 | 指示接口是否支持指定的协议(IPv4或IPv6) |
IPInterfaceProperties类
可以利用这个类检测本机所有网络适配器支持的各种地址。检测本机所有网络适配器支持的各种地址(IPv4和IPv6的网络适配器地址信息),如Dns服务器的IP地址、网关地址以及多路广播地址。
IPInterfaceProperties类是抽象类,不能实例化。可以通过NetworkInterface对象的GetIPProperties()获得其实例
NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
IPInterfaceProperties adapterProperties = adapters[0].GetIPProperties();
IPInterfaceProperties类常用的方法:
属性及方法 | 说 明 |
---|---|
AnycastAddresses属性 | 获取分配给此接口的任意广播P地址 |
DhcpServerAddresses属性 | 获取此接口的动态主机配置协议(DHCP)服务器的地址 |
DnsAddresses属性 | 获取此接口的域名系统(DNS)服务器的地址 |
DnsSuffix属性 | 获取与此接口关联的域名系统(DNS)后缀 |
GatewayAddresses属性 | 获取此接口的网关地址 |
MulticastAddresses属性 | 获取分配给此接口的多路广播地址 |
UnicastAddresses属性 | 获取分配给此接口的单播地址 |
GetIPv4Properties方法 | 获取此网络接口的Internet协议版本4(IPv4)配置数据 |
GetIPv6Properties方法 | 获取此网络接口的Internet协议版本6(IPv6)配置数据 |
IPGlobalProperties:
提供了本地计算机网络连接和统计数据的信息
检测网络流量时,首先调用IPGlobalProperties类提供的静态方法GetIPGlobalProperties得到IPGlobalProperties的实例,然后通过该实例的相关属性即可得到需要的信息。
eg: IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties()
名 称 | 说 明 |
---|---|
GetActiveTcpConnections | 返回有关本地计算机上的 Internet 协议版本 4 (IPV4) 传输控制协议 (TCP) 连接的信息 |
GetActiveTcpListeners | 返回有关本地计算机上的 Internet 协议版本 4 (IPV4) 传输控制协议 (TCP) 侦听器的终结点信息 |
GetActiveUdpListeners | 返回有关本地计算机上的 Internet 协议版本 4 (IPv4) 用户数据报协议 (UDP) 侦听器的信息 |
GetIPv4GlobalStatistics | 提供本地计算机的 Internet 协议版本 4 (IPv4) 统计数据 |
GetIPv6GlobalStatistics | 提供本地计算机的 Internet 协议版本 6 (IPv6) 统计数据 |
GetTcpIPv4Statistics | 提供本地计算机的传输控制协议**/Internet** 协议版本 4 (TCP/IPv4) 统计数据 |
GetTcpIPv6Statistics | 提供本地计算机的传输控制协议**/Internet** 协议版本 6 (TCP/IPv6) 统计数据 |
**TcpConectionInformation类:**提供本机传输控制协议(TCP)连接的信息
eg:
IPGlobalProperties properties =
IPGlobalProperties.GetIPGlobalProperties();
TcpConnectionInformation[] connections =
properties.GetActiveTcpConnections();
foreach (TcpConnectionInformation t in connections)
{
string str = "本机:" + t.LocalEndPoint.Address+
",远程:" + t.RemoteEndPoint.Address+
", 状态:" + t.State;
listBox1.Items.Add(str);
}