IP地址与端口
IP地址(Internet Protocol address)是分配给网络上设备(如计算机、路由器等)的标识符,用于在网络中唯一标识和定位设备。
IP地址分为IPv4和IPv6两种格式,其中IPv4是较为常见的形式,而IPv6则是为了解决IPv4地址空间不足而设计的新格式。
传统的 IPv4 地址,一个IP地址主要由两部分组成,用于识别该地址所属的网络号和指明网络内的主机号。这种划分是为了实现网络的分层结构和管理。
网络号(Network ID)
网络号用来标识一个设备所连接的网络。在IPv4地址中,网络号的划分是基于子网掩码(Subnet Mask)来确定的。子网掩码指定了IPv4地址中哪些位数用于网络号,哪些位数用于主机号。
例如,对于IPv4地址 192.168.1.1 和子网掩码 255.255.255.0:
IP地址 192.168.1.1 的网络号是 192.168.1
子网掩码 255.255.255.0 表示前24位用于网络号,后8位用于主机号。
主机号(Host ID)
主机号用于标识一个特定网络中的不同设备。在给定的网络中,主机号用剩余的位数来表示。
对于IP地址 192.168.1.1,主机号部分是 1
这意味着在以 192.168.1 作为网络号的网络中,主机号为 1 的设备是 192.168.1.1
IP地址的分类
在IPv4中,根据网络号的位数分配不同的IP地址类别,主要有以下几种类别:
A类地址:第一位固定为0,剩余的7位用于网络号,24位用于主机号。
B类地址:前两位固定为10,剩余的14位用于网络号,16位用于主机号。
C类地址:前三位固定为110,剩余的21位用于网络号,8位用于主机号。
IPv4地址
IPv4地址是32位长,通常用点分十进制表示,如 192.168.1.1。每个IPv4地址由4个8位组成,每个组的取值范围是0到255,共计约42亿个可能的地址。
IPv6地址
IPv6地址是128位长,通常用冒号分隔的十六进制表示,如 2001:0db8:85a3:0000:0000:8a2e:0370:7334。IPv6地址的结构不同于IPv4,其中一部分用于标识子网,一部分用于标识主机,但不像IPv4那样严格分成网络号和主机号。IPv6地址的数量非常庞大,远远超过IPv4,以应对互联网设备爆炸性增长和地址短缺的问题。
IP地址的作用
唯一标识:每个设备在网络中都有一个唯一的IP地址,通过IP地址可以确保数据包的准确发送和接收。
路由:IP地址帮助路由器和网络设备决定如何将数据包从源地址发送到目标地址。
通信:IP地址是网络通信的基础,通过IP地址可以进行设备之间的数据传输和通信。
端口
定义端口是为了解决与多个进程同时进行通信的问题。实际上相互完成通信功能的不是两台计算机,而是两台计算机上的进程,所以通信需要知道目标进程,端口号用于标识设备上具体应用程序或服务,可以利用端口号来区分哪个是目标进程。
一个IP地址可以有多个端口,每个端口都用于不同的应用程序或服务。端口号的范围是从0到65535,其中0到1023是系统保留端口,常用于一些众所周知的服务(如HTTP服务的80端口、FTP服务的21端口等),而大于1023的端口则可以由用户自定义使用。
IP地址转换相关类
两台计算机相互通信,必须知道对方的IP地址和端口号以及采用的网络通信协议。常见的几个基本类:提供网际协议IP地址的IPAddress类,包含IP地址和端口号的IPEndPoint类和为主机提供信息容器的IPHostEntry类, 都位于System.Net 命名空间。
IPAddress
try { IPAddress address = IPAddress.Parse("192.168.168.130");//若IP格式不正确会引发异常 } catch (Exception ex) { } IPAddress iPAddress; bool result = IPAddress.TryParse("192.168.168.130", out iPAddress);//即使IP格式不正确也不会引发异常,转换的地址为null.
IPAddress常见字段
IPAddress.Any:提供一个IPv4地址,用于表示任意本地主机的IP地址,IPAddress.Any 表示为 IPv4 中的 0.0.0.0,用于监听监听所有网络接口的连接请求。
IPAddress.Broadcast:表示广播地址,在 IPv4 中表示为 255.255.255.255,用于发送数据包到本地网络中的所有设备。
IPEndPoint
IPEndPoint用来表示网络上的端点(即IP地址和端口号的组合)的类。
int port = 8899;IPAddress ipAddress = IPAddress.Parse("192.16.21.250"); // 创建服务器端绑定的 IPEndPoint IPEndPoint localEndPoint = new IPEndPoint(ipAddress, port);
IPHostEntry
IPHostEntry 用于存储主机的 IP 地址信息,IPHostEntry 实例包含了一个主机的所有相关的 IP 地址信息,包括主机名、主机的多个 IP 地址(IPv4 和 IPv6)、别名等。
//获取百度服务器所以IP地址IPAddress[] ips = Dns.GetHostEntry("baidu.com").AddressList;//获取本机所有IPv4和IPv6地址ips = Dns.GetHostEntry(Dns.GetHostName()).AddressList;
域名解析
域名解析:将域名转为对应IP地址的过程称为域名解析,DNS(Domain Name System,域名系统)可以将域名和IP地址相互转换。
IPAddress[] ips = Dns.GetHostAddresses("baidu.com");//获取指定域名主机所有IP地址