网络协议与套接字.ppt

上传人:牧羊曲112 文档编号:6374065 上传时间:2023-10-21 格式:PPT 页数:46 大小:224.50KB
返回 下载 相关 举报
网络协议与套接字.ppt_第1页
第1页 / 共46页
网络协议与套接字.ppt_第2页
第2页 / 共46页
网络协议与套接字.ppt_第3页
第3页 / 共46页
网络协议与套接字.ppt_第4页
第4页 / 共46页
网络协议与套接字.ppt_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《网络协议与套接字.ppt》由会员分享,可在线阅读,更多相关《网络协议与套接字.ppt(46页珍藏版)》请在三一办公上搜索。

1、第2章 网络协议与套接字,2.1 网络协议简介2.2 IP地址转换与域名解析2.3 套接字2.4 网卡信息检测与网络流量检测2.5 字符编码与解码,2.1 网络协议简介,协议协议能确保网络上的计算机能相互识别对方的信息。计算机的通信协议精确地定义了计算机在彼此通信过程的所有细节。例如,每台计算机发送的信息格式和含义,在什么情况下应发送规定的特殊信息,以及接收方的计算机应做出哪些应答等等。TCP/IP是一组协议的总称(Transmission Control Protocol/Internet Protocol)网际协议(IP)对底层硬件设备进行封装,使之能适应各种网络硬件,确保任何一个网络只要

2、可以从一个地点向另一个地点传送二进制数据,就可以使用IP协议加入 Internet。,2.1 网络协议简介(续),传输控制协议(TCP)IP只是保证计算机之间可以发送和接收资料,但IP协议不能解决资料分组在传输过程中可能出现的问题。因此,计算机还需要安装TCP协议来提供可靠的并且无差错的通信服务。TCP被称作一种端对端协议。这是因为它为两台计算机之间的连接起了重要作用:当一台计算机需要与另一台远程计算机连接时,TCP会让它们建立一个连接、发送和接收资料以及终止连接。TCP能够自动适应网上的各种变化。即使在 Internet 暂时出现堵塞的情况下,TCP也能够保证通信的可靠。TCP协议具有自动调

3、整超时值的功能,能很好地适应 Internet 上各种变化,确保传输数值的正确。,2.1 网络协议简介(续),TCP/IP模型该模型将Internet分为五个层次,从高到低依次为:应用层、传输层、互联网层、网络接口层、物理层,2.1 网络协议简介(续),(1)应用层(第5层)定义了应用程序使用互联网的规范。如简单邮件传输(SMTP)文件传输协议(FTP)网络远程访问协议(Telnet)等。(2)传输层(第4层)提供节点间的数据传送服务,为两个用户进程之间建立、管理和拆除可靠而又有效的端到端连接。包括:传输控制协议(TCP)用户数据报协议(UDP),2.1 网络协议简介(续),(3)互连网层(第

4、3层)定义了互联网中传输的“信息包”格式,以及从一个用户通过一个或多个路由器到最终目标的信息包转发机制。(4)网络接口层(第2层)定义如何使用网络来传送数据。(5)物理层(第1层)对应于网络的基本硬件,即我们可以看得见的硬设备,如PC机、互连网服务器、网络设备等。该层对硬设备的电气特性作一个规范,使各设备能互相连接并兼容使用。,2.1 网络协议简介(续),IP地址:是给每个连接在因特网上的主机(或路由器)分配一个在全世界范围内惟一的标识符。一个IP地址主要由两部分组成:网络地址和主机地址。网络地址由因特网权力机构分配,主机地址由各个网络的管理员统一分配。IP地址编制方案有两种:IPV4和IPV

5、6IPV4:二进制表示共32位(4个字节)IPV6:二进制表示共128位(16个字节)在IPV4编制方案中,一般使用点分十进制表示法表示IP地址。例如:,2.1 网络协议简介(续),端口:IP地址仅仅能够具体标识到某台主机,而端口则表示与计算机上的哪个进程通信。根据IP地址找到是与哪台机器通信,根据端口号找到是与该机器的哪个进程通信。(一个进程可能会使用多个端口)端口地址的范围是十进制的065535,2.2 IP地址转换与域名解析,2.2.1 IPAddress类 提供了对IP地址的转换、处理 2.2.2 IPEndPoint类 IP地址和端口的组合 2.2.3 IPHostEntry类 将域

6、名系统与一组匹配的IP地址关联在一起。2.2.4 Dns类 提供域名解析及其与IP地址之间的相互转换功能,2.2.1 IPAddress类,IPAddress类(System.Net命名空间下):一般使用IPAddress的Parse方法将IP地址字符串转换为IPAddress的实例。例如:IPAddress ip=IPAddress.Parse(“192.168.1.1”);属性Any 提供一个IPv4地址,指示服务器应侦听所有网络接口上的客户端活动。(等效于)Broadcast 提供IPv4广播地址(等效于)Loopback 表示IPv4回送地址(等效于)None 表示Socket不应侦听

