【JavaEE初阶 — 网络原理】初识网络原理

news2024/11/28 10:52:29

     c96f743646e841f8bb30b2d242197f2f.gif

ddb5ae16fc92401ea95b48766cb03d96.jpeg692a78aa0ec843629a817408c97a8b84.gif

目录

     1. 网络发展史    

    1.1 独立模式    

    1.2 网络互连    

    1.2.1  网络互联的背景     

    1.2.2  网络互联的定义     

     1.3 局域网LAN    

    1.4 广域网WAN    

    2. 网络通信基础    

    2.1 IP地址    

    2.2 端口号    

    2.3 认识协议    

    2.4 五元组     

    2.5 协议分层    

    2.5.1  分层的作用     

    2.5.2  牛客网Java刷题知识点之OSI七层参考模型 和TCP/IP五层参考模型     

    2.5.3  TCP / IP五层(或四层)模型     

    2.5.4 网络设备所在分层    

    2.5.5  网络分层对应    

    3. 网络通信基本流程     

    3.1 数据传输时的封装分用过程    

    3.2 简述封装过程    

    3.3 简述分用过程      


     1. 网络发展史    


    1.1 独立模式    


独立模式:计算机之间相互独立


    1.2 网络互连    


    1.2.1  网络互联的背景     


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


    1.2.2  网络互联的定义     


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

     1.3 局域网LAN    


      局域网的定义     


  • 局域网,即 LocalArea Network,简称LAN。
  • Local 即标识了局域网是本地,局部组建的一种私有网络。
  • 局域网内的主机之间能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的。

     局域网组建网络的方式    


     (1) 基于网线直连     


    (2) 基于集线器组建    



    (3) 基于交换机组建    



     (4) 基于交换机和路由器组建    



    1.4 广域网WAN    


     广域网的定义     


  • 广域网,即 Wide Area Network,简称WAN
  • 通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。
  • 广域网内部的局域网都属于其子网。 

    广域网的说明    

  • 如果有北、中、南等分公司,甚至海外分公司,把这些分公司以专线方式连接起来,即称为“广域网”。

  • 如果属于全球化的公共型广域网,则称为互联网 (又称公网,外网),属于广域网的一个子集。

  • 有时在不严格的环境下说的广域网,其实是指互联网。

  • 所谓"局域网"和"广域网"只是一个相对的概念。比如,我们有"天朝特色"的广域网,也可以看做一个比较大的局域网。

    2. 网络通信基础    


  • 网络互连的目的是进行网络通信,也即是网络数据传输,更具体一点,是网络主机中的不同进程间,基于网络传输数据。
  • 那么,在组建的网络中,如何判断到底是从哪一台主机,将数据传输到另一条台主机呢? 这就需要使用IP地址来标识。

    2.1 IP地址    


    概念    


IP地址主要用于标识网络主机、和其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址。 

 就像我们发送快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地。


    格式    


  • IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)如:01100100.00000100.00000101.00000110。
  • 通常用 “点分十进制” 的方式来表示,即a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)如:100.4.5.6。

我们需要明确主机的IP地址,才可以把网络数据发送到对应的主机上;


    2.2 端口号    


    端口号的应用场景    


  • 端口号和IP地址往往是配合使用的,IP 地址用于标识主机网络地址,我们通过IP地址,就能找到一台计算机/服务器。
  • 当主机接收到一个数据包,会将数据包给哪一个应用程序使用呢?
  • 这些程序都在一台主机上,所以IP地址都相同。但是他们的端口号是不同的,所以我们的数据包,可以借助端口号,再进一步进行区分;
  • 因此网络通信的过程,往往是需要先根据IP,找到主机的网络地址;再根据端口号,找到对应的程序;

    端口号的概念    


在网络通信中,IP 地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单来说,端口号就是用于定位主机中的进程。

类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货人(端口号)。


    端口号的格式    


端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。


    2.3 认识协议    


网络的传输过程

    问题    


有了IP地址和端口号,可以定位到网络中唯一的一个进程,但还存在一个问题,网络通信是基于二进制0/1数据来传输,如何告诉对方发送的数据是什么样的呢?


