网络编程 03:端口的定义、分类,端口映射,通过 Java 实现了 IP 和端口的信息获取

ops/2024/12/22 7:24:06/

一、概述

记录时间 [2024-12-19]

前置文章

网络编程 01:计算机网络概述,网络的作用,网络通信的要素,以及网络通信协议与分层模型

网络编程 02:IP 地址,IP 地址的作用、分类,通过 Java 实现 IP 地址的信息获取

本文讲述网络编程相关知识——端口,包括端口的定义,分类,以及端口映射等。

同时,文章中通过 Java 编程,实现了 IP 和端口这些网络信息的获取。

通过获取 IP 和端口,同时基于相关的网络协议,我们能实现不同计算机之前的通信。



二、端口定义

端口是传输层的一部分,主要用于区分同一台设备上的不同应用程序或服务。即,不同的进程有不同的端口号。

根据规定:

  • 端口号由一个 16 位的数字表示,范围是 0~65535;
  • 不同的协议(如 TCP,UDP),各自的端口范围都是 0~65535,即,不同协议 + 同一端口不冲突;
  • 单个协议下,端口号不能冲突。例如,TCP 协议下,同一时间内只有一个进程可以使用 8080 端口。否则就会抛出端口被占用的问题。


三、端口分类

1. 公有端口

公有端口,范围 0~1023,这些端口通常由系统保留,用于常见的网络服务。

  • 21:FTP(文件传输协议)
  • 22:SSH(安全壳层协议)
  • 23:Telent(远程监听)
  • 25:SMTP(简单邮件传输协议)
  • 80:HTTP(超文本传输协议)
  • 443:HTTPS(安全的超文本传输协议)

2. 注册端口

程序注册端口,范围 1024~49151,这些端口分配给用户或程序注册使用,需要注意冲突问题。

  • 3306:MySQL 数据库
  • 8080:Tomcat
  • 1521:Oracle

3. 动态 / 私有端口

动态/私有端口,范围 49151~65535,通常用于临时会话,由操作系统自动分配给客户端应用程序。

  • 当浏览器连接到一个 Web 服务器时,它可能会使用一个动态端口作为源端口
  • 通过 IDEA 打开网页时,会使用本机的一个动态端口


四、DOS 命令

1. 查看端口 / 进程

# 查看所有端口
netstat -ano
# PID 进程号,不是端口
# 协议 本地地址 外部地址 状态 PID# 根据 port 查看指定端口
# | 管道符,用于过滤
netstat -ano|findstr "port"# 根据 PID 查找进程
tasklist|findstr "PID"

2. 其他

# 打开任务管理器
Ctrl + Shift + ESC# 配置 IP 的映射
# 通过 C:\Windows\System32\drivers\etc\hosts
127.0.0.1       localhost


五、代码实现

1. InetSocketAddress 类

InetSocketAddress 是 Java 网络编程中的一个类,位于 java.net 包中。

它用于表示包含 IP 地址和端口号的套接字地址,通常与 ServerSocketSocketDatagramSocketURL 一起使用,以指定网络连接的目标地址或监听地址。


在这里插入图片描述


2. 测试 socket

在 Java 中,通过套接字 socket 获取 IP 地址和 端口号,以此定位一个网络地址。

然后获取这个网络地址中的相关信息,例如,IP 地址,主机名,端口号。

  • getAddress():返回 InetAddress 对象,表示此套接字地址的 IP 地址。
  • getHostName():返回此套接字地址的主机名。如果创建 InetSocketAddress 时提供了 IP 地址而不是主机名,则返回 IP 地址的字符串表示形式。
  • getPort():返回此套接字地址的端口号。
java">public class TestInetSocketAddress {public static void main(String[] args) {// 定位主机 + 端口InetSocketAddress socketAddress = new InetSocketAddress("127.0.0.1", 8080);InetSocketAddress socketAddress2 = new InetSocketAddress("localhost", 8080);System.out.println(socketAddress);System.out.println(socketAddress2);// 总的地址System.out.println(socketAddress.getAddress());// 默认是 IP 地址,想要主机名,可以在 host 系统文件中配置映射System.out.println(socketAddress.getHostName());// 端口System.out.println(socketAddress.getPort());}
}

六、端口映射

端口映射(Port Forwarding)是一种网络技术,用于将外部网络的请求转发到内部网络中的特定设备和端口

运行在计算机上的应用程序(进程),会有自己的运行端口,其他主机发送过来的消息要想被应用程序成功接收到,除了要通过 IP 地址,还需要定位应用程序的端口

