【JavaEE】(5) 网络原理的基础认识
一、国内网络通信的发展史
- 2000 年左右,大多计算机没有网络,流行玩单机游戏。(自己跟自己玩)
- 2003 年左右,开始流行局域网对战游戏。(一个网吧人对战)计算机之间如果两两连接,一是没那么多接口,二是线路复杂,所以靠交换机连接。
- 后来,网游兴起,在广域网上对战。(各个地方的人对战)局域网之间靠路由器连接。
- 2007 年左右 IPhone 发布,移动互联网时代开启。
- 2011 年左右 IPhone4 发布,移动互联网崛起。由于 Android 更平民,智能手机开始普及,各种手机应用接踵而至。
二、网络通信基础
1、IP 地址
IP 地址本质是一个 32 位的整数,但为了便于人理解,将 IP 地址用 3 个 . 分割为了 4 个部分。(点分十进制)每个部分都是一个 0~255 的整数。
它的用途是区分不同的设备。
2、端口号
本质是一个 16 位的无符号整数,用途是区分同一设备上的不同应用程序。
3、协议
网络本质上是传输“光信号”(光纤,通过不同频率表示0/1)、“电信号”(网线,通过高低电平表示0/1)、“电磁波”(wifi,通过不同频率表示0/1)。
协议就是通信双方对于0/1数据的传输格式的约定。
4、五元组
一个网络通信由五元组来标识。
- 源 IP,源端口。(数据从哪来)
- 目的 IP,目的端口。(到哪去)
- 协议类型。(如何理解数据)
5、协议分层
5.1、为什么要有协议分层
用一个协议解决网络通信,非常复杂,因此需要拆分为多个协议,即协议分层,并约定协议与协议之间的调用关系(上层调用下层)。这样有两个好处:
- 分层后,每个协议只负责一个功能,更易于理解,即封装。
- 解耦合,可以灵活地对协议进行替换。
5.2、TCP/IP 五层分层模型
我们的重点是 TCP/IP 五层分层模型,因为它更接近真实的情况:(从下到上:物理层、数据链路层、网络层、传输层、应用层)
- 物理层:网络通信依赖的硬件设施,如:光纤、电线、天线等。
- 数据链路层:负责相邻两个节点的通信。如:通过硬件设施直接连接两个设备。
- 网络层:负责任意两个节点之间的路径规划。
- 传输层:只关心传输的起点和终点。
- 应用层:程序员拿到数据,自行决定如何使用。
5.3、各种网络设备所在分层
- 一台主机:它的操作系统内核实现了下四层(传输层到物理层)的内容。
- 一台路由器:实现了下三层。
- 一台交换机:实现了下两层。
- 集线器:实现了物理层。
5.4、封装(发送方)
封装和分用是网络通信的关键环节。以发送 qq 消息为例子。
- 应用层:用户输入 “hello”,点击发送按钮,qq 应用程序将获取到的字符串封装成应用层数据包。然后调用操作系统的 API 把应用层数据包交给下一层传输层。比如:
- 传输层:按照传输层协议(主要是 TCP 或 UDP),构造出传输层数据包。然后调用 API 交给网络层。以 UDP 协议为例子:
- 网络层:主要使用 IP 协议,给传输层数据包填上 IP 报头。然后调用 API 交给数据链路层。
- 数据链路层:插网线/光纤的网络主要以“以太网协议”,在网络层数据包的基础上,填上以太网帧头、帧尾。
- 物理层:将数据链路层的0/1数据转换为光信号/电信号/电磁波传输出去。
5.5、分用(接收方)
- 物理层:将物理信号转为 0/1 数据,交给数据链路层。
- 数据链路层:以太网协议,去掉以太网帧头、帧尾,交给网络层。
- 网络层:IP 协议,去掉 IP 报头,交给传输层。
- 传输层:TCP/UDP 协议,去掉 UDP 报头,交给应用层。
- 应用层:QQ 的应用层协议对数据进行解析。
5.6、丢包是怎么产生的
中途会经过很多交换机和路由器,它们分别也会对数据进行封装和解包。在某个时刻,各个主机都在使用网络,导致网络中需要传输的数据量非常大,当超过设备能承受的传输上线,就会丢包(直接丢弃数据。比如玩游戏点击使用装备,展示特效时卡了一下,恢复时直接显示的使用装备状态,如果不丢包,数据在后面又传输过来,就会产生“先使用装备,再展示特效”的违背期望顺序的效果)。