网络通信传输的数据类型可能有多种:图片,视频,文本等。同一个类型的数据,格式可能也不同,如发送一个文本字符串“你好!”,如何标识发送的数据是文本类型,及文本的编码格呢?


基于网络数据传输,需要使用协议来规定双方的数据格式。 


    概念    


协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备,都必须共同遵从的一组约定、规则。

如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。

协议(protocol)最终体现为在网络上传输的数据包的格式。


    2.4 五元组     


在TCP / IP协议中,用五元组来标识一个网络通信: 


五元组在网络通信中的作用,类似于发送快递:


  • 可以在cmd中,输入netstat -ano ,查看网络数据传输中的五元组信息 
  • 如果需要过滤(一般是通过端口号或进程PID过滤),可以使用netstat - ano | findstr过滤字符串

    2.5 协议分层    


     2.5.1  分层的作用     


    把大的协议拆分成小的协议,降低实现和使用的难度    

  • 网络通信本身是一件非常复杂的问题;
  • 如果只使用一个协议,来完成网络方方面面的问题,就很可能使得这个协议非常的庞大和复杂
  • 这样协议实现和使用都会困难重重,所以需要对协议进行拆分,把大的协议拆分成若干个小的协议,使得拆分出来的协议的功能更单一,更易于理解

     解耦合,高内聚,使得各个协议分工明确    

只是把大协议,拆分成若干个小协议也是不够的,因为如果拆分出来的小协议数量比较多,也会比较麻烦;所以我们需要对这些小的协议进行归类,能更好的满足高内聚;


为了这些小的协议能够进行良好的交互,需要按小协议的类别分类,并且约定好若干个层级结构,只有相邻两层协议之间可以进行交互,上层协议可以调用下层协议,下层协议可以给上层提供服务;


这样的约定非常有必要如果只是归类,但是这些协议彼此之间的调用关系混乱不堪,会使得体系也变得十分混乱 


    封装,便于更好的拓展和维护      

分层最大的好处,类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接。


在代码中,类似于定义好一个接口,一方为接口的实现类(提供方,提供服务),一方为接口的使用类(使用方,使用服务),这样能更好的扩展和维护,如下图:


     2.5.2  牛客网Java刷题知识点之OSI七层参考模型 和TCP/IP五层参考模型     


OSI:即Open System Interconnection,开放系统互连;

  • OSI七层网络模型是一个逻辑上的定义和规范:把网络从逻辑上分为了7层。
  • OSI七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输; 

    通俗理解OSI各层作用     实际组建网络时,只是以 OSI 七层模型设计中的部分分层,也即是以下TCP / IP 五层(或四层)模型来实现;

OSI 七层模型既复杂又不实用:所以 OSI七层模型没有落地、实现。


    2.5.3  TCP / IP五层(或四层)模型     


下图就把 OSI七层模型,和TCP / IP五层模型之间做了一个对应,OSI和TCP / IP下面四层是一 一对应的,主要区别在上面,OSI上面有三层,但是在TCP中合并成了一层,往往应用层不会分得那么细,所以合成一个应用层即可;

下面四层的叫法,更常见的是左边的 OSI 模型命名;

      通俗理解TCP / IP各层作用     

从五层模型到四层模型,是因为把数据链路层和物理层看做一个整体;


为什么要把物理层和数据链路层看做一个整体,主要是因为在实际实现协议的时候,数据链路层和物理层本身就不太容易完全分开;


因为物理层和硬件设备直接相关,不同的硬件设备,又会影响到数据链路层中的特性,所以数据链路层和物理层的耦合比较紧密,很难把它们完全拆分开;


协议分层有一个好处,就是可以灵活的替换层,但是如果站在物理层和数据链路层的角度来看,物理层一旦被替换,那么对应的数据链路层往往也会发生改变,因为它们的高耦合,所以可以把这两层看做一层 ;


    2.5.4 网络设备所在分层    


  • 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四层;


  • 对于一台路由器,它实现了从网络层到物理层,也即是TCP/IP五层模型的下三层;

    路由器工作过程    

  • 主机的数据发送到路由器,路由器收到之后,物理层,数据链路层,网络层解析,重新构造出新的网络数据包,构造出以太网数据帧,构造出二进制数据,进行转发。
  • 路由器是工作在网络层,这也叫三层转发

  • 对于一台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层;

    交换机工作过程    

