【Java】网络通信基础、协议分层及封装分用

news2024/12/30 2:15:43

  • IP地址:端口号
    • 概念
    • 格式
  • 协议
  • 五元组
  • 协议分层
    • TCP/IP五层模型
  • 封装和分用

网络互连的目的是进行网络通信,也就是网络数据传输,更具体一点,是网络主机中的不同进程间基于网络来传输数据。

IP地址:端口号

概念

ip地址表示了主机在网络上的地址,类似于收发快递时的收件人地址和发件人地址。
端口号表示了主机中某一个进程,使用网络的进程在启动时系统会分配一个端口号。做服务端需要主动申请端口号,做客户端则是被动分配端口号。
在这里插入图片描述
127.0.0.1这个IP表示的是本机的环回网卡的IP,每台计算机都一样,表示本机。

内网IP在当前内网中不能重复,但在不同的内网中可以重复; 公网IP在整个公网中都不能重复。
内网范围:
A类网段:10.0.0.1 - 10.255.255.254
B类网段:172.16.0.1 - 172.31.255.254
C类网段:192.168.0.1 - 192.168.255.254

格式

IP地址本质上是一个32位的整型,每八位做了分隔,0-255。表示的最大范围为:255.255.255.255,这是一种点分十进制表示方式(IPV4)。由于IPV4协议表示的IP地址共42亿个,地址个数不够用,目前国内大力推IPV6。
端口号的范围是1-65535, 但是 1-124是已经被明确的程序占用,我们自定义的程序一般不使用这个范围内的端口,可以在1025-65535之间任意选择一个没有占用的。

协议

协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从
的一组约定、规则。比如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互
通信交流。

五元组

综合以上概念,提出了一个网络通信中五元组的概念。

1.源IP: 标识源主机,相当于发件地址
2.源端口: 标识源主机中此时通信发送数据的应用程序,相当于发件人
3.目标IP: 标识目标主机,相当于收件地址
4.目标端口: 标识目标主要是此次通信接收数据的应用程序相当于收件人
5.协议号: 标识发送进程与接收进程中双方约定的数据格式

通过五元组就可以明确表示出网络中哪台主机向哪台主机发送了什么数据,对于现实生活中快递的例子,发送方向接收方发了哪个快递。
在这里插入图片描述

协议分层

对于普通用户而言,只关注消息本身,并不关注消息时如何在网络上传输的,基于这样的场景,消息在网络上的传输过程就被分成了很多层。

TCP/IP五层模型

把OSI七层网络模型中的上面三层合一,就成了TCP/IP中的应用层。
在这里插入图片描述
应用层: 要开发程序之前,如果涉及到网络通信,都会预先定义好协议。这个协议就是程序在发送和接受过程中的编解码格式。我们的网络编程主要就是针对应用层
传输层: 主要向应用程序提供API,完成数据的发送与接收。比如socket API。操系统工作在这一层,主要确定程序的端口号。
网络层: 规划出一条端到端之间的路径,包括其中要经过的其他网络设备。比如发送一个快递,从西安到上海,包括途中的中转站。发送方IP、接收方IP。五元组到这一层就确定下来了。
数据链路层: 解决的是点到点的传输。比如:快递小哥从我家取走快递-- >西安机场集散中心;西安机场集散中心 --> 上海机场集散中心;上海机场集散中心-> 收件人附近的营业部;收件人附近的营业部 --> 收件人地址。
物理层: 相当于网线及其他网络设备(交换机,路由器)。对于物流来说就相当于公路、铁路等基础设施。

TCP/IP四层模型不包含物理层。

封装和分用

1.不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。
2.应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。
3.首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
4.数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理。

以QQ发送消息为例,模拟消息在网络中的封装和分用过程。
1.应用层
对于应用层协议的定义,双方要按照相同的规则去组织与解析数据。应用层会把消息组织好,统一发送给操作系统的API(传输层) socket api。
在这里插入图片描述

2.传输层
在传输层中有几个非常著名的协议,TCP,UDP。以TCP为例,会在消息前面加入TCP头。原始应用层传来的消息就称为载荷。在这里,系统操作可以确认下来端口号。
在这里插入图片描述

