问题1: 为何网络掩码会自动添加?
因为 192.168.0.1 为C类地址,它的网络掩码缺省就是24位的,配置界面自动填写24 位掩码,是为了方便用户配置,操作界面默认你会用24 位掩码。
我们可以这样来写一个IP地址及它的掩码:
192.168.0.1 /24
也可以写成 :
192.168.0.1 255.255.255.0
这里网络掩码255.255.255所覆盖的IP地址的高三个字节为 192.168.0,192.168.0是网段地址(net),剩下的就是1了,1为主机地址(host)。
所以你看一个IP一般由两部分组成:net.host = 192.168.0.1
问题2: 第二台电脑为何只能使用 192.168.0.2-192.168.0.254?
192.168.0.0 这个IP 和网段地址相同,所以操作系统一般不允许电脑使用此IP地址。
192.168.0.255 这个IP保留为 192.168.0.0 这个网段的广播地址,所以也不允许电脑使用。
192.168.0.1 已经被使用,所以只剩下192.168.0.2-192.168.0.254这些地址可以给第二台电脑使用。
问题3: 电脑A(192.168.0.1/24)如何与电脑B(192.168.0.2/24)通信?
举个简单例子,在电脑A上 ping 电脑B:
第一步: 在电脑A DOS上输入命令:ping 192.168.0.2
第二步:A的应用程序PING,将ICMP的头部以及数据部分填写好,在Windows OS 下一般为 ICMP Header + ICMP Data = 8 + 32 = 40 byte ,调用IP socket 函数,将这40 byte 字节发送给内核里IP进程
第三步:IP进程首先检查192.168.0.2 和自己位于一个网段,都为192.168.0,通过它们之间直连的网线可以到达对方。但是对方的MAC地址不知道?为何要知道对方MAC地址?因为不知道对方MAC地址,就无法告诉网卡将包发到何方,不是吗?如何知道对方的MAC地址呢?用ARP啊
第四步: 因为ARP destination MAC 用的是FF.FF.FF.FF.FF.FF 广播地址,所以对方B可以收到并回答其MAC地址。
第五步: A的IP进程有了B的MAC地址,可以填充IP头了,一共20 byte,加上ICMP 40 byte,一共60 字节 的数据,调用网卡发送函数,并告知destination MAC = B 的MAC
第六步:A的网卡加上14 byte的 Ethernet header 以及 4 byte CRC ,一共 78 byte 发送出去。
第七步:B的网卡接收并匹配自己的MAC地址,检查是否CRC有错,然后通知IP进程有数据
第八步:IP进程取走数据,检查是否有误,于是提交给位于内核的ICMP处理
第九步:ICMP进程改写相应的包头,采用类似第二步到第六步的过程完成相反方向的通信。