(一).局域网和广域网
1.局域网
局域网,简称LAN。局域网内的所有主机可以相互进行网络通信,所以又被称为内网。如果一个局域网。
在进行组建网络的时候,我们需要可以用到的设备有交换机和路由器。


交换机可以将多台主机连接到一起,组成一个小型的局域网。路由器则可以将多个小型的局域网组建成一个更大的网络。
2.广域网
广域网,简称为WAN
通过多个路由器将多个局域网组建起来,在物理上组建成一个很大范围的网络,就形成了广域网。
广域网和局域网的区别主要是网络的覆盖范围,广域网的覆盖范围广,局域网的覆盖范围就小一点。事实上,广域网就相当于是一个大范围的局域网
(二).IP地址和端口号
1.IP地址
IP地址,用来表示网络主机,其他网络设备的的网络地址。
IP地址是由32位二进制数组成 ,通常被分割为4个"8位二进制数"
在前面介绍JDBC的时候,在创建DataSource往DataSource里面设置一些关键的属性,其中包含一个URL "jdbc"mysql://127.0.0.1 .........",其中127.0.0.1就是ip地址,用来标识网络一台设备所在的位置
例如:在买快递的时候,我们都会写一个收货地址,xx省xx市xx县xx小区,这就对应的是网络中的ip地址
2.端口号
端口号,用于区分一台主机上多个应用程序的
在一台主机上,可能有多个程序同时使用网络,这就需要通过端口号来确定具体是哪个程序
还是以买快递为例子,xx省xx市xx县xx小区,即使2精确到了小区,一个小区可能有几百个人,那么怎么才能确定出是你的快递?可以写,xx省xx市xx县xx小区xx单元xxx门牌号,这样就具体确定出是你的快递了
(三).协议
1.认识协议
当程序已经收到数据了,程序应当如何理解数据的含义?这就需要引入网络协议了。
网络协议,就是通信双方在 发送/接收 数据格式的约定。我这个数据怎么发,你收到就需要怎么解析
只有当多个主机都能认同并遵守同一套协议,此时的通信才是有意义的
2.五元组
在进行网络通信的过程中,会涉及到5个重要的参数
源IP:发送方的IP地址
源端口:发送方的端口
目的IP:接收方的IP地址
目的端口:接收方的端口
协议类型:通信过程中涉及到的协议
3.协议分成
(1).概念
对于网络通信的过程是非常复杂的,这也很容易想到。如果我设计一个协议,完成网络通信中方方面面的问题,那么肯定会使这个协议非常复杂。所以我们就需要将这个复杂的大协议进行拆分,拆分成若干个小的协议,但是一拆分会拆除几十个甚至上百个,那么我们就需要对这些协议进行分类。只有相邻两层协议之间可以进行交互,上层协议可以调用下层协议,下层协议可以给上层协议提供服务。

这样做的目的有两个:
**①.封装。**上层的协议不需要了解下层协议的细节。通过上图可以看出,打电话的人,只需要会说话就行了,不需要理解电话机的工作原理。
**②.解耦。**封层之后,可以灵活的替换其中的某一层。对于整体的工作过程影响很小。通过上图可以看出,使用无线电进行通信和使用电话机进行通信是不会相互影响的
(2).具体分层
Ⅰ.OSI七层网络模型


这七层分层的体系,只是存在于教科书上,由于体系太复杂了,所以现代网络通信采用的是TCP/IP协议
Ⅱ.TCP/IP五层(四层)模型

对于到底是四层还是五层,只是说法上的差异,视角不同。如果是四层的话,会将数据链路层和物理层合并为物理层。这是因为,物理层通常都是和硬件相关的,如果物理层发生改变,那么对于数据链路层影响也是比较大的,即这两层的耦合程度高
物理层(硬件),物理层规定了网络通信中的一些硬件设施符合的要求,例如网线,wifi,光纤
数据链路层(网卡层),完成两个相邻设备之间如何进行通信的。通过网线,把电脑连接到路由器或者交换机上,此时,电脑和路由器或交换机就属于相邻设备
对于物理层和数据链路层,通常是设备驱动程序与网络接口
网络层(互联网层),完成两个任意设备之间是如何进行通信的,这两个设备可能隔着多个交换机和路由器
传输层,完成两个任意设备之间的通信,不考虑中间过程,只考虑起点和终点
网络层和传输层是由操作系统内核实现的,我们在写代码的时候,就是调用传输层给应用层的接口
应用层,当数据到达目的主机后,目的主机如何使用该数据,对于应用层来说,我们将来写的代码主要都是工作在应用层
通过一个例子来看,网络相当一个物流系统。假设我从网上要买一个锅
物理层就相当于在铺桥修路
数据链路层就相当于是货车司机或快递小哥,考虑的是点对点
网络层就相当于物流公司,决定包裹是通过哪条路径来进行运输的
传输层就相当于商家,商家只关心收件人,也就是我的信息
应用层就相当于当我收到锅之后我该如何进行使用
对于上图的TCP/IP分层模型,我们也可以叫做"TCP/IP协议栈",上层协议调用下层协议,下层协议调用底层协议
对于主机来说,工作的过程涉及到从物理层到应用层,通过应用程序来满足网络通信的需求
对于路由器来说,工作过程涉及到从物理层到网络层,主要用途是组建局域网,进行网络数据包的转发
对于交换机来说,工作过程涉及到从物理层到数据链路层,主要功能是对路由器的接口进行扩展,不需要考虑组网问题
4.网络数据通信的基本流程
假设我现在通过"微信",发送"hello world"给对方

