一、服务器和客户端及java的概念
JVM (Java Virtual Machine) : Java虚拟机,Java的跨平台:一次编译,到处运行,编译生成跟平台无关的字节码文件 (class文件),由对应平台的JVM解析字节码为机器指令 (010101)。
如下图所示,java的项目编译时,写好java代码之后,经过编译得到“.class”后缀的文件,但是这个文件并不是可执行文件,需要依靠各种平台上安装的JVM平台才能运行。这与C/C++代码文件不同,C/C++代码是在不同平台使用不同的编译器编译成不同平台可执行的机器指令,之后在不同的平台运行。
如下图所示,客户端会安装各种各种的软件,软件将数据发给服务器不同的或者相同的端口,服务器会监听各种端口,例如80或者8080端口,因为有不同的客户端软件发过来数据,为了处理不同软件的数据,就需要在客户端的端口监听下部署针对不同软件的项目。
下面是服务器的部署项目的方式及依赖:
二、网络物理层知识
下面将介绍网络中的基础知识:两计算机之间的直接通讯、集线器、网桥、交换器、路由器等。
1.两台计算机之间可以通过交叉线直连。
2.集线器:
连接多台计算机
这些计算机的ip在同一个网段
半双工通信:整体形成一个冲突域
3.网桥:
这些计算机的ip在同一个网段
会记住两端计算机们的ip和MAC
半双工通信:网桥两端的计算机们各自隔离成一个冲突域。
两端独立的冲突域可以各自在域内独立同行
4.交换器:
这些计算机的ip在同一个网段
全双工通信
会记住连接在交换器上的所有的计算机的ip和MAC
5.路由器:
路由器的每个端口都配置有网关和MAC
网关可以发出ARP广播
路由器可以实现不同网段的通信。
ICMP协议:是ping指令的通讯协议,具体的内容参考下面文档
ICMP协议详解-CSDN博客
IAR协议:进行ping指令前需要得到对方主机的MAC地址,地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址。具体参考下面的文章。
彻底搞懂系列之:ARP协议 - 知乎 (zhihu.com)
(1)两台计算机之间的直连
如下图所示的,电脑之间进行数据通讯,需要IP地址地同时,还是需要MAC地址(MAC地址在对应地网卡中,是全球唯一的)。计算机1向计算机2发送数据的时候,需要知道计算机2的IP地址,还需要知道对方的MAC地址。
数据传输的过程,最终计算机中的数据是根绝MAC(网卡地址)将数据发出,接收数据的时候如果数据包中的目标MAC地址是自己网卡的地址就接收数据,如果不是自己网卡的地址就将数据包丢弃。
两个电脑直连,要想实现两个电脑之间的通讯,两个电脑的IP地址必须在同一个网段,不在同一个网段是不能ping通的。ping过程走的是ICMP协议。
一个主机ping另一个主机的时候,首先向自己同一个网段内发送ARP广播,获得对方的MAC地址,然后在进行ICMP协议的ping命令的发送。
一次ARP请求:(1)pc7------->:ARP请求开始
(2)pc7------->pc8:ARP
(3)pc8------->pc7:ARP
一次ICMP请求:(1)pc7------->:ICMP请求开始
(2)pc7------->pc8:ICMP
(3)pc8------->pc7:ICMP
注意:ARP和ICMP的数据报,都是要求自己和目标主机在同一个网段中,也就是ping这条指令的进行首先要发ARP广播获得目标主机的MAC地址,然后在发送ICMP数据,这两条通讯都是需要两台主机在同一个网段,不在同一个网段需要加路由器,这个后面会讲。
如上图所示的发送ARP请求的时候,目标MAC地址为“FFFF.FFFF.FFFF”说明这个信息是“广播”。
发送数据给指定ip的主机是如何判断目标ip是否与自己是同一个网段?
例如PC1:ip(192.168.5.10),子网掩码(255.255.255.0)
PC2:ip(192.168.6.11), 子网掩码(255.255.255.0)
(1)PC1给PC2发数据的时候,使用PC1的子网掩码与PC1和PC2相位与,两个网段一样,PC1才能给PC2发数据。
(2)PC2给PC1发数据的时候,使用PC2的子网掩码与PC2和PC1相位与,两个网段一样,PC2才能给PC1发数据。
(2)集线器、同轴电缆
同轴电缆如上图所示,半双工通讯。
下面是集线器,也就是多个同轴电缆的线路集合。
集线器和同轴电缆都是没有智商的,发送APR广播的时候就会发给所有的机器,是目标地址就会回复,ICMP通讯的通讯的时候,也是发给所有的机器,目标机器接收到数据不是发给对方的,就丢弃数据。
(3)网桥
介绍网桥是离不开集线器的弊端,因为如下图所示的两个集线器“Hub0”和“Hub1”之间连接起来,然后每个集线器之间接多个设备通讯是有弊端的。
例如下图所示的“PC11”主机向“PC14”主机发送ping数据报,先发送ARP获取MAC地址,但是这个ARP会发送给图中的所有主机,然后在发送ICMP的数据,这时候也是发送下面的四个主机,由于集线器的半双工通讯,所以左边一个主机发送的给左边主机的之后,右边的主机也是会收到,也是不能进行通讯工作的,这时候工作效率是比较低的。
这时候引进网桥,网桥是可以记录下来端口接的设备都是有那些MAC地址,在网桥的内部会有一个表格,记录端口和对应连接的MAC地址。
网桥端口 | 连接的MAC地址 |
---|---|
L1 | PC15的MAC地址 |
L1 | PC12的MAC地址 |
L2 | PC13的MAC地址 |
L2 | PC14的MAC地址 |
例如下图所示的网桥已经记录了如上表所示的端口和MAC地址关系。所以PC15给PC12发送ICMP数据,经过集线器,经过网桥的时候,网桥判断这个信息的目标MAC地址是在左边,就不会将信息发送到右边的集线器,这样右边的集线器是可以进行自己的工作的,比如PC13给PC14发送数据在此时,是可以的,提高了效率。
网桥是不需要ip和MAC地址的。
(4)交换机(局域网的方案)
交换机是不需要ip和MAC地址的。
交换机会记录下来每个连接在交换机的端口的主机的MAC地址,交换机的内部在每次通讯的时候记录下来每个端口接的主机的MAC地址,在内部也会记录为一个表格。全部记录下来之后,再次进行源MAC到目标MAC数据发送的时候,就可以将数据从源主机发送到目标主机。
注意:交换机刚开始不知道端口对应的MAC地址的时候,也需要通过ARP报文发送数据,这时候的ARP广播也是会发给连接在交换机上的所有的主机的。
(5)路由器
前面的集线器、网桥、交换机等都是局域网之间设备进行通讯的方案,只能实现ip地址同一网段的主机之间进行通讯。路由器是局域网与局域网之间进行通讯的解决方案,可以实现不同网段之间主机的通讯。
对路由器的描述就需要说到交换机的缺点,如果全球的机器都使用交换机连接,那么刚开始发送ARP广播的时候,将会发送给全球所有的主机,如果所有的主机都进行ARP广播,那么网络就乱套了。这时候使用交换机实现局域网内的主机之间的通讯,局域网与局域网之间通过路由器连接交换数据。
只有通一个网段之间才能形成广播域,不同网段之间不能进行广播,路由器也是隔绝广播信号的。所以即使有了路由器也是不能进行不同网段之间直接进行广播信号的,而是一个网段的广播信号通过网段发给路由器,由路由器转发给另一个网段的交换机,这个路由器上的所有主机。
上面使用“Packet Tracer”软件进行仿真实验的时候,需要配置的是,四个主机的IP地址、子网掩码、默认网关IP;两个交换机不需要配置,路由器要对两个口配置网关IP地址、子网掩码。
网关的地址是网段的地址,加上主机地址为1。
如上图所示的,交换机之间使用路由器连接,当“PC6”和“PC9”进行通讯的时候,主要由以下的几个步骤:
通过ARP获得目标PC的MAC地址:
(1)PC16向“192.168.5.1”这个局域网内发送:目标ip为网关“192.168.5.1”的ARP广播,获得路由器网关接口的MAC地址。
(2)获得网关的MAC地址之后,开始发送ICMP数据:目标ip为PC9“192.168.4.8”,MAC为路由器网关的地址。
(3)路由器接收到PC6的ICMP数据之后,通过数据中的IP地址查找时候知道这个IP地址主机的MAC地址,发现不知道,就开始发送:目标ip为网关“192.168.4.8”的ARP广播,获得PC9的MAC地址。然后将ICMP数据的MAC地址替换成PC9主机的MAC地址,将ICMP报发给PC9主机。
(4)然后PC9主机将返回一个ICMP数据,之后在发送ICMP数据的时候,就不需要在发送ARP获得MAC地址了。
(6)光猫(调制解调器)
因为网线传输的距离比较短,所以一般使用电话线或者光纤进行网线数据的传输,所以需要将网线信号转换成电话线或者光纤信号。
二、网络地址解析
(1)MAC地址
不同的系统显示MAC地址,有的中间用“逗号”表示,有的中间用“-”横杠表示,也有的是“:”冒号连接。
如果目标MAC地址为“FF-FF-FF-FF-FF-FF”,则说明为广播信号。
(2)IP地址
IP地址有两部分组成,网络标识(网络ID,也叫网段),主机表示(主机ID)。通过子网掩码可以计算出来网络标识和主机表示。
A类地址:
A类地址的8位网络ID中,第一位必须位“0”,取值范围0~127,回环ip地址属于A类地址。
主机全为零的IP地址为0,为网段;主机全为的IP地址,为广播地址;主机为1的时候,一般为网关IP地址。
对应的子网掩码:255.0.0.0。
B类地址:
B类地址的前两位必须为“10”,网络部分的其他位是可以全为零的。
C类地址:
C类网络地址的前三位必须位“110”。
D和E类地址:
子网掩码的CIDR表示方法:
192.168.1.100/24,代表子网掩码有24个1。
(3)子网划分
子网划分是在使用C类IP地址不够主机使用,但是使用B类IP地址又比较浪费,就使用子网划分。
-
为了尽量避免浪费IP地址资源
合理地进行子网划分。
-
子网划分一般有两种:
-
等长子网划分
-
变长子网划分
-
(3.1)等长子网划分
等长子网划分,换分出来的子网段所容纳的主机数量是一样的。
-
将主机位取出若干位作为网络位。这时候只需要子网掩码向后增加一位1,一般在划分的一种网段资源不够适用,然后划分主机位更多的网段的时候,例如C类ip地址的主机不够,使用B类ip地址的时候,主机的数量太多了,使用不完,比较浪费,这时候可以进行子网划分。
比如有一个C类网段:192.168.0.0/24。这个网段可用的ip数量:192.168.0.1 ~ 192.168.0.254。
但是我只需要100个ip,所以会有154个ip被浪费掉。那么我需要再进行子网划分,且我采用等长子网划分:
网段: 11000000 10101000 00000000 00000000 192.168.0.0/24
原来子网掩码 11111111 11111111 11111111 00000000 255.255.255.0
现在子网掩码 11111111 11111111 11111111 10000000 255.255.255.128
此时网络位25位,主机位只有7位,11000000 10101000 00000000 00000000这个网段变成了两个网段:
11000000 10101000 00000000 0.0000000 192.168.0.0/25
11000000 10101000 00000000 1.0000000 192.168.0.128/25
这两个网段分别有128-2 = 126个主机ip。
-
192.168.0.0/24
这个网段的网络位是不变的,因为C类地址默认的网络位是24位。但是如果我们进行子网划分,将从主机位取出若干位作为网络位。
一开始只有一个网段,但是后来将这个网段划分,就变成了2个网段了。
-
注意:子网划分之后,对应划分的子网的 网段,网关,广播地址 等都已经改变了。例如下面的例子:
/*****************************************原来网络地址****************************************************/
原ip: 192.168.1.0 原子网掩码: 255.255.255.0
原网段:192.168.1.0 原网关:192.168.1.1 原广播地址:192.168.1.255
/*************************************子网划分后网络地址**********************************************/
子网划分:192.168.1.128 子网划分的子网掩码:255.255.255.128
划分后网段:192.168.1.128 划分后网关:192.168.1.128 划分后广播地址:192.168.1. 192
(3.2)变长子网划分
变长子网划分,划分的子网部分所容纳的主机是可以不一样的。
1、192.168.0.0/24 等分成: 192.168.0.0/25 和 192.168.0.128/25
192.168.0.0 ~ 192.168.0.127 和 192.168.0.128 ~ 192.168.0.255
2、192.168.0.0/25 等分成: 192.168.0.0/26 和 192.168.0.64/26
192.168.0.0 ~ 192.168.0.63 和 192.168.0.64 ~ 192.168.0.127
3、192.168.0.0/26 等分成: 192.168.0.0/27 和 192.168.0.32/27
192.168.0.0 ~ 192.168.0.31 和 192.168.0.32 ~ 192.168.0.63
4、192.168.0.0/27 等分成: 192.168.0.0/28 和 192.168.0.16/28
192.168.0.0 ~ 192.168.0.15 和 192.168.0.16 ~ 192.168.0.31
5、192.168.0.0/28 等分成: 192.168.0.0/29 和 192.168.0.8/29
192.168.0.0 ~ 192.168.0.7 和 192.168.0.8 ~ 192.168.0.15
6、192.168.0.0/29 等分成: 192.168.0.0/30 和 192.168.0.4/30
192.168.0.0 ~ 192.168.0.3 和 192.168.0.4 ~ 192.168.0.7
(4)这两台设备能通信吗?
- 计算机发消息时要先判断目标ip是否和自己在同一网段,比如从左向右发消息,计算机0的掩码是255.255.255.0与目标地址192.168.10.10与运算得到结果是:192.168.10.0。而源ip地址192.168.0.10的网段是192.168.0.0。所以两者显然不在同一个网段。所以从左向右一开始就发布出去。
从右向左:计算机1的网段是192.168.0.0,用自己的(不知道目的计算机的掩码)掩码判断目标地址192.168.0.10的网段是192.168.0.0。发现网段是一样的,那么从右向左能发出去。然是发出去后,还要能接收,经历一次从左向右发送消息。计算机0再判断是否同一个网段时,就会发现不在同一个网段。从左向右发布出去。一种特殊情况:
从左向右:判断目的ip192.168.0.11的网段是192.168.0.0
从右向左:判断目的ip192.168.0.10的网段是192.168.0.0
所以这两个ip能通信:192.168.0.10/24 和 192.168.0.11/16。
主要看计算机发信息时判断源ip和目的ip是否在同一个网段的结果。
(5)超网
和子网划分相反,前面子网划分是在ip地址分配的主机的数量不够的时候,可以分配主机数量更多的类型的IP地址,这时候可能主机的数量过于多了,可以将这个网络ip进行子网划分,使用划分之后的子网。
但是现在使用超网的方式也是一样可以解决的,就是将“多个连续网段”合并成一个更大的网段。
注意:必须是连续的网段才能合并。
网段合并的规律:
(6)判断一个网段是子网还是超网
首先判断该网段的类型:A, B, C
在判断和默认的子网掩码相比,当前的掩码是向左移还是向右移。
左移:超网;右移:子网。
比如:
25.100.0.0/16是一个A类子网
00011001 01100100 00000000 00000000
11111111 11111111 00000000 00000000 得到网段 00011001 01100100 .0.0 -- 25.100
而A类地址原本的子网掩码是:255.0.0.0,网段是25;现在掩码255.255.0.0,网段25.100
所以网段变小了,是一个A类子网。
200.100.0.0/16是一个C类超网
11011100 01100100 00000000 00000000
11111111 11111111 00000000 00000000
C类地址:主机位8位;改地址:主机位16位,所以是一个C类超网
(7)路由(静态路由、动态路由)
-
在不同网段之间转发数据,需要有路由器的支持
-
默认情况下,路由器只知道跟它直连的网段,非直连的网段需要通过静态路由,动态路由告诉它。
-
-
静态路由
管理员手动添加路由信息
适用于小规模网络
-
动态路由
路由器通过路由选择协议(比如RIP,OSPF)自动获取路由信息
适用于大规模网络
-
前面已经讲了路由的作用,可以实现不同网段之间的通讯器,前提是路由器对应的网口都已经设置了对应的网关地址和子网掩码,局域网内的主机也设置了默认网关,就可以实现不同网段的局域网之间的通讯。
但是不同的局域网之间跨两个及两个以上路由器进行通讯的时候,路由器内部是需要一个路由表的,需要知道下一跳路由器的ip及需要通讯的局域网的网关和子网掩码。并且路由器和路由器之间也是一个局域网,需要设置同一个网段的IP。
上图中的局域网一共又5个,如下图所示。
下面是实现跨两个路由器的不同的局域网之间的通讯,上面仿真需要的配置:
(1)PC设置ip地址和子网掩码
(2)PC设置默认网关
(3)路由器开启与交换机连接的端口,配置网关ip地址和子网掩码
(4)路由器开始两个路由器之间通讯的串口,然后配置两个路由器的串口的ip地址和子网掩码。
(5)路由器添加静态路由表的内容,包括路由器需要经过的下一跳的路由器的串口ip,与下一个路由器直连的局域网的网段及子网掩码等。
PC的ip、子网掩码、默认网关。
路由器网口的:网关、子网掩码。
路由器的:串口的ip和子网掩码。
路由器的静态路由配置:需要通讯的子网的网关ip、子网掩码、下一跳的路由器串口的ip。
下满是路由器的配置的路由表:
上面配置设置好之后,主机之间就可以通讯了。
(7.1)默认路由
跨两个路由器进行通讯的时候,静态路由需要配置下一条的路由器的串口的ip地址,以需要通讯的网段的网关ip和子网掩码。
如果不知道需要通讯的局域网的默认网关和子网掩码,那就使用下图所示的默认路由,连载这个路由器上的局域网都可以进行通讯。