分配给套接字的IP地址与端口号

2023-11-11

IP 是 Internet Protocol(网络协议)的简写,是为收发网络数据而分配给计算机的值。

端口号并非赋予计算机的值,而是为区分程序中创建的套接字而分配给套接字的序号。

1.网络地址(Internet Address)

为使计算机连接到网络并收发数据,必须为其分配IP地址。

IP地址分为两类:

  • IPv4(Internet Protocol version 4): 4 4 4 字节地址族
  • IPv6(Internet Protocol version 6): 16 16 16 字节地址族

IPv4 与 IPv6 的差别主要是表示IP地址所用的字节数,目前通用的地址族为 IPv4。IPv6 是为了应对2010年前后IP地址耗尽的问题而提出的标准,IPv6 的普及将需要更长时间。

IPv4 标准的 4 4 4 字节IP地址分为网络地址主机地址,且分为 A A A B B B C C C D D D E E E 等类型。下图展示了 IPv4 地址族,一般不会使用已被预约了的 E E E 类地址,故省略。

在这里插入图片描述

网络地址(网络ID)是为区分网络而设置的一部分IP地址。假设向 WWW.SEMI.COM 公司传输数据,该公司内部构建了局域网,把所有计算机连接起来。因此,首先应向 SEMI.COM 网络传输数据,也就是说,并非一开始就浏览所有 4 4 4 字节IP地址,进而找到目标主机;而是仅浏览 4 4 4 字节IP地址的网络地址,先把数据传到 SEMI.COM 的网络。SEMI.COM 网络(构成网络的路由器)接收到数据后,浏览传输数据的主机地址(主机ID)并将数据传给目标计算机。下图展示了数据传输过程。

在这里插入图片描述

某主机向 203.211.172.103 和 203.211.217.202 传输数据,其中 203.211.172 和 203.211.217 为该网络的网络地址。所以,“向相应网络传输数据”实际上是向构成网络的路由器(Router)或交换机(Switch)传递数据,由接收数据的路由器根据数据中的主机地址向目标主机传递数据。

若想构建网络,需要一种物理设备完成外网与本网主机之间的数据交换,这种设备便是路由器或交换机。它们实际上也是一种计算机,只不过是为特殊目的而设计运行的,因此有了别名。所以,如果在我们使用的计算机上安装适当的软件,也可以将其用作交换机。另外,交换机比路由器功能要简单一些,而实际用途差别不大。

2.网络地址分类与主机地址边界

只需通过IP地址的第一个字节即可判断网络地址占用的字节数,因为我们根据IP地址的边界区分网络地址,如下所示:

  • A A A 类地址的首字节范围: 0 ∼ 127 0 \sim 127 0127
  • B B B 类地址的首字节范围: 128 ∼ 191 128 \sim 191 128191
  • C C C 类地址的首字节范围: 192 ∼ 223 192 \sim 223 192223

还有如下这种表述方式:

  • A A A 类地址的首位以 0 0 0 开始
  • B B B 类地址的前 2 2 2 位以 10 10 10 开始
  • C C C 类地址的前 3 3 3 位以 110 110 110 开始

正因如此,通过套接字收发数据时,数据传到网络后即可轻松找到正确的主机。

3.用于区分套接字的端口号

IP用于区分计算机,只要有IP地址就能向目标主机传输数据,但仅凭这些无法传输给最终的应用程序。

计算机中一般配有 NIC(Network Interface Card,网络接口卡)数据传输设备。通过 NIC 向计算机内部传输数据时会用到 IP。操作系统负责把传递到内部的数据适当分配给套接字,这时就要利用端口号。也就是说,通过 NIC 接收的数据内有端口号,操作系统正是参考此端口号把数据传输给相应端口的套接字,如下图所示。

在这里插入图片描述

端口号就是在同一操作系统内为区分不同套接字而设置的,因此无法将 1 1 1 个端口号分配给不同套接字。

另外,端口号由 16 16 16 位构成,可分配的端口号范围是 0 ∼ 65535 0 \sim 65535 065535。但 0 ∼ 1023 0 \sim 1023 01023 是知名端口(Well-known PORT),一般分配给特定应用程序,所以应当分配此范围之外的值。

