JavaEE 初阶篇-深入了解网络原理中传输层的端口号与 UDP 协议报文格式

news2025/2/23 1:52:27

🔥博客主页: 【小扳_-CSDN博客】
❤感谢大家点赞👍收藏⭐评论✍

文章目录

        1.0 端口号概述

        1.1 端口号的作用

        1.2 端口号不能重复被多个进程绑定

        2.0 传输层协议 - UDP

        2.1 UDP 的特性

        2.2 UDP 的报文格式


        1.0 端口号概述

        端口号是计算机网络中用于标识不同应用程序或网络服务的编号。

        在 TCP/IP 协议中,端口号是一个 16 位的整数即两个字节大小的表示范围,范围从 0 到 65535 。端口号分为两种类型:系统端口和动态端口。

        1)系统端口:系统端口是预留给常见的网络服务使用的端口号,范围从 0 到 1023 。例如, HTTP 服务通常使用端口号 80,FTP 服务使用端口号 21 ,SSH 服务使用端口号 22 等。

        2)动态端口:动态端口是用于临时分配给客户端应用程序的端口号,范围从 1024 到 65535 。当客户端应用程序与服务器应用程序建立连接时,会动态分配一个未被占用的端口号,用于通信。

        1.1 端口号的作用

        1)标识应用程序:通过端口号可以唯一标识不同的应用程序或服务。

        2)实现多路复用:通过端口号,可以在同一主机上同时运行多个应用程序,实现多路复用。

        3)提供服务:服务器应用程序监听特定端口号,等待客户端连接,从而提供相应的网络服务。

        在网络通信中,客户端通过目标主机的IP地址和端口号来确定通信的目标。端口号是网络通信中非常重要的概念,它帮助实现了网络应用程序之间的通信和协作。

        1.2 端口号不能重复被多个进程绑定

        1)在同一个机器上,同一个时刻内,端口号不能重复被绑定。

        如果尝试在同一台机器上的多个进程或服务同时绑定相同的端口号,会导致端口冲突,其中只有一个进程或服务能够成功绑定端口,而其他进程或服务会失败。

        当一个端口已经被其他进程或服务占用时,如果有另一个进程或服务尝试绑定该端口,通常会收到 "Address already in use" 的错误。这种情况下,需要确保每个服务使用不同的端口号或者在不同的时刻使用同一个端口号。

        2)如何确认在当前机器上,某个端口是否被其他进程使用了呢?

        在命令框窗口使用查询指令:

netstat -ano | findstr (要查询的端口号)

举个例子:

        查询当前主机上是否有使用端口号 80 。

  1. 左边的主机+端口号:表示本地计算机上的进程或服务正在使用的端口号。这个端口号是本地计算机上的端口号,用于本地计算机与其他计算机或服务进行通信。

  2. 右边的主机+端口号:表示远程计算机或服务的 IP 地址和端口号。这个端口号是远程计算机或服务的端口号,用于本地计算机与远程计算机或服务进行通信。

        该端口号已经被占用了,红色框中的整数数据代表着是进程 PID 。比如查询进程 PID 的应用程序。

        该 7448 进程 PID 是微信这个程序占用着。

        3)两个进程不能绑定同一个端口号

        好比 “一山不能容二虎,除非一公一母” ,如果一个服务器是 TCP,一个是 UDP 此时端口号重复了也不会收到影响(一公一母)。但是如果两个 TCP / 两个 UDP ,使用同一个端口,就会有影响。

        4)如果一个进程绑定多个端口号,是否可行呢?

        非常可行的,而且日常开发中经常用到。

        一个进程上有多个端口号的作用是可以实现多种不同的网络服务或功能,同时在同一个进程中处理多个不同类型的网络连接。这样可以提高系统的灵活性和效率,减少资源消耗。

        举个例子,一个Web服务器进程可能同时绑定了 80 端口和 443 端口。80 端口用于处理HTTP 请求,而 443 端口用于处理 HTTPS 请求。通过绑定多个端口号,这个 Web 服务器可以同时提供 HTTP 和 HTTPS 两种不同的服务,而不需要启动两个独立的进程。这样可以简化服务器端的管理和维护,并提高系统的性能和稳定性。

        2.0 传输层协议 - UDP

        是一种无连接、不可靠的传输层协议,它提供了一种简单的数据传输服务,适用于那些对数据传输的实时性要求较高,但可靠性要求较低的应用场景。

        2.1 UDP 的特性

        无连接性:UDP 是一种无连接的协议,不需要在通信之前建立连接。每个 UDP 数据包都是独立的,相互之间没有关联。

        不可靠性:UDP 不提供数据包的可靠传输,数据包可能会丢失、重复或乱序到达。UDP 不对数据包进行重传或错误纠正,应用程序需要自行处理数据包的丢失或错误。

        简单性:UDP 的头部相对较小,只包含源端口、目标端口、长度和校验和等字段,因此 UDP  的开销比较小,适用于对网络带宽和资源有限的场景。

        高效性:由于 UDP 不需要建立连接和维护状态信息,因此传输效率较高,适用于实时性要求较高的应用场景,如音频、视频等流媒体传输。

        适用场景:UDP 适用于一些对实时性要求较高、数据量较小、对可靠性要求不高的应用场景,如 DNS 查询、实时音视频传输、在线游戏等。总的来说,UDP 是一种简单、高效的传输层协议,适用于对实时性要求较高、对可靠性要求较低的应用场景。在选择使用 UDP 时,需要根据具体的应用需求和网络环境来进行权衡和选择。

        2.2 UDP 的报文格式

        对于 UDP 协议来说,应用层数据到达 UDP 之后,就会给应用层数据报前面拼装上 UDP 报头,即 UDP 数据报 = UDP 报头 + UDP 载荷