3.网络层
在这一层确定下来源IP和目标IP。
在这里插入图片描述

4.数据链路层
帧头中主要是MAC地址,每个MAC地址都不相同,每个硬件厂商都会被分配一段地址,生产出的设备都在这个范围中。帧尾是校验和,CRC校验就是把每个BYTE做累加操作,最终会得到一个值。接收方也会同样的操作累加值,如果得到的值与校验和相等,那么就证明数据本身没有被该过。过程中可能会出现溢出,溢出就溢出。
在这里插入图片描述

5.物理层
把以下的内容转换成光信号、电信号在网络设备上传输。光纤:光信号;网线:电信号。
在这里插入图片描述
到此消息体就在网络上开始传输。

6.物理层
把光信号和电信号还原成数据链路层可以解析的格式。

7.数据链路层
帧头的MAC地址可以找到对应的主机,帧尾校验和来校验数据的有效性。然后脱掉帧头帧尾把载荷交给网络层。
在这里插入图片描述

8.网络层
IP协议头中可以找到目标主机的IP。脱掉IP协议头,将数据交给传输层。
在这里插入图片描述

9.传输层
这时已经进入了操作系统中,通过TCP中的目标端口确认应用程序(进程)。
在这里插入图片描述

10.应用层
应用层拿到的是脱去了TCP头的数据,此时到了QQ.exe。应用程序按照自定义的协议格式来解析消息体,完成通信。
在这里插入图片描述

在网络传输的过程中,每个网络节点都会进行封装和分用,最终才到达目标。


继续加油~
在这里插入图片描述

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

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

相关文章

数据库监控与调优【十七】—— 表结构设计优化

表结构设计优化 第一范式(1NF) 字段具有原子性,即数据库的每一个字段都是不可分割的原子数据项,不能是集合、数组、记录等非原子数据项 当实体中的某个属性有多个值时,必须拆分为不同的属性 例子: 如图…

23.6.23