这个过程分为发送前过程,中间过程,收到后过程,由于中间过程过于复杂,这里只讨论发送前过程和收到后过程
具体为一下步骤:
Ⅰ.发送前过程
①.应用程序获取到用户的输入,构造出一个应用层的数据包。这个应用层数据包就是一个"结构化数据",类似于C语言中的结构体。
发送数据的时候,将结构化的数据转换成字符串或者是二进制bit流(序列化)
接收数据的时候,将字符串或者是二进制bit流转换成结构化的数据(反序列化)
构造出一个应用层的数据包之后,就会遵行应用层协议(开发程序员自己定义的)
此处假设协议的格式为:
发送者的微信号,接收者的微信号,发送消息的时候,消息的正文

②.应用程序调用传输层提供的接口(socket api),把数据交给传输层。传输层拿到数据之后,构造出**"传输层数据包"**。在传输层中,最重要的两个协议为 TCP 和 UDP ,这里假设使用的是TCP

此时"传输层数据包"就相当于TCP数据包,TCP数据包=TCP报头+TCP载荷(应用层数据包)
在TCP报头中有很多TCP功能相关的属性,里面的属性非常多,当前阶段只需要知道里面包含了源端口和目的端口即可
TCP协议不会关心在载荷里面的内容是什么
同时在传输层报头中也会记录应用层中使用了哪个协议(把数据交给哪个应用程序)
③.传输层构造好数据之后,就会继续调用网络层的api,把传输层的数据包交给网络层。网络层继续进行处理,网络层中最重要的协议是IP协议,IP协议会继续对上述的数据包进行加工,拼上IP报头

此时IP数据包=IP报头+IP载荷(整个传输层的数据包) ,IP报头中包含的信息也很多,当前阶段只需要知道里面包含了源IP和目的IP即可。同时,IP报头中也会记录当前的传输层中使用的是哪个协议
④.IP协议继续调用数据链路层的api,把IP数据包交给数据链路层。数据链路层中核心协议为"以太网",以太网这个协议也会在网络层数据包的基础上进一步加工

以太网数据帧=帧头+载荷+帧尾
其实,数据包,数据帧,数据报,数据段。在日常工作中,不会明确区分这些概念。数据段是TCP用的,数据报是UDP用的,数据包是IP用的,数据帧是数据链路层用的
⑤.以太网将这样的数据交给硬件设备,例如网卡,网卡会把上述二进制数据,最终以光信号/电信号/电磁波信号传播出去
上过的过程称为**"封装"**
Ⅱ.收到后过程
①.数据到达接收方的网卡。然后网卡将光电信号还原成二进制"0101",然后把二进制数据交给数据链路层
②.数据链路层按照以太网协议进行解析,把报头和报尾取出来,剩下的载荷,继续网上传递给网络层

③.网络层拿到这个数据之后,按照IP协议的格式进行解析,再把载荷数据交给传输层

④.传输层拿到数据之后,按照TCP协议进行解析,取出载荷,交给应用层

⑤.微信应用程序,解析应用层数据,拿到关键信息,展示到界面上,给出提示
上述的过程称为**"分用"**
Ⅲ.中间过程
传输的中间过程,也是涉及到封装分用的。
对于交换机来说,只需要封装分用到数据链路层即可。主机的数据传给交换机,交换机收到之后,物理层解析,然后数据链路层解析(没有网络层),重新构造出新的以太网数据帧,发送给下一个设备,数据链路层中,得到的以太网数据帧的帧头,里面的信息就足够支持交换机进行下一步工作
对于路由器来说,只需要封装分用到数据链路层即可。主机的数据传给路由器,路由器收到之后,物理层解析,数据链路层解析,网络层解析(没有传输层),重新构造出新的网络数据包,构造出以太网数据帧,构造出二进制数据,进行转发