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

🔥博客主页: 【小扳_-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.mzph.cn/web/5498.shtml

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

相关文章

YOLOv5入门(二)处理自己数据集(标签统计、数据集划分、数据增强)

上一节中我们讲到如何使用Labelimg工具标注自己的数据集,链接:YOLOv5利用Labelimg标注自己数据集,完成1658张数据集的预处理,接下来将进一步处理这批数据,通常是先划分再做数据增强。 目录 一、统计txt文件各标签类型…

2024年的十大技术趋势 - AI 等等

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

uniapp 之 开发微信小程序入门详细指南

目录 配置运行设置(编辑器的设置)项目目录文件配置基础配置中的uniapp应用标识(AppID)配置微信小程序的AppID 总结 配置运行设置(编辑器的设置) 点击编辑器上方菜单栏 - 运行 - 运行到小程序模拟器 - 运行…

RTMP 直播推流 Demo(一)—— 项目配置与视频预览

音视频编解码系列目录: Android 音视频基础知识 Android 音视频播放器 Demo(一)—— 视频解码与渲染 Android 音视频播放器 Demo(二)—— 音频解码与音视频同步 RTMP 直播推流 Demo(一)—— 项目…

【Canvas与艺术】绘制地平线

【关键点】 灭点在透视中的作用。 【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>使用HTML5/Canvas绘制地平线<…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-9.1-LED灯(模仿STM32驱动开发实验)

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

【ZYNQ】Zynq 开发流程

Zynq 芯片架构由嵌入式处理器&#xff08;Processing System, PS&#xff09;与可编程逻辑&#xff08;Programmable Logic, PL&#xff09;&#xff0c;以及 PS 与 PL 之间的互联总线组成。本文主要介绍 Xilinx Zynq 芯片开发所使用的软件&#xff0c;包括 Vivado IDE 与 Xili…

Ubuntu 24.04安装搜狗输入法-解决闪屏问题

问题描述 在Ubuntu 24.04 LTS系统中按照官方安装指导《Ubuntu20.04安装搜狗输入法步骤》安装搜狗输入法后&#xff1a; 会出现屏幕闪烁&#xff0c;无法正常使用的问题&#xff1b;系统搜索框和gnome-text-editor无法使用搜狗输入法&#xff1b; 原因分析 闪屏可能是Ubuntu…

Python 可以对数据进行哪些可视化?

Python 可视化 一、条形图&#xff08;或柱状图&#xff09; 1.代码如下&#xff1a; import matplotlib.pyplot as plt import pandas as pddf pd.DataFrame({County:[America,Canada,Australia,Germany,French,China],GDP:[80,30,70,80,60,75] })plt.bar(df[County],df[G…

GoLang Gin实际使用

所有代码同步到Admin/gitDemo - Gitee.comhttps://gitee.com/mec-deployment-team_0/git-demo/tree/dev/ 1.创建Gin框架 一般设计一个常规的web项目&#xff0c;都需要以下几个模块 runApp 主函数&#xff0c;运行整个项目routes 路由控制&#xff0c;管理跳转以及路由分组co…

人工电销机器人在销售行业中的重要性和作用,以及未来市场的发展前景

在追求更高效、更智能的时代&#xff0c;各行各业都在积极寻求新技术、新应用来提升业务流程的效率和质量。对于销售行业而言&#xff0c;人工电销机器人已经成为越来越受欢迎的工具之一。我们将深入探讨人工电销机器人在销售行业中的重要性和作用&#xff0c;以及未来市场的发…

思考!思考!jmeter线程数≠用户并发数

最近又在搞性能测试了&#xff0c;相较于之前的写脚本出数据就完事&#xff0c;这次深入的思考了一下测试出来的指标&#xff0c;到底有什么意义&#xff1f;&#xff1f;&#xff1f; 绞尽脑汁思考了好几天&#xff0c;终于有了点思路&#xff0c;写出来与大家分享&#xff0…

【译】Celery文档3:在Django中使用Celery

https://docs.celeryq.dev/en/latest/django/first-steps-with-django.html#django-first-steps First steps with Django Django3.1后默认支持Celery&#xff0c;不再需要安装额外的库。 Django项目布局大概是这样的&#xff1a; - proj/- manage.py- proj/- __init__.py- se…

书生·浦语大模型实战营Day01全链路开源体系

书生浦语大模型实战营-全链路开源体系 大模型 通用人工智能的重要途经 专用大模型–通用大模型 大模型&#xff1a;通用人工智能的重要途经&#xff08;专用大模型–通用大模型–多模态大模型–智能体&#xff09; InternLM发展历程 InternLM–书生 万卷&#xff08;数据…

海报生成器源码(Python版)

海报生成器源码&#xff08;Python版&#xff09; 效果图部分源码领取源码下期更新预报 效果图 部分源码 from flask import Flask, Response, request from flask_cors import CORS from flask_uploads import UploadSet, configure_uploads, IMAGES, patch_request_classimp…

Enhancing Diffusion——利用三维透视几何约束增强扩散模型

概述 透视在艺术中被广泛研究&#xff0c;但现代高质量图像生成方法却缺乏透视精度。新的生成模型引入了几何约束&#xff0c;通过训练过程提高透视精度。这样可以生成更逼真的图像&#xff0c;并提高相关深度估计模型的性能。 最近的图像生成技术使研究人员能够创造性地进行…

点成分享 | 温度控制的艺术:TX150系列水浴中的稳定性与均匀性解析

前言 在实验室和工业生产中&#xff0c;温度控制对于确保实验结果的精确性和产品的高质量至关重要&#xff0c;尤其是针对温度敏感的样品和原材料&#xff0c;如蛋白酶等&#xff0c;微小的温度误差都会对实验结果可靠性和生产质量造成影响。而在控温性能中&#xff0c;稳定性…

自学Java要到什么程度才足够能力去实习和就业?

引言 Java&#xff0c;作为当今软件开发领域的主流编程语言之一&#xff0c;对于初学者而言&#xff0c;明确掌握到什么程度才能开始寻找实习和入职机会是至关重要的。这涉及到对Java知识体系的理解深度、技能掌握程度以及实际项目经验的积累。 本文将分别从实习和入职两个不…

学习VUE2第6天

一.请求拦截器 可以节流&#xff0c;防止多次点击请求 toast是单例 二.前置路由守卫 在Vue.js中&#xff0c;前置路由守卫是指在路由转换实际发生之前执行的钩子函数。这是Vue Router&#xff08;Vue.js官方的路由管理器&#xff09;提供的一种功能&#xff0c;允许开发者在用…

UNI-APP_拨打电话权限如何去掉,访问文件权限关闭

uniapp上架过程中一直提示&#xff1a;允许“app名”拨打电话和管理通话吗&#xff1f; uniapp配置文件&#xff1a;manifest.json “permissionPhoneState” : {“request” : “none”//拨打电话权限关闭 }, “permissionExternalStorage” : {“request” : “none”//访…