UDP 报文格式图片:

        报头的内容有:源端口号、目的端口号、UDP 数据报的总长度、校验和。

        1)源端口号:占用两个字节,指定发送端的端口号。

        2)目标端口号:占用两个字节,指定接收端的端口号。

        3)UDP 长度:占用两个字节,指定 UDP 报文的总长度,包括报头和数据。

        由于 UDP 最大的长度就是两个字节最大的表示范围 65535 个字节即 64 KB ,即报头和数据加起来最大就只有 64 KB 大小。

        具体来说,UDP 报文的总长度等于 UDP 报头的长度加上数据部分的长度。UDP 报头固定占用 8 个字节(64位),因此 UDP 报文的最小长度为8字节(只有报头,没有数据部分)。当数据部分不为空时,UDP 报文的长度会根据数据部分的实际长度来确定。

        4)校验和:占用两个字节,用于检测 UDP 报文在传输过程中是否出现错误。

        在 UDP 中,校验和只能够做到发现是否有错误。使用 CRC 的方式来完成。

        CRC(Cyclic Redundancy Check,循环冗余校验)是一种常用的错误检测技术,用于检测数据在传输过程中的错误或损坏。CRC 通过对数据进行一系列计算,生成一个校验码(Checksum),发送端将这个校验码附加在数据后一起发送,接收端在接收到数据后重新计算校验码,如果计算得到的校验码与接收到的校验码不一致,则说明数据可能出现了错误。

        UDP 中使用的 CRC 算法作为校验码,CRC 是一个简单粗暴的计算校验码的方式,循环冗余校验。设定两个字节的变量,把数据的每个字节都取出来,往这个变量上进行累加,如果结果溢出超过两个字节,溢出部分舍弃,即保留低位除去高位。

        除了 CRC 的算法还有 MD5 算法。

        MD5(Message-Digest Algorithm 5)是一种常用的哈希函数,用于产生数据的摘要。MD5 算法生成的摘要通常是一个 128 位的数字,通常表示为 32 个十六进制数字。

MD5算法具有以下特点:

        1)定长:MD5算法生成的摘要长度固定为128位,无论输入数据的长度是多少。

        2)分散:输入的内容,哪怕只有一点差异,但是结果都有很大变化。

        3)碰撞概率:MD5 算法存在碰撞概率,即不同的输入数据可能生成相同的摘要,但碰撞的概率非常低。

        4)不可逆:MD5 算法是单向的,即无法根据生成的摘要还原出原始数据。

        MD5算法在数据完整性校验、数字签名、密码存储等方面被广泛应用。

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

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

相关文章

进一步了解android studio 里 AGP,gradle等关系

目录 (1) gradle是什么 (2) 工程的jdk版本,及引用包的编译版本的关系 实践 问题与解决 编译成功与运行成功 编译成功 运行成功 (1) gradle是什么 Gradle是一个构建工具,它是…

1.6 Java全栈开发前端+后端(全栈工程师进阶之路)-前置课程Jdbc编程,使用Java通过Jdbc对数据库进行基础操作

原理图 用java代码实现连接数据库(mysql)的操作 因为数据库连接需要使用到API和URL,下面简单介绍下API和URL的概念, API: Application Programming Interface应用程序编程接口,就是一套类库 Java中的AP…

2024中国绿电制氢技术趋势分析报告

来源:ATC & 大东时代 国家级规划《氢能产业发展中长期规划(2021-2035)》出台 • 主要宗旨:明确“能源”的角色定位以及在绿色低碳转型中的作用,为产业发展构建清晰的蓝图。 • 阶段目标设立: • 2025/…

如何不使用代理服务从hugging face上下载大模型?

前言:中国大陆的朋友会发现hugging face经常无法访问了,特别是在服务器上下载大型模型/数据集,如果先在电脑上下载完再传输到服务器上,对于大模型来说会非常麻烦,这篇博客一共提供了三种有效的方法不使用代理服务从hug…

【Java】何为JShell?——有趣的Java学习小工具

前言:上一篇中我们已经看到了如何编译和运行一个Java程序。Java1.9(即Java9)中引入了另一种使用Java的方式。JShell(Java Shell)程序提供了一个“读取-计算-打印循环”(Read-Evaluate-Print Loop,REPL)。当你键入一个J…

【综述】多核处理器芯片