主机的数据发送到交换机,交换机收到之后,物理层解析,数据链路层解析,重新构造出新的以太网数据帧,发给下一个设备数据链路层中,得到的以太网数据帧的帧头,信息就足以支持交换机进行下一步工作。
交换机是工作在数据链路层,这也叫二层转发。


  • 对于集线器,它只实现了物理层;


注意我们这里说的是传统意义上的交换机和路由器,也称为二层交换机(工作在TCP/IP五层模型的下两层)、三层路由器(工作在TCP/IP五层模型的下三层)。

随着现在网络设备技术的不断发展,也出现了很多3层或4层交换机,4层路由器。我们以下说的网络设备都是传统意义上的交换机和路由器。 


    2.5.5  网络分层对应    


网络数据传输时,经过不同的网络节点(主机、路由器)时,网络分层需要对应。


以下为同一个网段内的两台主机进行文件传输:
两台计算机通过TCP/IP协议通讯的过程如下所示


TCP/IP通讯过程


以下为跨网段的主机的文件传输:数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器


    3. 网络通信基本流程     


TCP/IP协议栈与数据包封装


      3.1 数据传输时的封装分用过程    

     计算机利用协议进行通信时:  

  • 发送方从上层向下层传输数据,每经过一层都附加一个协议控制信息,到达物理层后将数据包进行转换,送入传输介质。这样的操作称为“封装”(Encapsulation);
  • 数据传输到接收方时,再自下层向上层,逐层去掉协议控制信息,并且完成各层的指定功能,这样的操作,称为“分用”;

 TCP / IP 的封装


    3.2 简述封装过程    


   

    第一步    


  • 应用程序,获取到用户输入,构造一个“用户数据包”。

  • 这个用户数据包遵守开发这个程序的程序猿定义的应用层协议。

    第二步    


  • 应用程序调用传输层提供的API,把数据交给传输层。传输层拿到数据之后构造出“传输层数段”。

  • 这个“传输层数据段”遵守传输层协议,主要是 TCP 协议,或者 UDP 协议。
  • TCP数据段(传输层数据段) = TCP段头+TCP载荷。
  • TCP载荷就是“应用数据”。

    第三步    


  • 传输层构造好“传输层数据段”后,继续调用网络层的API,把“传输层数据段”交给网络层,网络层拿到数据后构造出“网络层数据报”。

  • 这个“网络层数据报”遵守网络层协议,主要是IP协议。
  • IP数据段(网络层数据报)=IP报头+IP载荷。
  • IP载荷就是“传输层数据段” 

    第四步    


  • 网络层构造好“网络层数据报“后,继续调用数据链路层的API,把“网络层数据报”交给数据链路层,数据链路层拿到后构造出“数据链路层数据帧”

  • “数据链路层数据帧”遵守数据链路层协议,主要是以太网协议。
  • 以太网数据帧(数据链路层数据帧)=太网帧头+以太网载荷+以太网帧尾。
  • 以太网载荷就是 IP数据报。

      第五步     


  • 数据链路层构造好“数据链路层数据帧”后,继续调用物理层的API,把“数据链路层数据帧”交给物理层;
  • 物理层给网卡,网卡将上诉二进制数据,最终以光/电/电磁信号发送出去。

    完整过程    


     3.3 简述分用过程      


  1. 信号到达接受方网卡,网卡将这些信号还原为二进制数据,交给上层数据链路层。

  2. 数据到达数据链路层,通过帧头帧尾包含的数据反应出使用的数据链路层协议,按该协议进行解析,将载荷数据传给上层网络层。

  3. 数据到达网络层,通过报头包含的数据反应出使用的网络层协议,按该协议进行解析,将载荷数据传给上层传输层。

  4. 数据到达传输层,通过段头包含的数据反应出使用的传输层协议,按该协议进行解析,将载荷数据传给上层应用层。

  5. 数据到达应用层,按照程序的应用层协议解析,将信息输出给接受者。 


    复习巩固    


     c96f743646e841f8bb30b2d242197f2f.gif

