当前位置: 首页 > article >正文

【JavaEE初阶】网络原理

欢迎关注个人主页:逸狼


创造不易,可以点点赞吗~

如有错误,欢迎指出~



目录

⽹络互连

IP地址

端口号

协议

协议分层

优势

TCP/IP 五层网络模型

数据在网络通信中的整体流程 封装和分用

封装

分用


⽹络互连

随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同⼯作来完 成业务,就有了⽹络互连。

⽹络互连:将多台计算机连接在⼀起,完成数据共享。 数据共享本质是⽹络数据传输,即计算机之间通过⽹络来传输数据,也称为⽹络通信。 根据⽹络互连的规模不同,可以划分为局域⽹和⼴域⽹

局域网:把几台电脑连接在一起,就构成了局域网

路由器上面的口,数目比较有限,就引入了交换机(对路由器的端口进行了扩展)

广域网:通过路由器,将多个局域⽹连接起来,在物理上组成很⼤范围的⽹络,就形成了⼴域⽹。⼴域⽹内部 的局域⽹都属于其⼦⽹。

IP地址

IP地址描述了一台主机,在互联网上所处的位置,使用32位整数("点分十进制",为了方便人阅读)来表示

端口号

区分当前主机上的指定的应用程序(进程)

一个主机上,使用网络的程序有很多个,通过端口号区分当前主机收到的数据是 交给那个程序来处理使用, 端口号同样也是一个整数,是一个2个字节的整数(范围:0->65535,但是0->1023这些端口都是有特殊含义的,我们自己写代码时,一般使用剩下的)

协议

网络中最核心的概念.

协议是进行一切通信的基础

通信至少要有两个主机,让发送方发的数据,接收方能够理解,双方需要按照同样的规则来构造/解析数据,协议 就是在约定通信双方交互数据的规则

如何进行网络通信问题 转为了 如何设计网络通信协议

协议分层

如果使用一个协议约定所有的网络通信细节,这个协议就会非常庞大,复杂.所以把这个协议拆分成了多个小协议,每个小协议专注解决一个/一类问题,再让这些协议相互配合.

并且约定好协议之间不能相互交互(只有相邻层之间才行),上层协议调用下层协议,下层协议给上层提供服务

优势

  • 降低了使用成本,使用某个协议时,不需要关注其他协议的实现细节
  • 降低整个体系的耦合性,灵活的变更某个层次的协议

TCP/IP 五层网络模型

TCP/IP是⼀组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇

TCP/IP通讯协议采⽤了5层的层级结构,每⼀层都呼叫它的下⼀层所提供的⽹络来完成⾃⼰的需求

分为应用层 ,传输层 ,网络层 ,数据链路层 ,物理层

  1. 应⽤层:负责应⽤程序间沟通,如简单电⼦邮件传输(SMTP)、⽂件传输协议(FTP)、⽹络远 程访问协议(Telnet)等。我们的⽹络编程主要就是针对应⽤层。(程序员能够干预到的)
  2. 传输层:负责两台主机之间的数据传输。如传输控制协议(TCP),能够确保数据可靠的从源主机发 送到⽬标主机。
  3. ⽹络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识⼀台主机,并通过路由表 的⽅式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)⼯作在⽹路层。
  4. 数据链路层:负责设备之间的数据帧的传送和识别。例如⽹卡设备的驱动、帧同步(就是说从⽹线上 检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就⾃动重发)、数据差错校验等⼯作。 有以太⽹、令牌环⽹,⽆线LAN等标准。交换机(Switch)⼯作在数据链路层。
  5. 物理层:负责光/电信号的传递⽅式。⽐如现在以太⽹通⽤的⽹线(双绞线)、早期以太⽹采⽤的的同 轴电缆(现在主要⽤于有线电视)、光纤,现在的wifi⽆线⽹使⽤电磁波等都属于物理层的概念。物理 层的能⼒决定了最⼤传输速率、传输距离、抗⼲扰性等。集线器(Hub)⼯作在物理层。 
  • 应用层:关注传输的数据用来干啥
  • 传输层:主要关注网络通信中"起点和终点",并不关心通信的中间细节
  • 网络层:进行网络通信的路径规划,网络层还需要负责地址管理
  • 数据链路层:在针对上述规划好的路径,进行具体的实施
  • 物理层:描述了硬件设备(网线这样的设备)需要满足什么条件(传输数据的硬件基础设施),相当于"公路","铁路","航线"

OSI七层网络协议(这种划分只是存在于教科书里,并没有真正的被采用)

物理层我们考虑的⽐较少。因此很多时候也可以称为TCP/IP四层模型。

驱动程序是硬件厂商配套提供的

网络设备所在的分层(站在经典的模型上讨论的)

  • 对于⼀台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四 层;
  • 对于⼀台路由器,它实现了从⽹络层到物理层,也即是TCP/IP五层模型的下三层;
  • 对于⼀台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层;
  • 对于集线器(将网线进行分叉,现在几乎见不到了),它只实现了物理层;