7、客户端活动(不使用任何网络接口)。IPv6Any 提供可用的IPv6地址IPv6Loopback 表示IPv6回送地址IPv6None 提供不使用任何网络接口。,2.2.2 IPEndPoint类,IPEndPoint类包含了连接到主机上的服务所需的IP地址和端口信息。IPEndPoint类常用的构造函数为:public IPEndPoint(IPAddress,int);其中第一个参数指定IP地址,第二个参数指定端口号。,2.2.3 IPHostEntry类,IPHostEntry类的实例对象中包含了与主机相关的信息。常用属性有:(1)AddressList属性:获取或设置与主机关联的IP地

8、址列表,是一个IPAddress类型的数组,包含了指定主机的所有IP地址;(2)HostName属性:包含了服务器的主机名。在Dns类中,有一个专门获取IPHostEntry对象的方法。例如:IPAddress ips=Dns.GetHostEntry(“http:/).AddressList;,2.2.4 Dns类,DNS(Domain Name System,域名系统)提供了一系列静态的方法,用于获取提供本地或远程域名等功能,常用方法有:(1)GetHostAddresses方法 获取指定主机的IP地址,返回一个IPAddress类型的数组。格式为:public static IPAddr

9、ess GetHostAddresses(string hostNameOrAddress);例如:IPAddress ips=);注意:如果hostNameOrAddress是IP地址,则不查询DNS服务器,直接返回此地址。,2.2.4 Dns类(续),(2)GetHostEntry方法 在DNS服务器中查询与某个主机名或IP地址关联的IP地址。当参数为空字符串时,此方法返回本地主机的IPv4地址和主机名。例如:IPHostEntry host=Dns.GetHostEntry();listBox1.Items.AddRange(host.AddressList);/本机所有IPv4地址li

10、stBox1.Items.Add(host.HostName);/本机主机名(3)GetHostName方法获取本机主机名。例如:string hostname=Dns.GetHostName();,2.2.4 Dns类(续),【例 2-1】IPAddress类、Dns类、IPHostEntry类和IPEndPoint类的使用方法。,2.3 套接字,套接字是支持TCP/IP协议的网络通信的基本操作单元。可以将套接字看作不同主机间的进程进行双向通信的端点,它构成了单个主机内及整个网络间的编程界面。套接字通常和同一个域中的套接字交换数据,各种进程使用这个相同的域互相之间用Internet协议进行通

11、信。用C#编写符合标准的网络应用程序时,应该尽可能使用TcpListener类、TcpClient类、UDPClient类或其它对应类。而不是直接用Socket类。用C#编写非标准的网络应用程序时,只能使用Socket类。,2.3.1 同步套接字与异步套接字,套接字的类型有:流式套接字:提供了面向连接的、可靠的、数据无错并且无重复的数据发送服务,而且接收数据的顺序和发送数据的顺序是相同的。数据报套接字:提供了面向无连接的服务,它以独立的数据包形式发送数据(数据包长度不能大于32KB),不提供正确性检查,也不保证各数据包的发送顺序和接收顺序相同,因此,可能出现数据的重发、丢失等现象。原始套接字:

12、用于直接访问协议的较低层。常用于检验新的协议实现或访问现有服务中配置的新设备,一般不提倡直接使用原始套接字。,2.3.1 同步套接字与异步套接字(续),使用套接字处理数据有两种基本模式:同步套接字:在通过Socket进行连接、接收、发送操作时,客户机或服务器在接受对方响应前会处于阻塞状态,即一直等到接受对方请求后才继续执行下面的语句。同步套接字适用于对数据处理用时不多的场合。异步套接字:通过Socket进行连接、接收或发送操作时,客户端或服务器不会处于阻塞方式,而是利用callback机制进行连接、接收以及发送处理,这样就可以在调用发送或接收的方法后直接返回,并继续执行下面的语句。异步套接字适

13、用于进行大量数据处理或者用时较多的场合。,2.3.2 Socket类,Socket类包含在命名空间中。一个Socket实例包含了一个本地或者一个远程端点的套接字信息。使用Socket类编程,由于很多细节都需要自己考虑,相对来说复杂一些,易出错。一般对套接字编程比较熟悉的人,或者使用非标准协议(自定义的新协议)进行编程的时候,才使用Socket类。Socket类的构造函数为:public Socket(AddressFamily addressFamily,/网络类型 SocketType socketType,/套接字类型 ProtocolType protocolType);/使用的协议,2