692a78aa0ec843629a817408c97a8b84.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2248997.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++习题】15.滑动窗口_串联所有单词的子串

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解 题目链接&#xff1a; 30. 串联所有单词的子串 题目描述&#xff1a; 解法 滑动窗口哈希表 这题和第14题不同的是&#xff1a; 哈希表不同&#xff1a;hash<string,int>left与right指…

【学术讲座】视觉计算中的深度学习方法 AIGC图像视频生成模型的推理加速

视觉计算中的深度学习方法 发展历程 backbone 强化学习、LLM等&#xff1a;有监督 && 无监督的结合 目标检测 图像分割 网络结构搜索 搜索方法 1&#xff1a;强化学习 2&#xff1a;强化学习 3&#xff1a;梯度算法 结构选择的作用 1&#xff1a;开放环境感知网络…

【VLANPWN】一款针对VLAN的安全研究和渗透测试工具

关于VLANPWN VLANPWN是一款针对VLAN的安全研究和渗透测试工具&#xff0c;该工具可以帮助广大研究人员通过对VLAN执行渗透测试&#xff0c;来研究和分析目标VLAN的安全状况。该工具专为红队研究人员和安全学习爱好者设计&#xff0c;旨在训练网络工程师提升网络的安全性能&…

机器学习之数据预处理理论——基于表格数据分析

一、机器学习中数据预处理的作用与目的 对于机器学习而言&#xff0c;数据预处理是指在数据挖掘、数据分析、模型构建训练等过程中&#xff0c;对原始数据进行一系列的处理&#xff0c;以提高数据质量、减少噪声、提取有用信息等。数据预处理的主要目的是将原始数据转换为有用的…

如何写出好证明(支持思想的深入数学写作)

不断的修改和精炼是写作过程中的重要环节&#xff0c;数学写作最终目的是提供对问题的深刻洞察而非仅仅陈述细节。 根据harvey mudd college Francis Su教授的《GUIDELINES FOR GOOD MATHEMATICAL WRITING》讲稿&#xff0c;总结出撰写好的数学证明需要注意以下几个要点&#x…

中英双语介绍DeepSpeed 的 ZeRO 优化

DeepSpeed 的 ZeRO 优化&#xff1a;通俗易懂的原理与实践指南 引言 在深度学习的大规模模型训练中&#xff0c;显存瓶颈是常见的挑战。DeepSpeed 提供了革命性的 ZeRO (Zero Redundancy Optimizer) 优化技术&#xff0c;为大模型训练节省显存、提高效率提供了强有力的工具。…

如何将 GitHub 私有仓库(private)转换为公共仓库(public)

文章目录 如何将 GitHub 私有仓库转换为公共仓库步骤 1: 登录 GitHub步骤 2: 导航到目标仓库步骤 3: 访问仓库设置步骤 4: 更改仓库可见性步骤 5: 确认更改步骤 6: 验证更改注意事项 如何将 GitHub 私有仓库转换为公共仓库 在软件开发领域&#xff0c;GitHub 是一个广受欢迎的…

【webrtc】 mediasoup中m77的IntervalBudget及其在AlrDetector的应用

IntervalBudget 用于带宽控制和流量整形 mediasoup中m77 代码的IntervalBudget ,版本比较老IntervalBudget 在特定时间间隔内的比特预算管理,从而实现带宽控制和流量整形。 一。 pacedsender 执行周期: 下一次执行的时间的动态可变的 int64_t PacedSender::TimeUntilNextPr…

Z2400023基于Java+Servlet+jsp+mysql的酒店管理系统的设计与实现 源码 调试 文档

酒店管理系统的设计与实现 1.摘要2.主要功能3. 项目技术栈运行环境 4.系统界面截图5.源码获取 1.摘要 本文介绍了一个基于Java的酒店管理系统&#xff0c;该系统采用Servlet、JSP、JDBC以及c3p0等技术构建&#xff0c;为酒店提供了一个全面的管理平台。该系统不仅适合酒店进行…

《操作系统 - 清华大学》5 -5:缺页异常

文章目录 1. 缺页异常的处理流程2.在何处保存未被映射的页&#xff1f;3. 虚拟内存性能 1. 缺页异常的处理流程 缺页中断的处理过程: CPU读内存单元&#xff0c;在TLB中根据其虚拟地址匹配物理地址&#xff0c;未命中&#xff0c;读页表; 由于页表项的存在位为0&#xff0c;CP…