另外,虽然端口号不能重复,但TCP套接字和UDP套接字不会共用端口号,所以允许重复。例如,如果某TCP套接字使用9190号端口,则其他TCP套接字就无法使用该端口号,但UDP套接字可以使用。

总之,数据传输目标地址同时包含IP地址和端口号,只有这样,数据才会被传输到最终的目的应用程序(应用程序套接字)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分配给套接字的IP地址与端口号 的相关文章

  • PHP/mysqli:使用 mysqli_stmt_bind_param() 插入 IP 地址

    我有一个数据库表 其中包含一个无符号整数字段来存储访问者的 IP 地址 user ip INT 10 UNSIGNED DEFAULT NULL 下面是尝试存储 IP 地址的 PHP 代码片段 ipaddr SERVER REMOTE AD
  • JAVA:如何创建 http url 连接选择要使用的 IP 地址

    我在多个 NIC 上配置了一个公共 IP 地址池 在我的 JAVA 项目中 该项目在 LINUX 计算机上运行 我需要从池中选择一个特定的 IP 地址 并使用该 IP 创建一个 HttpURLConnecion 此外 我将在池上循环 每次使
  • 当有多个 IP (.NET) 时选择 HTTP 请求使用哪个 IP

    我正在编写一个 NET 程序 它将在具有多个 IP 地址的计算机上运行 该程序向给定的网址发出 HTTP 请求 我想选择我使用的IP地址 这样我就可以确定哪个IP地址将出现在其他服务器的日志上 建议 我相信你可以通过提供一个来强制本地端点B
  • 未在虚拟机内分配外部 IP

    我正在尝试设置几个 Centos 6 虚拟机 我为它们分配了静态 IP 但运行 ifconfig 时 我看不到外部 IP 只看到内部 IP Google 不允许这种功能吗 除了Anderson所说的之外 这是从实例本身查询外部IP的命令 c
  • 如何将 Cocoa/Mac 应用程序移植到 Windows?

    如何将 Cocoa Mac 应用程序移植到 Windows 我的意思是你会怎么做 假设应用程序是用 Objective C 和 Cocoa 编写的 没有什么花哨的事情发生 没有可以分解的 引擎 等等 从头开始重写 我不认为 Mac 和 Wi
  • 如何杀死 Linux 中特定端口上运行的进程?

    我尝试使用关闭tomcat shutdown sh来自雄猫 bin目录 但发现服务器没有正常关闭 因此我无法重新启动我的 tomcat 正在端口上运行8080 我想杀死正在运行的tomcat进程8080 我首先想要获得在特定端口 8080
  • 如何获取Linux中进程或端口的网络带宽使用情况

    我想获取每个进程的网络带宽使用情况 我找了很多这方面的资料 比如iftop nethogs http nethogs sourceforge net Linux进程浏览器 http sourceforge net projects proc
  • 如何使用 Python 在 Cloud9 中声明端口

    我刚开始使用Cloud9 IDE http c9 io c9 到目前为止 除了一些小问题之外 它看起来很棒 我从文档中看到 要启动一个简单的node js http服务器 您必须传递process env PORT来代替常规端口 例如 80
  • 将 QTcpSocket 绑定到特定端口

    我正在通过一个连接QTcpSocket to a QTcpServer 我可以在服务器端指定侦听端口 但客户端会选择随机端口进行连接 我尝试过使用该方法QAbstractSocket bind但这没有什么区别 这是我的代码 void Con
  • 在 Linux/Ubuntu 计算机上通过 Python/Django 设置网络设置

    我正在为嵌入式计算机开发一个简单的网络界面 计算机将附带一个静态默认 IP 然后需要由可能不懂技术 Linux 的安装技术人员进行更新 基本上我需要从 Django 应用程序更改以下系统设置 IP地址 Subnet 默认网关 DNS 服务器
  • 为什么使用HTTP协议时需要指定端口号?

    即使我们使用HTTP协议 为什么还需要用IP地址指定端口号 例如 http xyz 8080 这到底是什么意思 我们已经知道 在使用 HTTP 时 请求将在端口 80 上提供服务 那么为什么我们要显式指定端口呢 HTTP 的默认端口为 80
  • Node.js 未处理的“错误”事件

    我编写了一个简单的代码并将其保存在文件 try js 中 var http require http var makeRequest function message var options host localhost port 8080
  • 如何抑制Windows防火墙的Windows安全警报?

    当我从这里找到的 ZeroMQ 指南中用 C 创建 Hello World 示例时 http zguide zeromq org page all Ask and Ye Shall Receive http zguide zeromq or
  • 将 CIDR 地址转换为子网掩码和网络地址

    给定一个 CIDR 地址 例如192 168 10 0 24 如何确定掩模长度 24 如何确定掩码地址 255 255 255 0 如何确定网络地址 192 168 10 0 它被 apache utils 覆盖 看这个网址 http co
  • 为什么 SFTP 的默认端口号是 22? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 为什么 SFTP 的默认端口号是 22 这有什么具体原因吗 这是默认的SSH http en wikipedia org wiki Sec
  • 路由是否会影响具有绑定源地址的套接字?

    假设我有两个网络接口 eth0有地址10 0 0 1 eth1有地址192 168 0 1 Using route or ip route add我已将其设置为路由 所有地址至eth0 1 2 3 4只为了eth1 所以数据包到1 2 3
  • 使用 Python 查找 LAN 上的活动节点

    我正在创建一个与 Python 2 7 和 Windows 中的 IP Messenger 相同的 Messenger 我想要与 IP Messenger 使用的功能相同的功能查找通过 LAN 运行相同软件的系统但我无法理解这项技术 有人可
  • 正则表达式匹配IP地址[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我是正则表达式的新手 我想使用preg match函数用于查找字符串是否为 IP 地址 例如 string 10 0 0 1 preg m
  • IP保持不变

    我正在尝试通过代码连接到 Tor 并更改我的身份 到目前为止我得到的结果是我连接成功但无法更改我的身份 这是我的代码 import socket import socks import httplib def connectTor sock
  • 多个客户端如何同时连接到服务器上的一个端口(例如 80)? [复制]

    这个问题在这里已经有答案了 我了解端口工作原理的基础知识 但是 我不明白的是多个客户端如何同时连接到端口 80 我知道每个客户端都有一个唯一的 对于他们的机器 端口 服务器是否从可用端口回复客户端 并简单地声明回复来自 80 这是如何运作的

随机推荐

  • KiCad使用笔记(05)-PCB绘制

    文章目录 绘图过程 导入网表 绘制PCB边框 摆放元件 添加导线 交互式布线 添加铺铜 放置过孔 检测PCB 整理丝印 生成钻孔文件 生成光绘文件 相关视频教程 绘图过程 导入网表 绘制PCB边框 PCB边框放置在Edge Cuts层 可以
  • Java课题笔记~ SpringBoot简介

    1 入门案例 问题导入 SpringMVC的HelloWord程序大家还记得吗 SpringBoot是由Pivotal团队提供的全新框架 其设计目的是用来简化Spring应用的初始搭建以及开发过程 原生开发SpringMVC程序过程 1 1
  • useEffect实现数据请求刷新的几种方法

    请求数据入参变化的情况下重新请求数据的情景下useEffect的几种写法 1 函数在useEffect里面 const query useEffect gt function fetchData return https hn algoli
  • Redis-大key解决策略

    大key的定义 首先大key不是key很大而是key对应的value值很大 一般而言如果String类型值大于10KB Hash Set Zset List类型的元素的个数大于5000个都可以称之为大key 大key的危害 客户端超时等待
  • 通过示例学习 PyTorch

    通过示例学习 PyTorch 本教程通过独立的示例介绍 PyTorch 的基本概念 PyTorch 的核心是提供两个主要功能 n 维张量 类似于 numpy 但可以在 GPU 上运行 自动区分以构建和训练神经网络 我们将使用完全连接的 Re
  • 自动化测试的一些面试题分享

    一 Web自动化测试 1 Selenium中hidden或者是display none的元素是否可以定位到 不能 可以写JavaScript将标签中的hidden先改为0 再定位元素 2 Selenium中如何保证操作元素的成功率 也就是说
  • sqrt函数实现之卡马克方法

    sqrt函数的实现主要有三种方式 二分法 牛顿法 卡马克方法 卡马克方法 这里主要介绍高效的卡马克方法 卡马克方法起源于 雷神之锤III竞技场 中使用的平方根倒数速算法 下列代码是平方根倒数速算法在 雷神之锤III竞技场 源代码中的应用实例
  • HashSet中存储复杂类型对象

    这个话题还是从一个有问题的代码中引申出来的 原代码如下 import java util class TreeSetTest public static void main String args HashSet hs new HashSe
  • java 内存偏移量_如何计算静态变量的内存地址相对其Class对象内存地址的偏移量呢...

    我在一篇文章中看到这么一段话 我想验证一下 对于HotSpot VM的对象模型 静态字段的 偏移量 就是 JDK 6或之前 相对该类对应的InstanceKlass 实际上是包装InstanceKlass的klassOopDesc 对象起始
  • 关于32单片机时钟使能问题

    事实上 对于32单片机也好 51单片机也好 对于寄存器的操作 都是要进行使能时钟的 具体原因可以百度一下 只不过 51单片机就一个时钟系统 默认所有寄存器都是处于 开 状态 这样就加大了它的功耗 而32单片机寄存器很多 就必须 给每一组寄存
  • MyBatis-Plus复杂条件查询---Example

    目录 概要 Example 类的使用 1 导入依赖 2 创建 Example 对象 3 设置查询条件 4 设置排序规则 5 执行查询 6 分页查询 总结 概要 tk mybatis mapper entity Example 是 MyBat
  • 使用ViewPager+Fragment+仿网易云音乐的tab选项栏来实现多屏滑动

    ViewPager Fragment 仿网易云音乐的选项栏实现多屏滑动 效果图 工程 源码链接
  • C++中四种强制类型转换问题

    参考之前写的博客 C C 中强制类型的转换 static cast Littlehero 121的博客 CSDN博客 参考大神博客 C 中的强制类型转换 原野追逐 博客园 C 四种强制类型转换总结 详细介绍可以参考博客 C 四种强制类型转换
  • JPA主键生成策略介绍

    JPA主键生成策略 引言 1 依赖 2 GeneratedValue注解 2 1 主键生成策略 strategy 2 2 主键生成器 generator 3 GenerationType 3 1 GenerationType TABLE 3
  • 微信小程序的介绍与环境配置

    1 微信小程序的介绍 1 1 为什么是微信小程序 微信有海量 且粘性很 在微信 开发产品更容易触达 推 app 或公众号的成本太 开发适配成本低 4 容易 规模试错 然后快速迭代 5 跨平台 1 2 微信小程序历史 2016年1 11 微信
  • 彻底搞懂 SpringBoot jar 可执行原理

    spring boot maven plugin SpringBoot 的可执行jar包又称fat jar 是包含所有第三方依赖的 jar 包 jar 包中嵌入了除 java 虚拟机以外的所有依赖 是一个 all in one jar 包
  • 2017好用的jQuery

    1 jQuery ganttView jQuery ganttView插件是一个非常轻量级的插件 用于在纯HTML中创建甘特图 不需要矢量图形或图像 该插件支持拖动并调整甘特图块和回调的大小以捕获更新的数据 2 SweetDropdown
  • linux为什么会丢log,logrotate转储日志丢了——Linux logrotate的使用注意

    注 本文基于CentOS 7 2编写 logrotate版本为logrotate 3 8 6 6 el7 x86 64 logrotate用于日志转储 可以根据用户配置的规则 将日志转储 或者删除 防止陈年旧账占满磁盘空间 下面介绍一些注意
  • Nacos启动报错

    Nacos启动报错问题的解决方案 nacos官网得知环境要求为jdk1 8 maven3 2 x 为了避免采坑 版本尽量使用官网推荐的 直接上报错 如下 org springframework beans factory Unsatisfi
  • 分配给套接字的IP地址与端口号

    文章目录 1 网络地址 Internet Address 2 网络地址分类与主机地址边界 3 用于区分套接字的端口号 IP 是 Internet Protocol 网络协议 的简写 是为收发网络数据而分配给计算机的值 端口号并非赋予计算机的