真实情况下,交换机,也可能是工作在网络层,甚至是 传输层/应用层

路由器,也可能是工作在数据链路层,也可能在传输层或应用层

数据在网络通信中的整体流程 封装和分用

封装

计算机网络中的封装 其实就是 字符串拼接

  1. 假设通过QQ发送一个hello给另一个人,hello这个内容从输入框读取到,构造成一个"应用数据包"(应用层的网络协议就描述了这个数据包的构造,此协议往往是开发该程序的程序员 自行定义的)
  2. QQ就会调用操作系统提供的API(传输层给应用层 提供的类似于"发送数据"的API), 然后应用程序就会把已准备好的 应用层数据包 作为参数传进来,此时应用层数据包就到了系统内核里(进入了传输层的代码部分)
  3. 再将该应用层数据包进一步 封装成一个传输层数据包,由于传输层有多种协议(最主流的是TCP和UDP,这两个协议给应用层提供了两种不同的API,应用层代码使用哪组API,就使用哪个协议)
  4. 继续调用 网络层 提供给传输层的api,把数据进一步交给网络层(传输层和网络层都是系统内核里已经实现好的),网络层也有多种协议(其中最主要的就是IPv4协议,简称IP协议),IP协议会把上述 传输层数据包 构造成 网络层数据包  
  5. 网络层 继续调用数据链路层的api,把数据交给数据链路层进一步包装,数据链路层的常见协议,以太网
  6. 上述得到的数据进一步交给物理层(硬件设备),网卡会针对上述的二进制数据进行真正的传输操作,把0101这样的序列转为光信号/电信号/电磁波.....

  • 序列化:把结构化的数据 => 二进制字符串
  • 反序列化: 把二进制字符串 => 结构化数据

分用

分用其实是 封装的"逆向工作"

  1. 接收方的 物理层 收到光电信号 并还原成二进制字符串
  2. 将该数据交给 数据链路层,以太网拿到这个数据包并进行解析(拿出这里的报头 和载荷,根据报头中的信息决定这个数据包是 丢弃,转发还是 自己保留(向上解析))
  3. 网络层拿到解析好的数据包,IP协议对这个数据包进行解析(取出IP报头 和载荷,同样根据报头信息确认丢弃,转发或保留)
  4. 传输层的UDP协议也要针对数据包进行解析(取出UDP报头和载荷,此处需要把载荷进一步交给应用层协议(应用程序),并且依赖UDP报头中的"端口号"来区分不同的进程)
  5. 数据到达应用程序,程序对上述数据进行反序列化,针对这里的数据进行进一步的逻辑(将消息显示在界面上,播放提示音,显示弹窗等等)

中间过程的交换机和路由器也会涉及到 封装和分用

  • 交换机 封装分用到数据链路层就可以决定数据是丢弃还是继续转发,不再继续分用
  • 路由器 封装分用到网络层 同样可以决定数据是丢弃还是继续转发,不再继续分用

通常认为网络通信的速度比 硬盘的更慢,但比人的反应更快


http://www.kler.cn/a/326220.html

相关文章:

  • vscode文件重定向输入输出(竞赛向)
  • 河道无人机雷达测流监测系统由哪几部分组成?
  • Ansible内置模块之known_hosts
  • 层归一化和批归一化
  • 2024山西省网络建设运维第十八届职业院校技能大赛解析答案(3. ansible 服务)
  • 【C++】红黑树封装map—set
  • 大盘点|9月独家爆款SVG模版(互斥伸长、扑克出牌、预感应滑动等)
  • 【C#生态园】构建高效PDF应用:全面解析C#六大PDF生成库
  • Linux date命令(用于显示和设置系统的日期和时间,不仅可以显示时间,还能进行复杂的时间计算和格式化)
  • 苍穹外卖学习笔记(十四)
  • 【JavaEE】——CAS指令和ABA问题
  • 【Android】获取备案所需的公钥以及签名MD5值
  • Mybatis中遍历List内容进行动态SQL拼接
  • LeetCode 461. 汉明距离
  • 实战OpenCV之图像滤波
  • 记录一次排查sql server 服务调用异常的问题
  • 1.2.1 HuggingFists安装说明-Linux安装
  • Tableau|一入门
  • k8s基于nfs创建storageClass
  • C#名片识别接口集成方式、文字识别API
  • 电脑剪切的文件粘贴时丢失的高效恢复策略
  • 如何创建虚拟环境并实现目标检测及验证能否GPU加速
  • Visual Studio Code下载安装及汉化
  • 最后加推!高新CID这个项目为什么频频破圈爆火
  • HAproxy,nginx实现七层负载均衡
  • [c++高阶]模版进阶