C++:多态的原理

目录 一、多态的原理 1.虚函数表 2.多态的原理 二、单继承和多继承的虚函数表 1、单继承中的虚函数表 2、多继承中的虚函数表 一、多态的原理 1.虚函数表 首先我们创建一个使用了多态的类&#xff0c;创建一个对象来看其内部的内容&#xff1a; #include<iostre…

Ubuntu 硬盘分区并挂载

一、什么是挂载 1.挂载的定义 在 Ubuntu&#xff08;或其他 Linux 系统&#xff09;中&#xff0c;挂载&#xff08;Mount&#xff09; 是将一个存储设备或分区连接到系统的文件系统层次结构中的过程。挂载后&#xff0c;你可以通过某个目录&#xff08;挂载点&#xff09;访问…

python-docx -- 读取word页眉、页脚

文章目录 sections介绍访问section添加section页眉、页脚综合案例:sections介绍 word支持section的概念,即一个文档的划分部分,不同的部分均包含相同的页面布局设置,如相同的边距、页面方向等;在每个section中可以定义页眉、页脚来应用于该section下的所有页面;大部分wor…

开源加密库mbedtls及其Windows编译库

目录 1 项目简介 2 功能特性 3 性能优势 4 平台兼容性 5 应用场景 6 特点 7 Windows编译 8 编译静态库及其测试示例下载 1 项目简介 Mbed TLS是一个由ARM Maintained的开源项目&#xff0c;它提供了一个轻量级的加密库&#xff0c;适用于嵌入式系统和物联网设备。这个项…

《生成式 AI》课程 第7講:大型語言模型修練史 — 第二階段: 名師指點,發揮潛力 (兼談對 ChatGPT 做逆向工程與 LLaMA 時代的開始)

资料来自李宏毅老师《生成式 AI》课程&#xff0c;如有侵权请通知下线 Introduction to Generative AI 2024 Springhttps://speech.ee.ntu.edu.tw/~hylee/genai/2024-spring.php 摘要 这一系列的作业是为 2024 年春季的《生成式 AI》课程设计的&#xff0c;共包含十个作业。…

公司金融期末考试题目

公司金融期末考试题 选择题 1.现金折扣和信用条件&#xff08;教材P253&#xff09; 题目类似&#xff1a; 下列不属于信用条件的是&#xff08;&#xff09;。 现金折扣 数量折扣信用期限 折扣期限 给定的信用条件为"1/10&#xff0c;n/40"&#xff0c;则其含义…

【前端】JavaScript中的字面量概念与应用详解

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 &#x1f4af;前言&#x1f4af;字面量1. 数字字面量2. 字符串字面量3. 布尔字面量4. 空值字面量&#xff08;null&#xff09;5. 对象字面量6. 数组字面量7. 正则表达式字面量8. 特殊值字面量9. 函数字…

Kotlin DSL Gradle 指南

本文是关于 Kotlin DSL Gradle 的指南&#xff08;上篇&#xff09;&#xff0c;介绍了 Gradle 作为 Android 开发构建工具的作用及优势&#xff0c;包括初始配置、生命周期、依赖管理、Task 相关内容。如 Task 的创建、自定义、各种方法和属性&#xff0c;以及文件操作等&…

Web开发:使用stackexchange.redis库对redis进行增删改查

一、安装第三方库 二、官网 StackExchange.Redis |通用型 redis 客户端 三、连接示例 private static string redisConnectionString "localhost:6379,passwordyourpassword,defaultDatabase0,allowAdmintrue,asyncTimeout10000";private static string redisConn…

2024年第15届蓝桥杯C/C++组蓝桥杯JAVA实现

目录 第一题握手&#xff0c;这个直接从49累加到7即可&#xff0c;没啥难度&#xff0c;后面7个不握手就好了&#xff0c;没啥讲的&#xff0c;(然后第二个题填空好难&#xff0c;嘻嘻不会&#xff09; 第三题.好数​编辑 第四题0R格式 宝石组合 数字接龙 最后一题:拔河 第…