14、.3.2 Socket类(续),Socket构造函数的三个参数中,对于网络上的IP通信来说,AddressFamily总是使用AddressFamily.InterNetwork枚举值。而SocketType参数则与ProtocolType参数配合使用,不允许其他的匹配形式,也不允许混淆匹配。下表列出了可用于IP通信的组合。,2.3.3 面向连接的套接字编程,2.3.3 面向连接的套接字编程(续),服务器端部分代码举例:IPHostEntry local=Dns.GetHostByName(Dns.GetHostName();IPEndPoint iep=new IPEndPoint(loca

15、l.AddressList0,1180);Socket localSocket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);localSocket.Bind(iep);locatSocket.Listen(10);Socket clientSocket=localSocket.Accept();,2.3.3 面向连接的套接字编程(续),客户端部分代码举例:IPAddress remoteHost=IPAddress.Parse(192.168.0.1);PEndPoint iep=new I

16、PEndPoint(remoteHost,1180);Socket localSocket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);localSocket.Connect(iep);关闭连接的典型用法:sock.Shutdown(SocketShutdown.Both);sock.Close();,2.3.4 无连接的套接字编程,2.3.5 对套接字封装后的类,TcpClient类和TcpListener类TcpClient类是与TCP客户端相关的类,而TcpListener则用于在服务

17、器端监听(Listen)客户端传来的连接请求。两个类均对流式套接字进行了封装,简化了编程难度。传输的数据可以使用.NET Framework中的流处理技术进行读写。UdpClient类 对数据报套接字进行了封装该类使用UdpClient类的Send方法向网络发送数据,使用Receive方法接收传入的数据文报。,2.4 网卡信息检测与网络流量检测,命名空间提供了:对本机网卡相关信息的检测比如本机有多少网卡,网卡名称、速度、硬件地址等。对本机网络流量的检测比如网络连接配置、接收与发送的数据包等。Ping类检测本机是否可访问网络上的其它计算机。这些类在高级网络信息处理中很有用。,2.4.1 获取网卡

18、信息,NetworkInterface类NetworkInterface类提供了网络适配器的配置和统计信息。可以利用这个类检测本机有多少个网络适配器、网络适配器型号以及网络适配器的速度等。IPInterfaceProperties类可以利用这个类检测本机所有网络适配器支持的各种地址PhysicalAddress类提供了网络适配器的媒体访问控制(MAC)地址。,2.4.1 获取网卡信息(续),NetworkInterface类常用的属性和方法,2.4.1 获取网卡信息(续),IPInterfaceProperties类(抽象类)常用的属性和方法,2.4.1 获取网卡信息(续),【例2-2】获取本

19、机网络适配器的个数、型号、速度、MAC地址以及DNS服务器信息。,2.4.2 获取网络流量信息,IPGlobalProperties类 提供本地计算机网络连接相关的信息。例如网络连接配置、接收与发送的数据包等。一般用法:using System;using;IPGlobalProperties properties=IPGlobalProperties.GetIPGlobalProperties();IPGlobalStatistics ipstat=properties.GetIPv4GlobalStatistics();listBox1.Items.Add(接收数据包数:+ipstat.R

20、eceivedPackets);listBox1.Items.Add(转发数据包数:+ipstat.ReceivedPacketsForwarded);listBox1.Items.Add(传送数据包数:+ipstat.ReceivedPacketsDelivered);listBox1.Items.Add(丢弃数据包数:+ipstat.ReceivedPacketsDiscarded);,2.4.2 获取网络流量信息(续),TcpConnectionInformation类提供有关本地计算机上的传输控制协议(TCP)连接的信息。IPGlobalProperties properties=IP

21、GlobalProperties.GetIPGlobalProperties();TcpConnectionInformation connections=properties.GetActiveTcpConnections();foreach(TcpConnectionInformation t in connections)string str=;str+=Local endpoint:+;str+=,Remote endpoint:+;str+=,+t.State;listBox1.Items.Add(str);,2.4.2 获取网络流量信息(续),【例2-3】检测本机网络流量以及TCP

22、连接信息。,2.4.3 Ping类,可以使用Ping类检测本机是否可访问网络上的其它计算机。类似于Ping.exe命令行工具。该类提供的Send和SendAsync方法将Internet控制消息协议(ICMP)回送请求消息发送到远程计算机并等待来自该计算机的ICMP回送答复消息。与Ping类一起使用的类型有:IPStatus枚举:定义描述 ICMP 回送请求消息结果的状态代码 PingOptions类:控制如何传输 Ping 数据包(见下页)PingReply类:提供有关 Send 或 SendAsync 操作的状态及产生的数据的信息,2.4.3 Ping类(续),PingOptions类:控

