[JavaEE] 网络初识(网络通信 及 TCP / UDP / IP 封装分用 )

Author:MTingle
major:人工智能

---------------------------------------

Build your hopes like a tower!

文章目录

目录

文章目录

一. 网络通信基础

1. 局域网LAN 

2. ⼴域⽹WAN

3. IP地址

4. 端口号

二.协议

1. 五元组

2. 协议分层

协议分层的优点:

3. OSI七层协议:

4. TCP / IP 协议

⽹络设备所在分层

三.封装和分用

1. 封装

2.分用

3. 路由器和交换机的封装分用



一. 网络通信基础

1. 局域网LAN 

局域⽹,即 LocalAreaNetwork ,简称 LAN 。 Local 即标识了局域⽹是本地,局部组建的⼀种私有⽹络。 局域⽹内的主机之间能⽅便的进⾏⽹络通信,⼜称为内⽹;局域⽹和局域⽹之间在没有连接的情况下,是⽆法通信的。

2. ⼴域⽹WAN

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

3. 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。

4. 端口号

概念:端⼝号⽤于定位主机中的进程。类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货⼈(端⼝号)。有了IP可以确定主机,但是一个主机有多个程序在使用网络,这个时候就需要区分出主机收到的网络数据需要交给哪个程序

格式:端⼝号是0~65535范围的数字,在⽹络通信中,进程可以通过绑定⼀个端⼝号,来发送及接收⽹络数据。

二.协议

概念:协议,就是一种通信过程中的约定,发送方和接收方都提前商量好数据的格式,才能确保两者之间能够正确地进行沟通,确保不同厂商之间生产出的设备能够相互配合

1. 五元组

在TCP/IP协议中,⽤五元组来标识⼀个⽹络通信:

1. 源IP:标识源主机

2. 源端⼝号:标识源主机中该次通信发送数据的进程

3. ⽬的IP:标识⽬的主机

4. ⽬的端⼝号:标识⽬的主机中该次通信接收数据的进程

5. 协议号:标识发送进程和接收进程双⽅约定的数据格式

可以在cmd中,输⼊ netstat -ano 查看⽹络数据传输中的五元组信息

2. 协议分层

网络通信过程中,需要涉及到的细节很多,如果单纯用一个协议来完成网络通信,就需要约定要方方面面的内容,就会导致协议非常复杂,所以我们就要将协议拆分,拆分成一个个功能更单一,"小而美"的协议,拆分出来的协议多了,于是就引入了协议分层

网络通信协议拆分的多了之后也是分层了许多层,把功能相似的协议放到同一层之中,上层协议会调用下层协议的功能,下层协议给上层协议提供服务,只有相邻的层次之间可以进行沟通,不能跨层次调用

协议分层的优点:

1). 上层协议直接调用下层协议即可,不需要了解下层协议的细节,相当于下层协议直接被封装好了

2). 某一层协议被替换后,对于其他层协议没有影响

当前网络现状,有很多协议都是按照分层来组织的.

3. OSI七层协议:

7 应用层

6 表示层

5 会话层

4 传输层

3 网络层

2 数据链路层

1 物理层

最初设计的时候给出的方案,但是由于过于麻烦,后续被简化成了五层: => TCP / IP 协议

4. TCP / IP 协议

应用层: 程序拿到数据之后,要用来干啥,解决什么问题

传输层:负责关注 网络数据包 的 起点和终点 (从哪儿来到哪儿去) 端到端之间的传输 比如确定起点 西安到上海

网络层: 负责关注 起点和终点 之间,要走那一条路 (路径规划) 比如确定路线:西安 -> 南京 -> 上海

数据链路层:负责两个相邻节点直接的传输 无锡到西安 (火车运输)  南京到上海 (飞机空运) 

物理层: 通信过程中的基础设施. 例如: 公路,铁路,航线

⽹络设备所在分层

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

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

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

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

事实上 真实世界中的交换机/路由器要更复杂,功能更强大很多交换机,也具有一些路由器的功能,也能工作在网络层很多路由器,也具备一些交换机的功能,也能工作在数据链路层.

