【计算机网络】网络通信中的端口号

news2024/9/23 17:15:50

文章目录

  • 一、引入端口号
  • 二、端口号的作用
  • 三、端口号的确定

在TCP/IP协议中,传输层有两个重要的协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP用于提供可靠的数据传输,而UDP则适合用于广播或对细节控制要求不高的应用传输。

为了确保传输层协议能够正确地将接收到的数据交给相应的应用程序,TCP和UDP都引入了端口号的概念,用来识别目标应用。

一、引入端口号

可以用寄送包裹来类比这个过程。邮递员(对应网络层的IP协议)根据收件地址(目标IP地址)将包裹(数据包)送到目标计算机。包裹抵达后,传输层协议会根据附带的端口号决定最终交给哪个应用程序。

我们举一个更具体的例子来说明:假设快递单上只写了家庭住址和一个姓氏,那么就无法准确判断包裹应该交给家庭中的哪位成员。同样,如果寄送到学校或公司,只写了一个姓氏而没有明确部门或接收人的全名,快递员也会遇到困难。在实际生活中,为了避免这些问题,邮政系统也通常要求详细的地址和全名,甚至在某些情况下还需要附上联系电话,以便区分重名的收件人。

类似地,在网络传输中,端口号相当于应用程序的“全名”,确保数据能够准确地交付给正确的应用。因此我们就可以根据端口号识别在传输层上一层的应用层中所需要处理的具体程序(一个程序可以使用多个端口)。

数据链路和IP中的地址,分别指的是MAC地址和IP地址。前者用来识别同一链路中不同的计算机,后者用来识别TCP/IP网络中互连的主机和路由器。在传输层中也有这种类似于地址的概念,那就是端口号。端口号用来识别同一台计算机中进行通信的不同应用程序。因此,它也被称为程序地址。


二、端口号的作用

TCP/IP的众多应用协议大多以客户端/服务端的形式运行。客户端(客户端(Client)具有客户的意思。在计算机网络中是提供服务和使用服务的一方。) 类似于客户的意思,是请求的发起端。而服务端(服务端(Server)在计算机网络中则意味着提供服务的程序或计算机。) 则表示提供服务的意思,是请求的处理端。另外,作为服务端的程序有必要提前启动,准备接收客户端的请求。否则即使有客户端的请求发过来,也无法做到相应的处理。

在这里插入图片描述
确认一个请求究竟发给的是哪个服务端,可以通过所收到数据包的目标端口号轻松识别。当收到TCP的建立连接请求时,如果目标端口为22,则转给sshd,如果是80则转给httpd。然后,这些守护进程会继续对该连接上的通信传输进行处理。上图是把传输协议的数据将被传递给HTTP应用层协议。

传输层协议通过端口号来识别这些正在通信的应用程序,并确保数据准确地传递给相应的程序。

在这里插入图片描述

每个运行的程序都会被分配一个唯一的端口号,TCP和UDP协议通过这些端口号来区分不同的应用。例如,Web浏览器使用HTTP服务时通常使用端口80,而SSH客户端通常使用端口22。传输层协议根据目标端口号,确保数据包能准确地到达运行该端口的应用程序,使得同一台计算机能够同时进行多种网络通信而不会发生混淆。

但是仅凭借端口号识别某一个通信是不够的。

在这里插入图片描述

上图中的通信是在①和②的通信是在两台计算机上进行的。它们的目标端口号相同,都是80。

例如打开两个Web浏览器,同时访问两个服务器上不同的页面,就会在这个浏览器跟服务器之间产生类似前面的两个通信。在这种情况下也必须严格区分这两个通信。因此可以根据源端口号加以区分。

而中③跟①的目标端口号和源端口号完全相同,但是它们各自的源IP地址不同。

此外,还有一种情况上图中并未列出,那就是IP地址和端口全都一样,只是协议号(表示上层是TCP或UDP的一种编号)不同。这种情况下,也会认为是两个不同的通信。

因此TCP/IP或UDP/IP通信中可以采用一个五元组来识别一个通信。它通常包括以下信息:

  1. 源IP地址: 数据报的发送者的IP地址。
  2. 源端口号: 发送者的端口号,用于标识源主机上的具体应用。
  3. 目的IP地址: 数据报的接收者的IP地址。
  4. 目的端口号: 接收者的端口号,用于标识目标主机上的具体应用。
  5. 协议号: 使用的传输协议(如TCP、UDP等)的标识符。

只要其中某一项不同,就被认为是其他通信。即这些信息共同定义了网络中的一个会话或连接。通过 netstat -n 命令,可以查看当前系统上的网络连接信息,包括IP地址和端口号等。

例如,运行 netstat -n 可能会显示如下内容:

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 192.168.1.10:54321      192.168.1.20:80         ESTABLISHED
udp        0      0 192.168.1.10:12345      192.168.1.20:53         ESTABLISHED