23、制如何传输 Ping 数据包。与此类相关的属性有:Ttl 属性为 Ping 类发送的数据包指定生存时间。此值指示在丢弃 Ping 数据包之前可以转发此数据包的路由节点数。如果要测试将数据包从源计算机发送到目标计算机所需的转发数(也称为跃点),设置此选项很有用。DontFragment 属性控制是否可将发送到远程主机的数据分成多个数据包。如果要测试用于传输数据包的路由器和网关的最大传输单元(MTU),此选项很有用。,2.4.3 Ping类(续),用法string ipString=127.0.0.1;Ping pingSender=new Ping();PingOptions options=n

24、ew PingOptions();options.DontFragment=true;byte buffer=Encoding.ASCII.GetBytes(data);int timeout=120;PingReply reply=pingSender.Send(ipString,timeout,buffer,options);if(reply.Status=IPStatus.Success)listBox1.Items.Add(Address:+();listBox1.Items.Add(RoundTrip time:+reply.RoundtripTime);listBox1.Items

25、.Add(Time to live:+);listBox1.Items.Add(Buffer size:+);,2.4.3 Ping类(续),【例2-4】Ping类的用法。,2.5 字符编码与解码,编码:是指将一组字符转换为一个字节序列的过程。解码:将一个编码字节序列转换为一组字符的过程。为什么需要编码和解码因为通过网络传递的数据必须是字节序列。常用编码ASCII码:每个字符均为7位,主要针对英文。UNICODE码:每个字符均占两个字节。UTF码:通用转换码,主要解决编码容量问题,常用有(1)UTF-8:用1到4个字节编码一个UNICODE字符(2)UTF-16:将每个字符编码为1至2个16位

26、整数组成的序列(3)UTF-32:将每个字符编码为一个32位整数 国标码:常用有 GB2312(1980年公布,提供65535个汉字)GB18030(2000年公布,提供27484个汉字),2.5.1 Encoding类,Encoding类位于System.Text命名空间中。,2.5.1 Encoding类(续),用法举例:Encoding GB2312=Encoding.GetEncoding(GB2312);Encoding GB18030=Encoding.GetEncoding(GB18030);/将Unicode字符串转换为UTF8字符串:string unicodeString=

27、该字符串包含unicode字符Pi(u03a0);Encoding utf8=Encoding.UTF8;Encoding unicode=Encoding.Unicode;/将字符串转换为字节数组byte unicodeBytes=unicode.GetBytes(unicodeString);/将unicode字节数组转换为utf8字节数组byte utf8Bytes=Encoding.Convert(Encoding.Unicode,Encoding.UTF8,unicodeBytes);/将字节数组转换为字符串string utf8String=Encoding.UTF8.GetStr

28、ing(utf8Bytes);,2.5.2 Encoder类和Decoder类,Encoder类:将一组字符转换为一个字节序列。举例:Char chars=new Char u0023,/#u0025,/%u03a0,/Piu03a3/Sigma;/显示原始Unicode字符串listBox1.Items.Add(new string(chars);Encoder encoder=Encoding.UTF8.GetEncoder();Byte bytes=new Byteencoder.GetByteCount(chars,0,chars.Length,true);encoder.GetByt

29、es(chars,0,chars.Length,bytes,0,true);/显示转换后的UTF8字符串listBox1.Items.Add(Encoding.UTF8.GetString(bytes);,2.5.2 Encoder类和Decoder类(续),Decoder类:解码,将一个编码字节序列转换为一组字符。举例:byte bytes1=0 x20,0 x23,0 xe2;byte bytes2=0 x98,0 xa3;char chars=new char3;Decoder d=Encoding.UTF8.GetDecoder();int charLen=d.GetChars(byt

30、es1,0,bytes1.Length,chars,0);/The value of charLen should be 2 now.charLen+=d.GetChars(bytes2,0,bytes2.Length,chars,charLen);foreach(char c in chars)Console.Write(U+0:X4,(ushort)c);,2.6 网络流,流(stream)是对串行传输的数据(以字节为单位)的一种抽象表示,底层的设备可以是文件、外部设备、主存、网络套接字等。流有三种基本的操作:写入、读取和查找。若数据从内存缓冲区传输到外部源,这样的流叫作“写入流”。若数据

31、从外部源传输到内存缓冲区,这样的流叫作“读取流”。在名称空间中有一个NetworkStream类,用于通过网络套接字发送和接收数据。NetworkStream类支持对网络数据的同步或异步访问,它可被视为在数据来源端和接收端之间架设了一个数据通道.,对于NetworkStream流,写入操作是指从来源端内存缓冲区到网络上的数据传输;读取操作是从网络上到接收端内存缓冲区(如字节数组)的数据传输。NetworkStream的用法,2.6 网络流(续),本章作业及实验,作业:P21 第1题、第2题(单号下次交作业)实验:做实验一,设计型实验指导,第2次指导 MultiDraw.rar 代码讲解:如何绘制矩形如何绘制文字如何绘制曲线,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号