【JavaEE 初阶】⽹络原理 - 初识
一、⽹络发展史
单机时代==》局域网时代==》广域网时代==》移动互联网时代
1.独⽴模式
2.⽹络互连
(1)局域⽹LAN
1.基于⽹线直连
2.基于集线器组建
3.基于交换机组建
4.基于交换机和路由器组建
(2)⼴域⽹WAN
如果有北、中、南等分公司,甚⾄海外分公司,把这些分公司以专线⽅式连接起来,即称为“⼴域⽹”。如果属于全球化的公共型⼴域⽹,则称为互联⽹(⼜称公⽹,外⽹),属于⼴域⽹的⼀个⼦集。有时在不严格的环境下说的⼴域⽹,其实是指互联⽹。所谓 "局域⽹" 和 "⼴域⽹" 只是⼀个相对的概念。⽐如,我们有 "天朝特⾊" 的⼴域⽹,也可以看做⼀个⽐较⼤的局域⽹。
3.⽹络通信基础
4.IP地址
(1)概念
(2)格式
5.端⼝号
(1)概念
(2)格式
Q: 有了IP地址和端⼝号,可以定位到⽹络中唯⼀的⼀个进程,但还存在⼀个问题,⽹络通信是基于⼆进制0/1数据来传输,如何告诉对⽅发送的数据是什么样的呢?A: ⽹络通信传输的数据类型可能有多种:图⽚,视频,⽂本等。同⼀个类型的数据,格式可能也不同,如发送⼀个⽂本字符串“你好!”:如何标识发送的数据是⽂本类型,及⽂本的编码格式呢?基于⽹络数据传输,需要使⽤协议来规定双⽅的数据格式。
二、认识协议
1.概念
2.作⽤
- 计算机⽣产⼚商有很多;
- 计算机操作系统,也有很多;
- 计算机⽹络硬件设备,还是有很多;
3.五元组
- 源IP:标识源主机
- 源端⼝号:标识源主机中该次通信发送数据的进程
- ⽬的IP:标识⽬的主机
- ⽬的端⼝号:标识⽬的主机中该次通信接收数据的进程
- 协议号:标识发送进程和接收进程双⽅约定的数据格式
4.协议分层
(1)什么是协议分层
(2)分层的作⽤
为什么需要⽹络协议的分层?
- 对于使⽤⽅来说,并不关⼼提供⽅是如何实现的,只需要使⽤接⼝即可
- 对于提供⽅来说,利⽤封装的特性,隐藏了实现的细节,只需要开放接⼝即可。
- 只有相邻两层协议之间可以进行交互
- 上层协议可以调用下层协议,且不需要了解下层协议的细节(便于封装)
- 下层协议可以给上层提供服务
- 分层之后,灵活的替换其中的某一层,对于整体的工作过程影响很小(便于解耦)
(协议之间的交互,不能跨层进行)
5.OSI七层模型
- OSI 七层⽹络模型是⼀个逻辑上的定义和规范:把⽹络从逻辑上分为了7层。
- OSI 七层模型是⼀种框架性的设计⽅法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
6.TCP/IP五层(或四层)模型
- 应⽤层:负责应⽤程序间沟通,如简单电⼦邮件传输(SMTP)、⽂件传输协议(FTP)、⽹络远程访问协议(Telnet)等。我们的⽹络编程主要就是针对应⽤层。
- 传输层:负责任意两台主机之间的数据传输(不考虑中间过程)。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到⽬标主机。
- ⽹络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识⼀台主机,并通过路由表的⽅式规划出任意两台主机之间的数据传输的线路(路由)。路由器(Router)⼯作在⽹路层。
- 数据链路层:负责相邻设备之间的数据帧的传送和识别。例如⽹卡设备的驱动、帧同步(就是说从⽹线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就⾃动重发)、数据差错校验等⼯作。有以太⽹、令牌环⽹,⽆线LAN等标准。交换机(Switch)⼯作在数据链路层。
- 物理层:负责光/电信号的传递⽅式(硬件设施符合的要求)。⽐如现在以太⽹通⽤的⽹线(双绞线)、早期以太⽹采⽤的的同轴电缆(现在主要⽤于有线电视)、光纤,现在的wifi⽆线⽹使⽤电磁波等都属于物理层的概念。物理层的能⼒决定了最⼤传输速率、传输距离、抗⼲扰性等。集线器(Hub)⼯作在物理层。
⽹络设备所在分层
- 对于⼀台主机,它的操作系统内核实现了从应用层到物理层的内容(通过应用程序满足网络通信的内容)
- 对于⼀台路由器,它实现了从⽹络层到物理层(组建局域网,进行网络数据包的转发)
- 对于⼀台交换机,它实现了从数据链路层到物理层(对路由器的接口进行拓展,不需要考虑组网的问题)
- 对于集线器,它只实现了物理层;
7.⽹络分层对应
8.封装和分⽤
- 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在⽹络层叫做数据报(datagram),在链路层叫做帧(frame)。
- 应⽤层数据通过协议栈发到⽹络上时,每层协议都要加上⼀个数据⾸部(header),称为封装(Encapsulation)。
- ⾸部信息中包含了⼀些类似于⾸部有多⻓,载荷(payload)有多⻓,上层协议是什么等信息。
- 数据封装成帧后发到传输介质上,到达⽬的主机后每层协议再剥掉相应的⾸部,根据⾸部中的 "上层协议字段" 将数据交给对应的上层协议处理。
9.网络数据通信的基本流程
1.应用程序 获取到用户输入, 构造一个应用层的数据包
这个应用层数据包 就会遵守 应用层协议.===>往往是开发这个程序的程序员自己定义的
往往是"结构化数据”
本质上就是"字符串拼接"
- 发送数据的时候,把结构化数据 =>字符串/二进制比特流(序列化)
- 接受数据的时候,字符串/二进制比特流 =>结构化数据(反序列化)
网络传输的数据,本质上都是"字符串"或者"二进制的 bit 流"
2.应用程序调用 传输层 提供的接口(API),把数据交给传输层.
传输层拿到数据之后,构造出"传输层数据包"
传输层的协议,主要是两个TCP/UDP
TCP 数据包 = TCP 报头(header) + TCP 载荷(payload )
报头包含:源端口/目的端口
3.传输层构造好数据之后,继续调用网络层的 api, 把传输层的数据包交给网络层.
网络层继续进行处理
网络层最主要的协议,IP 协议.
IP 协议继续对上述数据包进行加工 =>拼上 IP 报头
IP 数据包 = IP 报头 + IP 载荷 (整个传输层的数据包)
报头包含:源IP/目的IP
4.IP 协议继续调用 数据链路层的 api,把 IP 数据包交给数据链路层
数据链路层中,核心协议,"以太网"
以太网这个协议,也会在网络层数据包的基础上进一步加工
以太网数据帧 = 帧头 + 载荷 + 帧尾
5.以太网继续这样的数据交给硬件设备(网卡)
网卡会把上述二进制数据,最终以 光信号/电信号/电磁波信号 传播出去了,数据终于出门了
- 从上层到下层,数据都要进一步加工(添加报头)
- 封装 (和面向对象的封装,不是一个封装)
分用,数据到达接收方主机,逐层进行解析
1.数据到达接收方的网卡. 网卡把光电信号还原成二进制 0101
把二进制数据交给上层数据链路层
物理层数据信号是咋来的,和数据链路层是直接相关的
网线/光纤来的数据,数据链路层 =>以太网
wifi 来的数据,数据链路层 =>802.11 协议
2 数据链路层按照以太网协议进行解析
把报头和报尾取出来,剩下的载荷,往上传递给网络层
以太网的帧头中就有专门的属性,描述了网络层使用哪个协议.
3.网络层拿到这个数据之后,按照 IP 协议的格式解析,再把载荷数据交给传输层
IP 报头中也有专门的属性,描述了传输层使用哪个协议
4.传输层拿到数据之后,也是类似,按照 TCP 协议来解析,取出载荷, 交给应用层
传输层报头中, 通过目的端口号,告知我们数据交给哪个应用程序
5.应用程序, 解析应用层数据,拿到关键信息,展示到界面上,给出提示
不同的应用程序,自然使用不同的应用层协议来解析
传输的中间过程中,也是涉及到封装分用的.
交换机是工作在数据链路层
(二层转发)
交换机,只需要封装分用到 数据链路层即可
主机的数据 =>交换机. 交换机收到之后,物理层解析,数据链路层解析 (没有网络层了),重新构造出新的以太网数据帧,发给下一个设备
数据链路层中,得到的以太网数据帧的帧头,信息就足以支持交换机进行下一步工作
路由器是工作在网络层
(三层转发)
主机的数据 =>路由器,路由器收到之后,物理层,数据链路层,网络层解析 (没有传输层),重新构造出新的网络数据包,构造出以太网数据帧, 构造出二进制数据, 进行转发
是否有设备工作在传输层?
这样的设备也有,比如:防火墙,网关 封装分用到传输层
也有设备,只工作在物理层的
集线器、网线延长线