三.封装和分用

1. 封装

1. 应用层(应用程序)

此处用 QQ 举例:

QQ从消息输入框中获取到用户输入的 hello ,就要把这个字符串构造成一个应用层数据包,QQ这样的程序内部就设置了一个应用层协议,应用层数据包就是按照这个应用层协议约定的格式来构造的.

应用程序就会调用操作系统提供的 api ,把这个数据包交给传输层.

2. 传输层: TCP 和 UDP 协议

传输层就会把上述的数据作为一个整体,再构造成一个传输层的数据包,传输层涉及到的协议,最主要的就是 TCP 和 UDP 协议,此处假定使用 UDP 来进行通信,就会构造出一个 UDP 数据包

形如上述添加报头的过程就是封装,本质上字符串的拼接,只不过拼的报头,具有一定的结构

拼好的传输层数据包会被进一步交给下层(网络层),网络层继续封装 (交给下层指的是,下层协议提供一组 api ,上层调用这个 api 并且把刚刚构造好的参数传下去,下层协议就可以处理这个数据了)

3. 网络层: IP协议

网络层 IP 协议,把刚才得传输层的 UDP 数据包作为一个整体,再拼上 IP 协议的报头,构成一个 IP 数据包

这里构造成完整的 IP 数据包之后, IP 协议继续调用数据链路层的 api ,把数据交给数据链路层,数据链路层的协议继续对数据包进行处理

4.数据链路层: 以太网

数据链路层的核心协议是,以太网,此处的"以太"二字用于表述 网络数据传输的介质 ,以太网就是我们日常最常见到的 有线网络 ,日常用的网线称作 "以太网线" ,日常用到的网口叫做 "以太网口", 以太网数据帧 也是以 IP 数据包作为一个整体,在这个基础上添加帧头和帧尾.

这样的数据再往下交给物理层

5.物理层: 硬件设备

物理层把上述这样的以太网数据帧(二进制结构)转换成 光信号 / 电信号 / 电磁波

经过上述的一系列操作,数据终于从电脑上发出去了!!!

2.分用

我们暂时不考虑中间过程,假定数据包已经到达了 B 网卡,看一下 B 网卡会如何处理数据包,这个处理过程就叫做 "分用"

1. 物理层

B的物理层收到了 光信号 / 电信号 / 电磁波 ,就会把这些物理信号转换成数字信号(二进制的0/1),得到一个以太网数据帧,再进一步把这个数据帧交给数据链路层

2.数据链路层: 以太网

按照以太网数据帧的格式来解析,去除其中的载荷交给上层协议

3.网络层: IP协议

按照 IP 协议的格式进行解析,去除其中的载荷,再交给上层协议

4. 传输层: TCP / UDP 协议

按照 UDP 协议格式来解析,去除其中的载荷,再交给上层协议

5.应用层: QQ 应用程序

按照 QQ 应用程序内部的应用层协议格式来解析数据,QQ程序拿到这个数据后,就会在窗口给你弹出提示,消息就被显示到聊天框上

分用的过程,就是封装的逆过程

3. 路由器和交换机的封装分用

真实情况下,两个主机不太会直接通过网线直连的,而是通过一系列的交换机和路由器进行数据转发的.但是上述的封装分用过程同样适用.

如果是交换机,交换机就会把上述的光电信号转换成以太网数据帧数据,交给数据链路层,交换机的数据链路层就会对上述数据进行解析,这个解析过程,一方面要去除载荷部分,另一方面,就要解析帧头的关键信息,根据帧头的信息,决定下一步把数据往哪里发送,根据这个情况再进一步构造出新的以太网数据帧(交换机工作在数据链路层)

再把这个数据通过 物理层 发送出去

如果是路由器,情况会稍微复杂,此时就是封装分用到网络层

