一、OSI 参考模型
(1)物理层
作为原始的位流或电气处理。
(2)数据链路层
负责建立、维持和释放数据链路的连接。
(3)网络层
选择合适的网间路由和交换结点,以确保数据及时传送。网络层将数据链路层提供的帧组织成数据包,包中封装有网络层包头、其中含有逻辑地址信息(源站点和目的站点地址的网络地址)
(4)传输层
,为两个端系统(也就是源站和目的站)的会话层之间,提供建立、维护和取消传输连接的功能,并负责可靠地传输数据。
(5)会话层
提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制。
(6)表示层
提供格式化的表示和转换数据服务。
(7)应用层
提供网络与用户应用软件之间的接口服务。
二、TCP/IP 模型
(1)链路层
负责接收 IP 数据报并通过网络发送到网络传输媒体上。
(2)网络层
把分组发往目标网络或主机。
(3)传输层
TCP 和 UDP 协议。
(4)应用层
超文本传输协议(HTTP)、简单网络管理协议(SNMP)、文件传输协议(FTP)、简单邮件传输协议(SMTP)、域名系统(DNS)、远程登录协议(Telnet)。
三、IP 地址
A 类: 0 ******* xxxxxxxx xxxxxxxx xxxxxxxx
B 类:10 ****** ******** xxxxxxxx xxxxxxxx
C 类:110 ***** ******** ******** xxxxxxxx
D 类:1110 xxxx xxxxxxxx xxxxxxxx xxxxxxxx
E 类:1111 xxxx xxxxxxxx xxxxxxxx xxxxxxxx
A 类地址: 第一个字节为网络地址,后三个字节为主机地址。
B 类地址: 前两个字节为网络地址,后两个字i节为主机地址。
C 类地址: 前三个字节为网络地址,最后一个字节为主机地址。
D 类地址: 多播地址,用于多播通信。只能作为目的地址,不能作为源地址。
E 类地址: 实验性地址,一般不会用到。
网路地址: 主机地址为0。例如,B类IP 地址为 175.22.10.48,则网络地址为175.22.0.0。
广播地址: 在 A、B、C 类地址中,主机号全为 1 的地址为广播地址。
回送地址: 首字节数值为127的地址是一个保留地址。用于网络测试或本机进程间通信,数据报不输出线路上。
1、子网与掩码
主机地址分为若干个子网,分为子网地址和主机地址。对于网路地址和子网地址的地址掩码位为1。对于主机地址的地址掩码位为0.
2、端口号
(1)全局分配。
(2)本地分配。
TCP/IP 端口号分为:
(1)服务器端使用的端口号。
服务端的端口号又分为:公认端口号和系统端口号。端口号范围:0~1023
注册端口号,范围:1024~49151。
(2)客户端使用的端口号
动态和或私有端口。端口号范围:49152~65535
四、数据封装与解封装
数据封装: 主机通过网络向其他设备传输数据时,首先要对数据进行打包。
每一层都有各自的协议数据单元(Protocol Data Units,PDU)。
解封装: 目的主机收到一个以太网数据帧时,数据就开始从协议栈中有底向上升,同时去掉各层协议加上的报文首部。每层协议都要去检查报文首部中的协议标识,以确定接收数据的上层协议。
五、.NET 中的网络组件
提供两个命名空间:System.NET 和 System.Web。
表-网络组件命名空间及其功能
命名空间 | 功能概述 |
---|---|
System.Net | 为当前网络上流行的多种协议提供一个统一、简单的编程接口。 |
System.Net.Cache | 定义类型和枚举,用于使用 WebRequest 和 HttpWebRequest 类获取的资源定义缓存策略 |
System.Net.Configuration | 所含类提供以编程方式访问和更新 System.Net 命名空间的配置设置的功能 |
System.Net.Mail | 用于将电子邮件发送到简单邮件传输协议(SMTP)服务器进行传送的类 |
System.Net.Mime | 包含用于表示多用途 Internet 邮件交换(MINE)标头的类型。这些类型与 System.Net.Mail 命名空间中的类型一起使用,用于在使用 SmtpClient 类发送电子邮件时指定 Content-Type、Content-Disposition 和 Content-transfer-Encoding 标头 |
System.Net.NetworkInformation | 提供对网络流量数据、网络地址信息和本地计算机的地址更改通知的访问。该命名空间还包含实现 Ping 实用工具的类。您可以使用 Ping 和相关的类检查是否可通过网络访问某台计算机 |
System.Net.Security | 为网络流在主机间的传输提供了安全机制 |
System.Net.Sockets | 为需要严格控制网络访问的开发人员提供 Window 套接字(Windsock)接口的托管实现 |
System.Web | 包含启用浏览器/服务器通信的类和接口。这些命令空间类用于管理到客户端的 HTTP 输出(HttpResponse)和读取 HTTP 请求(HttpRequest)。附加的类则提供了一些功能,用于服务器端的实用程序以及进程、cookie 管理、文件传输、异常信息和输出缓存控制 |
System.Web.UI | 包含创建 Web 窗体页的类,包括 Page 类和用于创建 Web 用户界面的其他标准类 |
System.Web.UI.HtmlControls | 包含创建 ASP.NET Web 服务器控件的类。当添加到 Web 窗体时,这些控件将呈现浏览器特定的 HTML 和脚本,用以创建与设备无关的 Web 用户界面 |
System.Web.Mobile | 包含生成 ASP.NET 移动 Web 应用程序所需的核心功能,包括身份验证和错误处理 |
System.Web.UI.MobileControls | 包含一组 ASP.NET 服务器控件,这些控件可以针对不同的移动设备呈现应用程序 |
System.Web.Services | 包含能够生成和实用 XML Web services 的类,这些服务是驻留在 Web 服务器中的可编程实体,并通过标准 Internet 协议公开 |
表- System.NET 命名空间的主要类组成及功能
类名 | 功能概述 |
---|---|
DNS | 提供简单域名解析功能 |
DnsPermission | 控制对网络 DNS 服务器的访问 |
EndPoint | 用于标识网络地址 |
FileWebRequest | 为 WebRequest 类提供了一个文件系统实现 |
FileWebResponse | 为 WebResponse 类提供了一个文件系统实现 |
Http Version | 定义了由 HttpWebRequest 和 HttpWebResponse 类支持的 HTTP 版本号 |
HttpWebRequest | 为 WebRequest 类提供了特定于 HTTP 的实现 |
HttpWebReponse | 为 WebResponse 类提供了特定于 HTTP 的实现 |
IPAddress | 提供了 IP 地址 |
IPEndPoint | 以 IP 地址和端口号的形式代表一个网络终端 |
IPHostEntry | 为 Internet 主机地址信息提供了容器类 |
ProtocolViolationException | 当实用网络协议时出现错误,则将抛出由该类所代表的异常 |
SocketAddress | 代表一个套接字地址 |
SocketPermission | 控制在传输地址上生成或接收连接的权限 |
SocketPermissionAttribute | 允许将 SocketPermission 的安全动作,施用于实用声明安全性的代码 |
WebClient | 为客户与 Internet 资源间的数据发送和接收提供了通用方法 |
WebException | 当通过可插入协议访问网络时出现错误,则将抛出由该类代表的异常 |
WebProxy | 包含 WebRequset 类的 HTTP 代理 |
WebRequest | 代表一个到 URI 的请求 |
WebResponse | 代表来自 URI 的响应 |
表-System.Net.Sockets 命名空间的主要类组成功能
类名 | 功能概述 |
---|---|
LingerOption | 包含套接字延迟时间的信息,即当数据仍在发送时,套接字应在关闭后保持的时间 |
MulticastOption | 包含了 IP 多点传送数据包的选项值 |
NetworkStream | 为网络访问提供了基础数据流 |
Socket | 实现了 Berkeley 套接字接口 |
SocketException | 当出现套接字错误时,将抛出由该类所代表的异常 |
TCPClient | 为 TCP 网路服务提供了客户链接 |
TCPListener | 用以监听 TCP 客户连接 |
UDPClient | 用于提供 UDP 网络服务 |
表-System.Web 命名空间的主要类组成及功能
类名 | 功能概述 |
---|---|
HttpApplication | 定义了 ASP.NET 应用程序中所有应用程序对象的通用方法、属性和事件 |
HttpApplicationState | 允许 ASP.NET 应用程序中的多个会话和请求共享全局信息 |
HttpBrowserCapabilities | 允许服务器收集客户端浏览器的性能信息 |
HttpContext | 封装了所有关于 HTTP 请求的特定信息 |
HttpException | 提供了生成 HTTP 异常的手段 |
HttpFileCollection | 为由用户上传的文件提供访问和组织手段 |
HttpParseException | 为生成 HTTP 解析异常提供了手段 |
HttpPostedFile | 提供了访问由客户上传的文件的方式 |
HttpRequest | 允许 ASP.NET 读取在 Web 请求中由客户发送的 HTTP 值 |
HttpResponse | 封装了来自一个 ASP.NET 操作的 HTTP 响应信息 |
HttpUtility | 为处理 Web 请求时的 URL 编码和解码提供了方法 |
ProcessInfo | 提供了当前运行的进程信息 |
六、网络编程中的常用类
1、IP 地址类
表- IPAddress 类属性和方法
属性、方法名 | 说明 |
---|---|
Any | 只读属性,提供了一个 IP 地址,标识服务器应该监听所有网络接口上的客户活动 |
Broadcast | 只读属性,提供 IP 广播地址,等价于 255.255.255.255 |
Loopback | 只读属性,提供 IP 回送地址,等价于 127.0.0.1 |
None | 只读属性,提供一个 IP 地址,标识不应使用网络接口 |
Address | 获取或设置一个 IP 地址 |
AddFamily | 指定 IP 地址的地址族 |
Equals() | 比较两个 IP 地址 |
GetHashCode() | 获取 IP 地址哈希值 |
HostToNetworkOrder() | 将主机字节顺序值转换为网络字节顺序值 |
Parse() | 将 IP 地址字符串转换为 IP 地址实例 |
2、IPHostEntry 类
为 Internet 主机地址信息提供容器的累,它将 DNS 主机名与一个别名数组和匹配的 IP 地址数组相关。通常 IPHostEntry 类作为 Dns 类的辅助类使用。
该类的属性:
- Aliases 属性: 获取或设置与主机相关的别名清单。
- AddressList 属性: 获取或设置与主机相关的 IP 地址。其值为 IPAddress 类型的数组,其中包含的 IP 地址用于解析 Aliases 属性中的主机名。
- HostName 属性: 获取或设置主机的 DNS 名。包含服务器的基础主机名,如果服务器的 DNS 项定义了附加别名,则可通过 Aliases 属性使用他们。
3、IPEndPoint 类
以 IP 地址和端口号的形式代表一个网络终端。该类中包含应用程序连接到主机服务时需要的主机和端口信息,通过组合主机的 IP 地址和端口号构成服务的一个连接点。
表- IPEndPoint 类属性和方法
属性、方法名 | 说明 |
---|---|
Address | 获取或设置 EndPoint 的 IP 地址 |
AddressFamily | 获取 IP 地址族 |
Port | 获取或设置 EndPoint 的 TCP 端口号 |
MaxPort | 用于指定可被赋予 Port 属性的最大值 |
MinPort | 用于指定可被赋予 Port 属性的最小值 |
Create() | 调用 Create() 方法,以根据套接字地址创建 EndPoint |
Serialize() | 调用 Serialize() 方法,以将 EndPoint 信息序列化到一个 SocketAddress 实例中 |
4、域名解析类
Dns 类是一个静态类,它提供了有关域名解析的操作,它将从网路主机域名系统中获取 IP 地址和主机名、WWW 域名的对应关系。它返回一个 IPHostEntry 对象以保存结果。如果返回值是多个信息,IPHostEntry 将返回主机的多个地址和别名。
表-Dns 类方法
属性、方法名 | 说明 |
---|---|
BeginGetHostByName() | 开始由主机名获得 IPHostEntry 信息,异步操作 |
BeginGetHostEntry() | 开始由 IP 地址或主机名获得 IPHostEntry 信息,异步操作 |
BeginResolve() | 开始请求域名解析,由 WWW 名获得 IPHostEntry 信息,异步操作 |
EndGetHostByName() | 终止对 DNS 信息的异步请求(与 BeginGetHostByName()对应) |
EndGetHostEntry() | 终止对 DNS 信息的异步请求(与 BeginGetHostEntry()对应) |
EndResolve() | 终止对 DNS 信息解析的异步请求 |
GetHostByAddress() | 根据指定 IP 地址创建一个 IPHostEntry 实例 |
GetHostByName() | 根据主机名获取一个 IPHostEntry 实例 |
GetHostEntry() | 根据 IP 地址或主机名获取一个 IPHostEntry 实例 |
GetHostNamr() | 获取本地计算机的主机名 |
Resolve() | 将 DNS 主机名或 IP 字符串转换为 IPHostEntry 实例 |
5、DnsPermission 类
控制对网络 DNS 服务器的访问。默认情况下,所有本地和 Internet 域中的应用程序都能访问 DNS 服务,并且对 Internet 应用程序无 DNS 许可。
表-DnsPermission 类方法
属性、方法名 | 说明 |
---|---|
Copy() | 创建当前实例的拷贝 |
FromXml() | 根据 XML 编码重构 DnsPermission 实例 |
Intersect() | 创建当前 DnsPermission 实例与指定 DnsPermission 实例的交集 |
IsSubsetOf() | 确定当前 DnsPermission 实例是否为指定 DnsPermission 实例的子集 |
IsUnrestricted() | 检查对象的许可状态 |
ToXml() | 使用当前的 DnsPermission 实例及其状态创建 XML 编码 |
Union() | 创建当前 DnsPermission 实例与指定 DnsPermission 实例的并集 |
类的代码示例
static void Main(string[] args)
{
string strHostName;
//获取本地计算机名称
strHostName = Dns.GetHostName();
Console.WriteLine("本地计算机名:" + strHostName);
//由本地计算机名称获取本机 IP 地址
IPHostEntry ipEntry = Dns.GetHostEntry(strHostName);
IPAddress[] addr = ipEntry.AddressList;
//显示本地 IP 地址
for (int i = 0; i < addr.Length; i++)
{
Console.WriteLine("IP 地址[{0}]: {1}", i, addr[i].ToString());
Console.WriteLine("地址类型[{0}]: {1}", i, addr[i].AddressFamily.ToString());
}
Console.ReadKey();
}
输出结果:
本地计算机名:DESKTOP-H970UHE
IP 地址[0]: fe80::658c:f0d9:7857:f6e7%9
地址类型[0]: InterNetworkV6
IP 地址[1]: 192.168.0.105
地址类型[1]: InterNetwork