计算机网络01
计算机网络01
1 网桥模式、路由模式、NAT模式、旁路模式
1.1 网桥模式
网桥模式是计算机网络中的一种网络设备工作模式,它可以连接多个局域网(LAN)并转发数据帧以实现不同网段之间的通信。网桥是一个二层设备,它在物理层和数据链路层工作,可以识别数据帧的目的MAC地址,并将数据帧转发到正确的目标端口。网桥可以减少网络中的广播风暴,提高网络性能和安全性。
在网桥模式中,多个局域网连接到网桥的不同端口上,网桥通过学习每个端口上连接的设备的MAC地址,建立一个MAC地址表,从而可以转发数据帧到正确的目标端口。当数据帧到达网桥时,网桥会检查数据帧的目的MAC地址,并将数据帧转发到MAC地址表中对应的端口上,如果该地址不在MAC地址表中,则将数据帧广播到所有端口上,以便学习新的MAC地址。
1.2 路由模式
路由模式是计算机网络中的一种网络设备工作模式,它可以连接不同的网络,并通过转发IP数据包来实现跨网络的通信。路由器是一个三层设备,它在网络层工作,可以识别数据包的目的IP地址,并将数据包转发到正确的目标网络。
在路由模式中,多个网络连接到路由器的不同接口上,路由器通过学习每个接口连接的网络的IP地址,建立一个路由表,从而可以转发数据包到正确的目标网络。当数据包到达路由器时,路由器会检查数据包的目的IP地址,并将数据包根据路由表转发到正确的接口上,如果该地址不在路由表中,则将数据包发送到默认路由或者丢弃该数据包。
1.3 NAT模式
NAT(网络地址转换)模式是计算机网络中的一种网络设备工作模式,它可以将私有网络内部的IP地址转换为公网IP地址,从而实现私有网络与公网之间的通信。NAT是一种在网络层上进行地址转换的技术,通常被用于家庭或企业内部的局域网中,以便让内部的设备访问互联网。
在NAT模式中,NAT设备连接到公网上,并分配一个公网IP地址,内部设备连接到NAT设备的私有网络上,通过NAT设备进行地址转换。当内部设备向公网发送数据时,NAT设备会将数据包的源IP地址改为NAT设备的公网IP地址,并分配一个唯一的端口号,从而实现与公网的通信。当公网向内部设备发送数据时,NAT设备会将数据包的目的IP地址和端口号转换为内部设备的IP地址和端口号,从而实现与内部设备的通信。
NAT模式可以实现多个内部设备共享一个公网IP地址,从而节省公网IP地址的使用。此外,NAT模式还可以提高网络的安全性,因为NAT设备可以过滤和阻止不合法的数据包,从而保护内部网络不受来自公网的攻击。
需要注意的是,NAT模式会引入一定的网络延迟和复杂性,因为数据包需要经过NAT设备的处理和转换。此外,在某些情况下,NAT模式可能会影响某些网络应用程序的正常运行,例如P2P应用程序或者视频会议应用程序,因为这些应用程序需要直接访问设备的IP地址。
1.4 旁路模式
旁路模式是计算机网络中的一种网络设备工作模式,它是指网络设备在处理数据流时,将数据流旁路到专门的处理单元进行处理,同时保证数据流的正常转发。在旁路模式下,网络设备通常会配备专门的硬件加速器或者处理器,以处理网络流量的特定类型或者特定协议,例如防火墙、入侵检测系统、负载均衡器等。
在旁路模式下,网络设备通常会有两个或者多个网口,其中一个网口用于接收数据流,另外一个网口则用于将数据流旁路到处理单元进行处理,处理单元处理完毕后将数据流发送回来,再由网络设备将数据流转发到正确的目标设备。
旁路模式可以提高网络设备的性能和安全性,因为它可以将特定类型的网络流量优先处理,从而提高网络设备的处理效率和响应速度。例如,防火墙可以通过旁路模式来检测和阻止网络中的恶意流量,避免网络攻击和恶意软件的传播。
需要注意的是,旁路模式需要额外的硬件和软件支持,因此通常会增加网络设备的成本和复杂性。此外,如果处理单元出现故障或者性能不足,可能会影响网络设备的正常运行,因此在设计和部署旁路模式时需要考虑相关的风险和容错措施。
2 IPV4的计算
如:192.168.2.0/16 有多少位IP地址,写一个正常IPV4转长整形类型、长整形类型转正常IPV4的不同方法
2.1 192.168.2.0/16有多少位IP地址
192.168.2.0/16
是一个 CIDR(无类别域间路由)表示方法的 IP 地址块
其中的 /16
表示这个地址块中有 16 位是网络地址,剩下的 32-16=16 位是主机地址
因此,这个地址块中有 $2^{16}$ 个 IP 地址可供分配,即 $2^{16}-2$ 个(因为其中的第一个和最后一个 IP 地址是网络地址和广播地址,不能分配给主机使用),即65534个IP地址
2.2 正常IPV4转长整形类型
public static long ipToLong(String ipAddress) {
String[] ipAddressInArray = ipAddress.split("\\.");
long result = 0;
for (int i = 0; i < ipAddressInArray.length; i++) {
int power = 3 - i;
int ip = Integer.parseInt(ipAddressInArray[i]);
result += ip * Math.pow(256, power);
}
return result;
}
该方法接受一个字符串类型的IPv4地址,将其拆分成四个整数,然后将这四个整数转换为长整型类型。具体地,将IP地址的每个部分乘以256的不同次幂,然后将它们相加,得到一个长整型类型的IP地址。
例如,将字符串 "192.168.0.1" 转换为长整型类型的IP地址:
String ipAddress = "192.168.0.1";
long ipLong = ipToLong(ipAddress);
System.out.println(ipLong); // 输出 3232235521
其中,输出的结果 3232235521 就是该IP地址对应的长整型类型表示。
2.3 长整形类型转正常IPV4
public static String longToIp(long ip) {
StringBuilder sb = new StringBuilder(15);
for (int i = 0; i < 4; i++) {
sb.insert(0, Long.toString(ip & 0xff));
if (i < 3) {
sb.insert(0, '.');
}
ip = ip >> 8;
}
return sb.toString();
}
该方法接受一个长整型类型的IP地址,将其转换为对应的IPv4地址。具体地,将长整型类型的IP地址从右向左逐个取出每个8位,转换成十进制数,并使用"."连接四个部分,得到一个字符串类型的IPv4地址。
例如,将长整型类型的IP地址 3232235521 转换为IPv4地址:
long ipLong = 3232235521L;
String ipAddress = longToIp(ipLong);
System.out.println(ipAddress); // 输出 192.168.0.1
其中,输出的结果 "192.168.0.1" 就是该长整型类型的IP地址对应的IPv4地址表示。
3 校验一段字符串是否是IPV4
public static boolean isIpv4Address(String input) {
if (input == null || input.isEmpty()) {
return false;
}
String[] parts = input.split("\\.");
if (parts.length != 4) {
return false;
}
for (String part : parts) {
try {
int value = Integer.parseInt(part);
if (value < 0 || value > 255) {
return false;
}
} catch (NumberFormatException e) {
return false;
}
}
return true;
}
该方法接受一个字符串参数,用于检查该字符串是否是IPv4地址
- 检查输入字符串是否为空或者null,如果是,则返回false
- 使用"."分隔符将输入字符串拆分成四个字符串部分,如果拆分后的字符串部分数量不是4,则返回false
- 接着,该方法会逐个检查每个字符串部分是否是一个介于0和255之间的整数,如果不是,则返回false
- 最后,如果所有的检查都通过,则返回true,表示输入字符串是一个IPv4地址
例如,检查字符串 "192.168.0.1" 是否是IPv4地址:
String input = "192.168.0.1";
boolean isIpv4 = isIpv4Address(input);
System.out.println(isIpv4); // 输出 true