(程序是静止的,进程是程序的运行态)

如下图,在两台不同的主机中,分别跑了两个进程:QQ 和 MSN。

  • 它们给 QQ 进程分配的端口为 8998,给 MSN 进程分配的端口为 7777;
  • 假如主机 1 想通过 QQ 给主机 2 的 QQ 发消息,那么它需要发到主机 2 的端口 8998 上;
  • 由于主机 2 端口 8998 对应 QQ 进程,因此发到端口 8998 的消息会在 QQ 进程上被接收。
  • 如果主机 1 发到了主机 2 的 7777 端口上,消息就会给 7777 端口对应的 MSN 进程,但 MSN 不会接收来自 QQ 的消息,所以这个消息被视为垃圾消息,于是就丢了。(除非 MSN 上有对应的模块可以处理这个消息,给它转到 QQ 对应的地方)

在这里插入图片描述


一段历史:QQ 的前身是 QICQ,和微软绑定的 MSN 类似,但由于微软的放任,加上时代的浪潮,QQ 获得了成长空间,逐渐羽翼丰满。可以说,QQ 抓住了这个机会,同时也非常注重风险防范。



参考资料

狂神说 - 网络编程:https://www.bilibili.com/video/BV1LJ411z7vY

Java 8 帮助文档:https://docs.oracle.com/javase/8/docs/api/


http://www.ppmy.cn/ops/143965.html

相关文章

2024年云计算的发展趋势如何?

2024年云计算的发展趋势 在这个瞬息万变的科技时代,你是否也曾想过,云计算的发展究竟对我们每一个人意味着什么?它不仅是存储和计算能力的提升,更是整个行业的未来构建与转型之道。接下来,我们将一起探索2024年云计算…

3D开发工具HOOPS助力造船业加速设计与数字化转型

随着造船业对设计、高效精准建模和快速原型开发的需求不断增加,先进的3D技术逐渐成为推动行业创新的核心工具。Tech Soft 3D的HOOPS SDK作为行业领先的开发平台,已被NAPA、Herbert-ABS和三菱造船有限公司等全球造船业领导者所采用,帮助企业加…

lpips使用笔记

LPIPS指的是 Learned Perceptual Image Patch Similarity(学习感知图像块相似度),它是一种用于衡量两张图像之间感知相似度的指标。 1. 安装 pip install lpips 2. 使用 import torch import lpips# 加载预训练的 LPIPS 模型 loss_fn lp…

Fabric8 Kubernetes Client 7.0.0内存泄漏深度分析与案例实践

Fabric8 Kubernetes Client 7.0.0内存泄漏深度分析与案例实践 摘要 在构建基于 Vert.x Http Proxy 开发业务聚合网关时,我们面临了内存泄漏挑战,该网关主要负责对接 Kubernetes API 并提供API服务。本文将介绍我们如何通过heapdump分析、普罗米修斯监控…

彻底认识和理解探索分布式网络编程中的SSL安全通信机制

探索分布式网络编程中的SSL安全通信机制 SSL的前提介绍SSL/TLS协议概述SSL和TLS建立在TCP/IP协议的基础上分析一个日常购物的安全问题 基于SSL的加密通信SSL的安全证书SSL的证书的实现安全认证获取对应的SSL证书方式权威机构获得证书创建自我签名证书 SSL握手通信机制公私钥传输…

flask before_request 请求拦截器返回无值则放行,有值则拦截

环境 Python 3.11.5 Flask 2.2.2完整代码如下: from flask import Flask, make_response, Blueprintapp Flask(__name__) user_blue Blueprint(user, __name__, url_prefix/api/user) user_blue.before_request def befor…

RTMP、RTSP、RTP、HLS、MPEG-DASH协议的简介,以及应用场景

​实时视频传输协议 1. RTMP(Real Time Messaging Protocol) 简介:RTMP是由Adobe公司开发的实时消息传输协议,主要用于流媒体数据的传输。它基于TCP传输,具有低延迟、高可靠性的特点。特点:RTMP支持多种视…

汽车高分子材料光老化试验方法汇总

材料老化测试的重要性 材料老化测试是材料科学中的一项关键技术,它涉及对材料在自然环境下长期使用后性能变化的预测和评估。这项技术对于橡胶、塑料、绝缘材料等的热氧老化,以及电子元件和塑料产品的换气老化至关重要。光老化测试模拟了太阳光、温度和湿…