在这个例子中:

  • 源IP地址是 192.168.1.10
  • 源端口号是 5432112345
  • 目的IP地址是 192.168.1.20
  • 目的端口号是 80(HTTP)或 53(DNS)

Linux下cat /etc/services命令可以用于查看知名端口号。


三、端口号的确定

在实际进行网络通信时,要事先确定端口号。确定端口号的方法分为两种:

  1. 已知的标准端口号(Well-known Ports)

这些端口号通常是由特定的网络服务或协议所使用的,并且已被标准化。它们的范围为0到1023,例如:

  • HTTP 使用端口 80
  • HTTPS 使用端口 443
  • FTP 使用端口 21
  • SSH 使用端口 22

这些端口号是预先定义好的,客户端在与服务器通信时,通常不需要明确指定端口号,因为大家对这些标准端口已广泛了解。

  1. 动态或私有端口号(Dynamic/Private Ports)

这些端口号由应用程序或操作系统动态分配,通常用于客户端与服务器之间的临时通信。它们的范围为1024到65535**。服务端有必要确定监听端口号,但是接受服务的客户端没必要确定端口号。**例如,当一个客户端启动连接时,操作系统可能会随机为它分配一个未使用的端口号,这样可以避免与其他应用程序产生冲突。这些端口号通常用于短期通信,在通信完成后可以重新分配。

在这种方法下,客户端应用程序可以完全不用自己设置端口号,而全权交给操作系统进行分配。操作系统可以为每个应用程序分配互不冲突的端口号。例如,每需要一个新的端口号时,就在之前分配号码的基础上加1。这样,操作系统就可以动态地管理端口号了。

根据这种动态分配端口号的机制,即使是同一个客户端程序发起的多个TCP连接,识别这些通信连接的五元组也不会全部相同。

端口号由其使用的传输层协议决定。因此,不同的传输协议可以使用相同的端口号。例如,TCP与UDP使用同一个端口号,但使用目的各不相同。这是因为端口号上的处理是根据每个传输协议的不同而进行的。

当数据从传输层进入IP层时,首先会检查IP首部中的协议号,再根据该协议号将数据传递给相应的协议模块。例如,如果协议号指示为TCP,数据将被传递给TCP模块进行处理;如果协议号指示为UDP,则数据会交给UDP模块进行处理。因此,即使相同的端口号被TCP和UDP同时使用,数据处理仍然是各自独立的,不会产生冲突或干扰。

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

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

相关文章

labview对位项目

带角度对位 1、上下拍照对照 项目类型:模组、PACK入箱,以下以模组入箱为例 项目目标:机器人抓起模组,通过上相机定位箱体上的销钉,通过下相机定位模组上的端板孔,计算出旋转偏移量XYR,让模组上…

苹果能引领端侧AI大模型时代吗?

苹果能引领端侧AI时代吗? 这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】 北京时间9月10日凌晨,苹果正式发布了iPhone 16,这是苹果第一款真正意义上的 …

精品PPT | 离散制造行业智能工厂总体解决方案

一、建设背景 离散制造业,包括机械制造业、汽车制造业和家电制造业等,其生产过程涉及多个不连续的工序,产品通常由多个零件装配而成。这类行业面临的挑战包括品种多、批量小、订单变化快、临时插单频繁以及外协件管理困难等问题,…

相机光学(三十七)——自动对焦原理

1.自动对焦的三种方式 目前在手机上采用的自动对焦系统包括反差对焦、相位对焦和激光对焦三种方案,下面我们来看一下它们的工作原理和相互之间的区别是什么。 1.1反差对焦【CDAF】- Contrast Detection Auto Focus 反差对焦是目前普及率最高、使用最广泛、成本相对…

Leetcode 701-二叉搜索树中的插入操作

给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。 注意,可能存在多种有效的插入方式&a…

QT之QML学习五:添加自定义Qml组件

开发环境: 1、Qt 6.7.2 2、Pyside6 3、Python 3.11.4 4、Windows 10 重要的事情说三遍,使用自定义qml参考链接: Qt官网参考网址!!! 重要的事情说三遍,使用自定义qml参考链接: Qt官网参考网址!!! 重要的事情说三遍,使用自定义qml参考链接: Qt官网参考网址!!!…

2024年华为杯数学建模研赛 最全赛中助攻|选题建议+思路+代码+成品论文预定

2024年华为杯研究生数学建模竞赛(以下简研赛)将于9月21日上午8时正式开始。 下文包含:2024研赛思路解析​、研赛参赛时间及规则信息说明、好用的数模技巧及如何备战数学建模竞赛 C君将会第一时间发布选题建议、所有题目的思路解析、相关代码…

【2024】Benchmarking Foundation Models with Language-Model-as-an-Examiner

