前言:
大家好,我是良辰丫,今天我们一起来学习网络原理,了解一些网络的基本知识以及面试题.💞💞💞
🧑个人主页:良辰针不戳
📖所属专栏:javaEE初阶
🍎励志语句:生活也许会让我们遍体鳞伤,但最终这些伤口会成为我们一辈子的财富。
💦期待大家三连,关注,点赞,收藏。
💌作者能力有限,可能也会出错,欢迎大家指正。
💞愿与君为伴,共探Java汪洋大海。
1. 简述网络
1.1 独立模式
所谓
独立模式
,就是计算机之间相互独立,也就是单机模式.
- 每台计算机拥有自己的资源.
- 资源不能远程共享.
1.2 网络互联
独立模式的局限性太大了,随着时代的发展,人们的思维也不再只局限于单机模式,而是将一个个的计算机连在一起,形成一个计算机网络.
- 多台计算机可以实现资源共享.
- 可以远程共享资源.
数据共享
本质是网络数据传输,即计算机之间通过网络来传输数据,也称为网络通信。根据网络互连的规模不同,可以划分为局域网和广域网。
1.3 局域网(LAN)
局域网
是本地,局部组建的一种私有网络。- 局域网内的主机之间能方便的进行网络通信,又称为内网。
- 局域网和局域网之间在没有连接的情况下,是无法通信的。
局域网有很多组建网络的方式
- 网线直连.
- 集线器组建.
- 交换机组建.
- 交换机和集线器组建.
1.4 广域网(WAN)
通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了
广域网
,广域网内部的局域网都属于其子网。
其实局域网和广域网是一个相对的概念,广域网也可以看做是一个比较大的局域网.
2. 网络通信
- 网络互连的目的是进行网络通信,也即是网络数据传输,更具体一点,是网络主机中的不同进程间,基于网络传输数据。
- 那么,在组建的网络中,如何判断到底是从哪台主机,将数据传输到那台主机呢?这就需要使用IP地址来标识(也就是原地址找目的地址)。
2.1 IP地址
IP地址
主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址。我们给某个主机发送信息就需要知道目的主机的IP,就像我们寄快递需要提前知道快递的收货地址.
IP的表示方法
: IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节),通常用“点分十进制”的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数),例如168.10.20.30.
本机环路IP
: 这是一种特殊的IP,主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。当客户端和服务器都在一个主机上的时候,我们为了测试,可以用环路IP,我们通常用的环路IP地址为127.0.0.1
2.2 端口号
- 网络通信时信息传到了你的主机上,但是这是和你主机上的哪个程序进行通信呢?我们不得而知,于是乎,引进了端口,端口号可以具体定位到主机上的某个程序.快递到达了你们的城市,但是还需要具体的门牌地址,才能送货上门.微信发消息不能客串到QQ上吧.
- 咱们之前学过数据库的JDBC编程,其中有个3306就是MySQL的端口号.
那么
端口号
是什么呢?
- 在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单说:
端口号
用于定位主机中的进程。- 端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。
注意:
两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号(了解)。
- 一个进程启动后,系统会随机分配一个端口(启动端口)程序代码中,进行网络编程时,需要绑定端口号(收发数据的端口)来发送、接收数据.
- 进程绑定一个端口号后,fork一个子进程,可以实现多个进程绑定一个端口号,但不同的进程不能
绑定同一个端口号.
3. 网络协议
3.1 关于协议
其实,
协议
就是一种约定,发送方约定了自己要发送怎样格式的信息,比如文本或者图片等,接收方也得用这个格式进行接收,这样才能进行通信.协议最终体现为在网络上传输的数据包的格式.
- 网络传输本质上都是通过网线/光纤/无线电信号或者光信号来进行传输.
- 其中网线传输的是一系列的高电平和低电平(用1和0表示).
- 光纤传输的是光信号,光表示波长和频率,不同的频率来表示1和0.
- 会有一个约定记录一连串的1和0表示什么.(协议)
3.2 协议的三要素
- 语法:即数据与控制信息的结构或格式.例如是文本文件还是图片文件.
- 语义:即需要发出何种控制信息,完成何种动作以及做出何种响应.
- 时序,即事件实现顺序的详细说明.时序定义了何时进行通信,先讲什么,后讲什么,讲话的速度等,比如是采用同步传输还是异步传输.
3.3 TCP/IP协议的五元组
- 源IP:标识源主机.
- 源端口号:标识源主机中该次通信发送数据的进程.
- 目的IP:标识目的主机.
- 目的端口号:标识目的主机中该次通信接收数据的进程.
- 协议号:标识发送进程和接收进程双方约定的数据结构.
4. 协议分层
在网络通信中,许多协议是非常复杂的,于是乎,我们就需要把复杂的协议拆分成一些小的协议,可以针对这些小的协议进行分层,这相当于约定了层级与层级的调用关系.这就要求上层协议调用下层协议,下层协议给上层协议提供服务,不能跨层调用.
4.1 协议分层的好处
- 层次之间耦合度比较低,上层协议不必了解下层协议的细节,下层也不必了解上层的细节.这就相当于我们打电话,我们只在乎电话是否能打通,并不关心电话的工作原理.
- 方便对某一层协议进行替换,能促进标准化工作,因为每一层的功能及其所提供的服务都已有了精确的说明,标准化的好处就是可以随意替换其中的某一层,对于使用和科研来说十分方便。
- 易于实现和维护.
4.2 协议如何分层
教科书上经常看到OSI七层网络协议,但是我们经常见到是TCP/IP五层网络模型,这是最广泛使用的.
OSI七层网络模型图
我们主要关注OSI五层网络模型,有的资料没有物理层,可能叫做四层网络模型.
- 应用层:关注传输过来的数据的用途.
- 传输层:不考虑中间路径,只关注起点和终点.
- 网络层:负责两个遥远的节点之间的路径规划.
- 数据链路层:关注的是两个相邻节点之间的传输.
- 物理层:网络通信的基础措施,网线,光纤,网络接口等.
咱们程序员主要关注应用层,实现某个软件的功能是什么.
协议分层的情况下,数据如何进行网络传输?
- 发送方发送数据,要把数据从上到下,依次交给对应的层次上的协议进行封装.
- 接收方收到数据,要把数据从下到上,依次交给对应的层次的协议进行解析.
4.3 协议实例(QQ发消息)
发送方:你好
4.3.1 应用层封装数据包
应用层(QQ程序)拿到上面用户信息,封装成数据包,本质就是字符串拼接,下面是我简化的数据包封装图.
发送方QQ号 | 接收方QQ号 | 时间与日期 | 消息内容(你好) |
---|
4.3.2 传输层拿到上述数据
应用层要调用传输层提供的api来处理这个数据.传输层有许多协议,其中最常见的就是TCP和UDP.
这里以UDP举例.
UDP针对上述数据包再进行封装,一个典型的数据包都是通过报头+载荷构成的,下面的豆蔻信息就是报头,后面的部分就是载荷.
源端口(发送方程序端口号) 目的端口(接收程序端口号) |
发送方QQ号 | 接收方QQ号 | 时间日期 | 内容(你好) |
---|
上述就是UDP协议再给应用层数据包加了一个UDP报头,目的就是为了再贴一层标贴,在标签上可以添加一些属性(源端口和目的端口),在传输层协议中,源端口和目的端口非常重要.
4.3.3 传输层到网络层
UDP封装好数据包后,接下来就要交给网络层,网络层最常见的协议就是IP协议,IP协议还要继续封装数据包,添加上IP协议包头.
源IP 目的IP |
源端口(发送方程序端口号) 目的端口(接收程序端口号) |
发送方QQ号 | 接收方QQ号 | 时间日期 | 内容(你好) |
---|
源IP和目的IP描述了这次数据传输,起点和终点.
4.3.4 网络层交给数据链路层
这里最典型的协议是以太网协议(数据链路层与物理层的协议)
- 以太网是最常见的数据链路层的网络.
- 使用网线上网的时候就是在用以太网(以太网线).
- 以太网数据帧的帧头是用mac地址进行描述的.
我们还需要再IP数据包前面加上mac地址(源mac地址和目的mac地址).
- mac地址也叫物理地址,也是用来描述一个主机在网络上的位置.
- mac地址和IP地址很相似,但是有很大的不同.IP地址是进行网络层的路径规划,而mac地址是进行描述数据链路层,两个即将进行传输的相邻节点.
- mac地址和网卡进行绑定的,全世界的网卡,每个设备都有一个唯一的mac地址.
4.3.5 物理层接收数据帧
数据链路层就会把上述的以太网数据帧交给物理层,物理层要把上述的01二进制转换成光信号/电信号/电磁波信号进行传输.
接收数据包的过程与发送数据包的过程整合相反,在这里我就不做描述了.
4.4 网络环境中的节点转发
真实的网络环境中,应用层封装到物理层会有很多复杂的过程.
- 交换机会进行分用,从物理层分用到数据链路层,判断当前这个数据包的目的IP对不对.
- 交换机会针对这个数据重新封装,从数据链路层封装到物理层,把数据继续转发.
- 物理层收到数据,会从物理层分用到网络层,根据当前得到的目的IP进行下一阶段的寻路操作(IP协议是在一边传输的过程中,一边规划路径)
- 把数据包重新封装,从网络层封装到物理层,此时经过数据链路层的时候也会调整mac地址
- 直到到达目标主机,才会完成从物理层分用到应用层这个过程.
- 每次消息的传输都会涉及到封装分用.
- 重新封装的时候源mac和目的mac就变了.
- 中间的交换机只需要封装分用到数据链路层(只需要改变源mac和目的mac)
- 中间的路由器,需要封装分用到网络层(需要改变mac,同时也需要根据目的ip进行下一阶段的路径规划)
5. 网络设备的分层
- 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四层.
- 对于一台路由器,它实现了从网络层到物理层,也即是TCP/IP五层模型的下三层.
- 对于一台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层.
- 对于集线器,它只实现了物理层.
6. 简述封装和分用
- 发送方发送数据,要把数据从上到下,依次交给对应的层次的协议,进行
封装
- 接收方收到数据,要把数据从下到上,依次交给对应的层次的协议,进行解析(分用)
文章来源:https://www.toymoban.com/news/detail-413112.html
后序:
看到这里想必大家已经入门网络原理知识了,希望小小的文章可以帮到大家,我们下一篇文章再见.文章来源地址https://www.toymoban.com/news/detail-413112.html
到了这里,关于【网络原理】网络通信,网络协议,协议分层,网络设备的分层,封装和分用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!