1.整理用户相关的指令、整理磁盘相关的指令 (1)用户相关 创建用户:sudo adduser 用户名 给新用户添加sudo权限:sudo vim /etc/sudoers 添加后wq!强制退出 删除用户:sudo userdel (-r&#x…

tomcat环境部署

目录 一、安装jdk 1、关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下,安装JDK 2、设置JDK环境变量 3、使用文本工具编写java源代码 二、安装启动Tomcat 1、解包 2、后台启动 3、使用80端口访问 一、安装jdk 在部署 Tomcat 之前必须安装好…

Java学习629

线程安全 开发中银行排号,火车售票系统中多线程程序发生的问题 引入代码: package Test0626;class SaleTicket implements Runnable{int ticket 100;Overridepublic void run() {while(true){if (ticket > 0){System.out.println(Thread.currentT…

ROS2 launch文件同时引入yaml文件参数和自定义变量参数

0 背景 在ROS中,launch工具可以帮助用户同时启动多个节点,以及引入多种设置如参数导入、节点名重映射等。在ROS1中,launch文件通过xml语言编写,后缀名为.launch;而ROS2在xml的基础上(后缀名为.xml&#xf…

【Servlet学习四】实现一个内存版本的表白墙~

目录 一、前端代码 二、后端代码实现 🌈1、全局类定义AppVar 🌈2、实体类定义Message 🌈3、获取所有信息:getMessageServlet实现前后端的交互 🌈4、添加数据:addMessageServlet,实现前后端…

notepad++去除换行符和空格

在notepad中按Ctrlh 1.去除换行符 输入如图所示的查找内容为\r\n,【替换为】不填写,勾选底部的【正则表达式】,然后点击【全部替换】 2. 按照逗号换行 输入如图所示的查找内容为,,【替换为】\r\n,勾选底部的【正则…

C# WinForm 选择打开文件和保存文件

做 winform 项目的时候正好遇到了记录一下: 打开文件 我们使用 OpenFileDialog 控件来打开文件选择框: 通过 Title 属性可以设置选择框的标题而 Filter 属性可以设置选中的文件类型,这个属性由两个部分组成 SVG files (*.svg)|*.svg &am…

九、云尚办公系统-管理端-审批管理

云尚办公系统:管理端-审批管理 B站直达【为尚硅谷点赞】: https://www.bilibili.com/video/BV1Ya411S7aT 本博文以课程相关为主发布,并且融入了自己的一些看法以及对学习过程中遇见的问题给出相关的解决方法。一起学习一起进步!!…

Unity导出到AS中真机测试apk没有问题,aab提交到GooglePlay审核通过,但是从Google Play下载的应用闪退问题

从Google Play下载的应用报错如下: backtrace: #00 pc 0x0000000000050748 /data/app/~~x94h_Fmdoj4Vj1NVQcL7sQ/com.id.hhhuhi-LpC7BJqILn3X29R8TffhuA/split_config.arm64_v8a.apk!libpairipcore.so (ExecuteProgram196) 06-26 20:39:40.526 13936 13936 F l…

基于Java+Vue前后端分离宠物领养系统设计实现(源码+lw+部署文档+讲解等)

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

ML@集成学习@摘要

文章目录 集成学习refs摘要Note准确性和多样性 集成学习方法分类BoostingAdaBoost伪代码Adaboost小结 补充补充1补充2 BaggingBagging伪代码 特点算法效率直接应用于多分类 自助采样和包外估计随机森林 Stackingsklearn中的Stacking🎈构造初级学习器构造次级学习器 …

Ubuntu18.04 系统设置修改物理内存-迅为RK3568开发板

打开虚拟机,如下图。单击红色框中的“虚拟机”。如下图所示: 然后点击“设置”弹出虚拟机的设置界面,如下图所示: 更多教程B站搜:迅为3568开发板

RHEL8.2安装QEMU及KVM虚拟化

一、环境 操作系统:CentOS8.2CPU:4C内存:16G磁盘:250G,其中180G分配给/data,用于存储数据及kvm存储池。 二、安装步骤 dnf module install virt dnf install virt-install virt-viewer virt-manager -y三…

【Redis二】Redis优化之持久化

Redis优化之持久化 1.Redis高可用2.Redis持久化2.1 RDB 持久化2.1.1 触发条件2.1.2 执行流程2.1.3 启动时加载 2.2 AOF 持久化2.2.1 开启AOF2.2.2 执行流程2.2.3 文件重写触发方式2.2.4 文件重写的流程2.2.5 启动时加载 2.3 RDB和AOF的优缺点2.4 RDB AOF持久化的区别 3.Redis性…

如何理解 Istio Ingress, 它与 API Gateway 有什么区别?东西流量?南北流量?

文章目录 背景k8s的内部服务如何被外部访问东西流量南北流量流量管理的比较 IngressAPI GatewayIstio参考 背景 这三者都和流量治理密切相关,那么流量治理在过去和现在有什么区别呢?都是如何做的呢? 在学习istio的时候对流量管理加深了理解。…

学编程c++有什么好处?有什么作用?

C是一种跨平台、高效且广泛应用的编程语言,具有许多优势和应用领域。本文将深入探讨学习C编程的好处,包括跨平台性、高效性、对系统资源的控制能力以及面向对象编程的优势。此外,我们还将介绍C在不同领域的应用,如桌面应用程序、嵌…

记录好项目D17

记录好项目 你好呀,这里是我专门记录一下从某些地方收集起来的项目,对项目修改,进行添砖加瓦,变成自己的闪亮项目。修修补补也可以成为毕设哦 本次的项目是个SpringBoot网上商城 一、系统介绍 前台功能 商品分类查询&#xff…

【微服务架构】微服务安全 - 如何保护您的微服务基础架构?

在当今行业使用各种软件架构和应用程序的市场中,几乎不可能感觉到您的数据是完全安全的。因此,在使用微服务架构构建应用程序时,安全问题变得更加重要,因为各个服务相互之间以及客户端之间进行通信。因此,在这篇关于微…

STM32F407实现NEC协议红外线解码

【1】NEC红外线协议介绍 NEC红外线协议是一种常用的红外线通信协议,广泛应用于消费电子产品中,如电视、DVD播放器、空调遥控器等。该协议定义了红外线通信的物理层和数据链路层规范,以实现可靠的红外线数据传输。 下面是NEC红外线协议的详细…