文章目录 前言 Infineon处理器 AURIX™系列 TC399XX-256F300S 典型应用 开发工具 参考资料 前言 见《【综述】DSP处理器芯片》 Infineon处理器 AURIX™系列,基于TriCore内核,用于汽车和工业领域。 XMC™系列,基于ARM Cortex-M内核&…

基于 Evan_song1234 开发,MoonSpaceCat 增补的2D 我的世界,增加双缓冲实现 cmd控制台窗口或 Powershell 流畅运行

游戏玩法: awsd移动 1234567890 各有功能 t 是命令行 q 是刷新 e 是重开 z 是挖 其他还没来及探索代码 代码来源 C我的世界2D控制台版_cminecraft-CSDN博客 其中解决颜色被双缓冲刷新没的方法 参考于自己的博客 用ReadConsoleOutput 解决双缓冲ReadConsol…

短视频素材哪个App最好?短视频素材哪里有免费的?

在数字媒体的黄金时代,富有创意的视频内容已成为吸引观众的关键。高质量的视频素材不仅能增强视觉效果,还能提升整体叙述的力度。以下列出了一系列全球顶尖的视频素材提供网站,它们将为你的广告制作、社交媒体或任何视频项目提供极具影响力的…

Python制作精美表格——plottable

plottable是一个基础matplotlib的绘制精美图形表格的库。他将表格内容美化并转为一张图片 使用前提: 1、原始数据数量较少,可以一屏展示。这个库会将原始表格的所有数据都放到一个图片里,数据太多展示效果较差。 2、pandas读取时会将index列…

vue3步骤条带边框点击切换高亮

如果是div使用clip-path: polygon(0% 0%, 92% 0%, 100% 50%, 92% 100%, 0% 100%, 8% 50%);进行裁剪加边框没实现成功。目前这个使用svg完成带边框的。 形状可自行更改path 标签里的 :d“[num ! 1 ? ‘M 0 0 L 160 0 L 176 18 L 160 38 L 0 38 L 15.5 18 Z’ : ‘M 0,0 L 160,0…

飞腾D2000+X100 TYPE6全国产核心板

飞腾D2000X100 TYPE6核心板 产品概述 飞腾D2000X100 TYPE6核心板为增强型自主控制器核心板,其核心芯片CPU采用飞腾D2000/8核工业版CPU、飞腾桥片X100、双通道DDR4L插槽、PHY芯片等。 产品特点 l 基于飞腾D2000X100桥片 l 丰富的PCIE扩展资源,一路PCIE…

Java设计模式 _结构型模式_过滤器模式

一、过滤器模式 1、过滤器模式 过滤器模式(Filter Pattern)是这一种结构型设计模式。过滤器,顾名思义,就是对一组数据进行过滤,从而最终获取到我们预期的数据。 2、实现思路 (1)、定义过滤器的…

图搜索算法详解与示例代码

在计算机科学领域,图搜索算法是一类用于在图数据结构中查找特定节点或路径的算法。图搜索算法在许多领域都有着广泛的应用,包括网络路由、社交网络分析、游戏开发等。本文将详细介绍几种常见的图搜索算法,包括深度优先搜索(DFS&am…

数据结构四:线性表之带头结点的单向循环链表的设计

前面两篇介绍了线性表的顺序和链式存储结构,其中链式存储结构为单向链表(即一个方向的有限长度、不循环的链表),对于单链表,由于每个节点只存储了向后的结点的地址,到了尾巴结点就停止了向后链的操作。也就…

LeetCode 98.验证二叉搜索树

题目描述 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左 子树 只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例 1&#xff…

服务端不 listen 可以创建 tcp 连接吗

这个问题有三类答案。 上来就撸 linux kernel 源码,折腾半天,哦,终于在 tcp_rcv_state_process 里找到了 tcp_rcv_synsent_state_process 调用,后者包含: if (th->syn) {/* We see SYN without ACK. It is attemp…

如何 “ 一劳永逸 ” 去掉引用网址的小尾巴

引用文章的链接时会出现很长冗余信息,删,删,删……,直到从平流层删到地平线 示例链接 使用 Neat URL(支持 google 系、Firefox)扩展中的【拦截参数】可以去除的这类百无聊赖的小尾巴。 安装后&#xff…

信创 | 信创中间件全览:核心种类与关键组件!

信创产业中的中间件主要包括基础中间件和广义中间件两大类。基础中间件包括交易中间件、消息中间件、应用服务器中间件等,而广义中间件则涵盖了更多种类的中间件产品,以适应不断变化的技术需求。 一、常用的信创中间件包含: 交易中间件&…

20232937文兆宇 2023-2024-2 《网络攻防实践》实践八报告

20232937文兆宇 2023-2024-2 《网络攻防实践》实践八报告 1.实践内容 动手实践任务一 对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下: (1&am…

Eclipse MAT工具分析内存溢出

1、通过dominator_tree可以查看哪些对象大 可以看到com.codex.terry.entity.User对象有57万个 2、打开thread_overview查看内存溢出的代码