• 传输层——再谈端口号


    小白苦学IT的博客主页⭐

    初学者必看:Linux操作系统入门⭐

    代码仓库:Linux代码仓库⭐

    ❤关注我一起讨论和学习Linux系统

    前言

    在计算机网络中,端口号扮演着至关重要的角色。尤其在传输层,端口号成为了区分不同应用程序或服务的唯一标识。通过端口号,操作系统能够准确地将数据流分配给相应的进程或服务。这种机制保证了网络数据的准确传输和高效处理。

    再谈端口号

    端口号(Port)标识了一个主机上进行通信的不同的应用程序;

    在TCP/IP协议中, 用 "源IP", "源端口号", "目的IP", "目的端口号", "协议号" 这样一个五元组来标识一个通信(可以通过netstat -n查看);

    端口号范围划分

    端口号的范围被划分为几个不同的区间,每个区间都有其特定的用途和权限要求。通常,0到1023的端口号被称为知名端口号或系统端口号,这些端口号被预留给一些特定的服务使用,如HTTP、FTP等。而1024到49151的端口号被称为注册端口号,这些端口号可以由用户自行定义,但需要确保不与已有的服务冲突。49152到65535的端口号则被称为动态端口号或私有端口号,这些端口号通常用于临时性的通信需求。

    认识知名端口号

    有些服务器是非常常用的, 为了使用方便, 人们约定一些常用的服务器, 都是用以下这些固定的端口号:

    • ssh服务器, 使用22端口
    • ftp服务器, 使用21端口
    • telnet服务器, 使用23端口
    • http服务器, 使用80端口
    • https服务器, 使用443

    执行下面的命令, 可以看到知名端口号

    cat /etc/services

    我们自己写一个程序使用端口号时, 要避开这些知名端口号.

    两个问题

             1.一个进程是否可以bind多个端口号?

    答案是肯定的。一个进程可以绑定多个端口号,以提供不同的服务或处理不同的通信需求。例如,一个Web服务器进程可能同时监听80端口(用于HTTP服务)和443端口(用于HTTPS服务)。

            2.一个端口号是否可以被多个进程bind?

    通常情况下,一个端口号在同一时刻只能被一个进程绑定。这是为了确保数据传输的准确性和一致性。如果有多个进程试图绑定同一个端口号,操作系统通常会抛出错误或拒绝绑定请求。然而,在某些特殊情况下,如使用了端口共享技术或某些特定的网络编程模式,可能会实现多个进程共享同一个端口号的情况。但这种情况相对较少见,且需要谨慎处理以避免潜在的问题。

    两个重要命令

    Linux系统中,netstatpidof是两个非常实用的命令,分别用于查看网络状态和查找进程的进程号。以下是这两个命令的基本用法和一些示例。

    netstat命令

    netstat命令用于显示网络连接、路由表、接口统计等网络相关信息。其基本语法为:

    netstat [选项]

     

    下面是一些常用的选项:

    • -a:显示所有连接和监听端口。
    • -t:显示TCP连接。
    • -u:显示UDP连接。
    • -n:以数字形式显示IP地址和端口号,而不是主机名和服务名。
    • -p:显示每个连接的进程ID和进程名称。
    • -l:显示监听状态的连接。
    • -r:显示路由表。
    • -s:显示网络接口统计信息。
    示例:
    1. 显示所有连接和监听端口:

      netstat -a

    2. 显示TCP连接:

      netstat -t

    3. 显示UDP连接:

      netstat -u

    4. 显示与连接相关的进程:

      netstat -p

    5. 以数字形式显示IP地址和端口号:

      netstat -n

    你可以根据需要组合这些选项,以便查看所需的信息。例如,如果你想查看所有TCP连接以及与之相关的进程,你可以使用:

    netstat -tp

    pidof命令

    pidof命令用于查找指定名称的进程的进程号(PID)。其基本语法为:

    pidof [选项] 进程名称

     

    下面是一些常用的选项:

    • -s:仅返回一个进程号。
    • -c:仅显示具有相同“root”目录的进程。
    • -x:显示由脚本开启的进程。
    • -o:指定不显示的进程ID。
    示例:

    查找名为“gedit”的进程的PID:

    pidof gedit

    仅返回名为“firefox”的一个进程号(如果有多个):

    pidof -s firefox

    请注意,pidof命令只返回与指定进程名称匹配的PID,如果有多个进程具有相同的名称,它会返回所有这些进程的PID(除非使用了-s选项)。

  • 相关阅读:
    使用 Sealos 构建低成本、高效能的私有云
    【Python】多进程 AttributeError: Can‘t pickle local object
    Cannot deserialize value of type `java.util.Date` from String
    LLaMA模型之中文词表的蜕变
    JUC并发编程——阻塞队列(基于狂神说的学习笔记)
    浅析SR隧道路径批量构造方法
    倒计时1天 | 图技术如何赋能产业互联网创新?
    C# ASP.NET利用SQLDMO备份和还原数据库
    气传导耳机什么意思?备受好评的气传导耳机推荐
    [附源码]java毕业设计选课管理系统
  • 原文地址:https://blog.csdn.net/weixin_63181097/article/details/138006491