物理层先拿到光电信号,转换成二进制数据交给数据链路层,数据链路层再对数据进行解析,拿到载荷,交给网络层( IP 协议), IP 协议会对上述数据进一步解析,去除载荷(也会解析此处的报头),拿出数据后, IP 协议会进行重新封装,再交给数据链路层,数据链路层给数据加上新的帧头和帧尾,这个数据再交给物理层,转换成光电信号,继续传输


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mongoDB-1

文章目录 一、疑似坑1.11.2 mongo ops manager1.3 mongo features视图固定大小集合(有点类似ringbuffer数据结构,capped collections)(聚簇集合)clustered collection(类比到Mysql的聚簇索引)聚合管道 aggregation pipelineWiredTiger (默认存…

STM32中的计时与延时

前言 在裸机开发中,延时作为一种规定循环周期的方式经常被使用,其中尤以HAL库官方提供的HAL_Delay为甚。刚入门的小白可能会觉得既然有官方提供的延时函数,而且精度也还挺好,为什么不用呢?实际上HAL_Delay中有不少坑,而这些也只是HAL库中无数坑的其中一些。想从坑里跳出来…

【3D打印】使用simplify 3D切片更改Gcode手动断电续打、掉电、未打完继续打印、补救

一、问题描述 有些时候会遇到3D打印机没料但机器还在继续打、掉电重启后未正常恢复打印、挤出机端没有料但断料检测未触发等情况。我们又不想打印放弃,但又想继续之前的进度打印。 这时候我们需要更改3D打印文件的Gcode参数来进行继续打印。 至于什么是Gcode&…

帕金森遗传给子女的概率大吗?揭开真相,守护健康未来

在健康话题日益受到关注的今天,帕金森病这一神经系统疾病常常引发公众的广泛讨论。尤其是当谈及帕金森病是否会遗传给子女时,许多家庭都充满了担忧和疑惑。那么,帕金森病遗传给子女的概率究竟有多大?今天,我们就来揭开…

2024 年浙江省网络安全行业网络安全运维工程师项目 职业技能竞赛网络安全运维工程师(决赛样题)

2024年浙江省网络安全行业网络安全运维工程师项目 职业技能竞赛网络安全运维工程师(决赛样题) 应急响应:1 通过流量分析,找到攻击者的 IP 地址2 找到攻击者下载的恶意文件的 32 位小写 md5 值3 找到攻击者登录后台的 URI4 找到攻击…

Unity 给模型贴上照片

Unity将真实世界的照片贴图到模型上 原因 模拟仿真,直接使用照片肯定是效果最好的,省下做材质了 直接拖动即可 导入图片到Unity中将图片修改为Sprite模式直接将图片拖动到Scene面板的物体上即可 注意:是将图片拖动到Scene面板的物体上&a…

婚礼弹幕上墙阳光正好,爱意正浓,打造一场出圈的唯美婚礼!

原文地址 婚礼现场的弹幕功能可以给整个场景增添温暖和喜庆的氛围。通过手机发送祝福,让亲友可以即时将祝福传达给新人,同时这些祝福以弹幕的形式在大屏幕上滚动展示,增加了现场互动的乐趣。墙上新闻搭配的功能则更加抢眼,不仅可…

k8s中的存储

目录 一 configmap 1.1 configmap的功能 1.2 configmap的使用场景 1.3 configmap创建方式 1.3.1 字面值创建 1.3.2 通过文件创建 1.3.3 通过目录创建 1.3.4 通过yaml文件创建 1.3.5 configmap的使用方式 1.3.5.1 使用configmap填充环境变量 1.3.5.2 通过数据卷使用c…

kubernetes技术详解,带你深入了解k8s

目录 一、Kubernetes简介 1.1 容器编排应用 1.2 Kubernetes简介 1.3 k8s的设计架构 1.3.1 k8s各个组件的用途 1.3.2 k8s各组件之间的调用关系 1.3.3 k8s的常用名词概念 1.3.4 k8s的分层结构 二、k8s集群环境搭建 2.1 k8s中容器的管理方式 2.2 k8s环境部署 2.2.1 禁用…

定位HardFault

一、HardFault定义 STM32出现HardFault_Handler硬件错误的原因主要有两个方面: 1、内存溢出或者访问越界。(包括使用野指针) 2、堆栈溢出。 二、定位HardFault步骤 1. 判断所使用堆栈: 发生异常之后可首先查看LR寄存器中的值…

SAP B1 单据页面自定义 - 用户界面编辑字段

背景 接《SAP B1 基础实操 - 用户定义字段 (UDF)》,在设置完自定义字段后,如下图,通过打开【用户定义字段】可打开表单右侧的自定义字段页。然而再开打一页附加页面操作繁复,若是客户常用的定义字段,也可以把这些用户…

pytest 接口测试

pytest 核心重点 读取excel(xfile --> read) 函数循环执行( pytest 装饰器,自动解析,一个个单独执行) 接口关联(Template 处理参数变量) pytest 是什么 .py文件名 用 test_开头,…

【计算机网络】HTTP相关问题与解答

此篇文章内容会不定期更新,仅作为学习过程中的笔记记录 目录 一、HTTP请求和响应报文是怎样的? 1、请求报文 2、响应报文 二、HTTP请求方法有哪些? GET HEAD POST PUT DELETE PATCH OPTIONS TRACE CONNECT 三、GET请求与POST请…

linux cmake版本升级教程(Centos7)

有时候,当前系统的cmake版本,并一定能满足编译要求,所以需要进行升级到高于某个版本才能正常编译。本章教程,主要在centos7上进行升级cmake版本。 一、查看当前的cmake版本 cmake --version二、下载指定版本的cmake wget https://github.com/Kitware/CMake/releases/down…

Element UI:初步探索 Vue.js 的高效 UI 框架

Element UI:初步探索 Vue.js 的高效 UI 框架 一 . ElementUI 基本使用1.1 Element 介绍1.2 Element 快速入门1.3 基础布局1.4 容器布局1.5 表单组件1.6 表格组件1.6.1 基础表格1.6.2 带斑马纹表格1.6.3 带边框表格1.6.4 带状态的表格 1.7 导航栏组件讲解 二 . 学生列…

安装WINDOWS微软商店已下架的WSL系统,以UBUNTU 16.04 为例

下载WSL系统 方法1:POWERSHELL 用powershell下载 PowerShell Invoke-WebRequest -Uri https://aka.ms/wsl-ubuntu-1604 -OutFile Ubuntu.appx -UseBasicParsing 1 如果下载时间很长,可以这样把进度条关闭: $ProgressPreference Silentl…

计算机人工智能前沿进展-大语言模型方向-2024-09-12

计算机人工智能前沿进展-大语言模型方向-2024-09-12 1. PharmaBench: Enhancing ADMET benchmarks with large language models Z Niu, X Xiao, W Wu, Q Cai, Y Jiang, W Jin, M Wang… - Scientific Data, 2024 大语言模型在药物发现中的应用:PharmaBench 文章由…

vue 实现tab菜单切换

1、目标&#xff1a; 实现切换tab菜单&#xff0c;激活状态&#xff0c;按钮高亮&#xff0c;显示对应的菜单内容 2、实现 <template><div class"tan_menu"><ul class"container"><liclass"item"v-for"item in tab…

反编译classes.dex安卓源码 文件-android反编译技术

一、安卓源码 通过解压我们得到dex文件 将dex转换为jar&#xff0c;就可以直接查看源码 二、阿雪技术观 拥抱开源与共享&#xff0c;见证科技进步奇迹&#xff0c;畅享人类幸福时光&#xff01; 让我们积极投身于技术共享的浪潮中&#xff0c;不仅仅是作为受益者&#xff0c…

fiddler抓包03_汉化

Fiddler安装后为英文界面&#xff1a; 【汉化步骤】 ​① 下载汉化文件&#xff0c;链接: https://pan.baidu.com/s/1c13Dh--TwSCbwHykO8KAug?pwd8nvn 提取码: 8nvn ② 进入Fiddler目录&#xff0c;如我的安装在E:\test\Fiddler&#xff0c;将FiddlerTexts.txt复制到E:\tes…