130.63.160.2是B类IP地址
B类IP地址前16位(两个字节)为网络号,后16位是主机号
划分子网就是将主机号中的一部分拿出来当做子网号
这里子网掩码为255.255.255.0也就是把前三个字节当成了网络号
与B类IP默认的前两个字节作为网络号相比,第三个字节就是子网号,就是160
所以这个ip的网络号是130.63 子网号是 160 主机号是2
ARP是将IP地址转换为硬件地址
感觉B选项将握手改为挥手会更好一点~~
tcpdump是简单可靠网络监控的实用工具
top 显示活动进程方面的情况
netstat显示网络有关的信息,比如套接口使用情况、路由、接口、协议(TCP等)等
ifconfig是查看活动的网卡信息
网络位为25 主机位为7
网络地址ip和子网掩码相与的192.168.48.0
广播地址等于网络地址的主机位的二进制为1= 192.168.48.127
有效的主机IP地址=网络地址+1(全0情况) ---- 广播地址-1
== 192.168.48.1 到 192.168.48.126
子网掩码是255.255.255.252
前三个字节是255,代表前三个字节是网络地址
最后一字节写成二进制形式为11111100
也就是说最后一字节中的前六位也是网络地址,后两位是主机地址
11111100与172.16.100.5最后一字节5按位与运算,5的二进制表示为101,与运算结果为4
即网络号为172.16.100.4,主机号为1
NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。
这种方法需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。
NAT不仅能解决了lP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。
NAT的实现方式有三种,即静态转换Static Nat、动态转换Dynamic Nat和端口多路复用OverLoad。
静态 转换是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。借助于静态转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。
动态转换是指将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址时,就可以进行动态转换。动态转换可以使用多个合法外部地址集。当ISP提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式。
端口多路复用( Port address Translation,PAT)是指改变外出数据包的源端口并进行端口转换,即端口地址转换(PAT,Port Address Translation).采用端口多路复用方式。内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自internet的攻击。因此,目前网络中应用最多的就是端口多路复用方式。
采用NAT时,在虚拟机中,不用做任何配置,只要宿主机器访问网络即可。
这是一道比较经典的编程题,希望可以铭记思想:
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int max = Integer.MIN_VALUE;
int sum = 0;
int n = scanner.nextInt();
while (scanner.hasNext()) {
sum += scanner.nextInt();
if (sum>max) {
max = sum;
}
if (sum<0) {
sum = 0;
}
}
System.out.println(max);
}
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {// 注意,如果输入是多个测试用例,请通过while循环处理多个测试用例
String s = in.nextLine();
String[] arr = s.split(";");
int x = 0;
int y = 0;
for(int i = 0;i<arr.length;i++) {
char cur = arr[i].charAt(0);
String s1 = arr[i].substring(1);
//正则表达式,表示字符串是否由数字组成
if(cur == 'A'&&s1.matches("[0-9]+")) {
x = x-Integer.valueOf(s1);
continue;
}
if(cur == 'D'&&s1.matches("[0-9]+")) {
x = x+Integer.valueOf(s1);
continue;
}
if(cur == 'S'&&s1.matches("[0-9]+")) {
y = y-Integer.valueOf(s1);
continue;
}
if(cur == 'W'&&s1.matches("[0-9]+")) {
y = y+Integer.valueOf(s1);
continue;
}
}
System.out.println(x+","+y);
}
}
}