信息 阅读目的:李娟子老师团队,了解模型中的知识评测的工作 白雨时1*、嘉豪英2*、曹义心2、吕新1、何玉泽1, 王笑之1 、于吉凡1 、曾凯生1 、小易佳3 , Haozhe Lyu 4张嘉荫1李娟子1 , Lei Hou 1 凶 1清华大学,北京,中国2新…

AI菜鸟向前飞 — LangGraph系列之一:深入浅出解读Graph(一)

前言 LangGraph是一个使用 LLM 和 LangChain 构建有状态多参与者应用程序的库。 LangChain 允许您使用 LCEL(LangChain 表达式语言)构建链 AI菜鸟向前飞 — LangChain系列之六 - 深入浅出LCEL与Chain(上篇) AI菜鸟向前飞 — LangChain系列之七 - 深入…

ALIENTEK电容按键按键的介绍与驱动代码

目录 前言 电容触摸按键原理 硬件接线 检测电容触摸按键过程 驱动代码 tpad.h tpad.c main.c 按键扫描函数 前言 我没有独立的电容触摸按键模块,所以使用正点原子STM32F103ZET6精英版开发板上的电容触摸按键。采用STM32F103C8T6检测电容触摸按键&#…

WEB渗透权限维持篇-隐藏windows服务

往期文章WEB渗透权限维持篇-DLL注入\劫持-CSDN博客 WEB渗透权限维持篇-CLR-Injection-CSDN博客 WEB渗透权限维持篇-计划任务-CSDN博客 WEB渗透权限维持篇-DLL注入-修改内存中的PE头-CSDN博客 WEB渗透权限维持篇-DLL注入-进程挖空(MitreT1055.012)-CSDN博客 WEB渗透权限维持…

mysql设置数据库隔离级别及各个隔离级别的作用

一、通过命令设置隔离级别 # 设置全局隔离级别 set global transaction isolation level REPEATABLE READ; set global transaction isolation level READ COMMITTED; set global transaction isolation level READ UNCOMMITTED; set global transaction isolation level SE…

Reduce:一款开源的短网址平台!!【送源码】

今天给大家介绍一款开源的短网址平台,Coody Framework首秀,自写IOC、MVC、ORM、TASK、JSON、DB连接池、服务器。百毫秒启动,全项目仅2.5M(低配服可运行)。 前端采用Amaze UI,后端采用Coody Framework MVC&…

NGINX开启HTTP3,给web应用提个速

环境说明 linuxdockernginx版本:1.27 HTTP3/QUIC介绍 HTTP3是由IETF于2022年发布的一个标准,文档地址为:https://datatracker.ietf.org/doc/html/rfc9114 如rfc9114所述,http3主要基于QUIC协议实现,在具备高性能的同时又兼备了…

模拟面试后端开发复盘

目录 一:项目的系统开发和设计思路 二:Java的反射是什么?在项目中有用到吗? 三:多态的实现原理 四:项目中的redis是用在了哪里 五:Session和Cookie的区别,Cookie可以被修改吗&a…

socket通讯原理及例程(详解)

里面有疑问或者不正确的地方可以给我留言。 对TCP/IP、UDP、Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问: 什么是TCP/IP、UDP?Socket在哪里呢?Socket是什么呢&#xff1…

又一款强大好用的Shell脚本项目,支持Bash,Sh、Dash、Ksh等,甚至可以在编辑器中直接用,程序员必备!(附源码)

作为一个程序员,肯定经常都要和shell脚本打交道,Shell脚本可以帮我们自动化各种任务,但也经常有格式错误、拼写错误、逻辑错误等等麻烦,而且它不会告诉你错在哪里! 今天就给大家分享一个超级实用的开源项目 - ShellCh…

【笔记】自动驾驶预测与决策规划_Part2_基于模型的预测方法

基于模型的预测方法 0. 前言1. 预测系统概述2. 定速度预测3.定曲率预测4. 短时预测与长时预测5. 基于手工特征的意图预测6: 基于模型的轨迹预测 0. 前言 本文主要记录课程《自动驾驶预测与决策技术》的学习过程,难免会有很多纰漏,感谢指正。 课程链接&am…

C++那些事之精选68道面试题

有小伙伴问我要一些C的学习题目/面试题目,我这里总结了一下分享给大家,大家可以自行去回答下面的问题,看看可以解答多少个。 注:懒人版附代码与答案会在文末星球详细讲解。 大纲 基础概念面向对象编程STL(标准模板库&a…

如何加入PTP硬件时钟的组播组

首先要先判断当前机器是否能收到PTP时钟源发出的组播包 timeout 100 tcpdump -nni bond0 port 319 or port 320 -el -c 100抓包能抓到以下包信息,即能正常收到PTP时钟源发出的组播信息。其中的224.0.1.129即为组播地址 第一步正常了后,开始加入组播源 ip…