分配给套接字的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地址与端口号 的相关文章

  • 如何停止 adb 端口转发?

    可以转发端口adb forward tcp 8080 tcp 8080 但是我需要终止 adb 服务器来停止此转发吗 我正在寻找一种方法来停止 adb 中端口的转发 在设置之后 但不再需要转发时 Try adb forward remove
  • 使用 PHP 将 IP 地址存储在 MySQL 数据库中[重复]

    这个问题在这里已经有答案了 mysql 中 IP 地址的正确字段类型是什么 使用 PHP 存储它的正确方法是什么 本教程 http daipratt co uk mysql store ip address 可能对你有帮助 保存 IPv4
  • 无法打开选定的 VM 调试端口 (8700)。确保您没有运行 DDMS 或 eclipse 插件的另一个实例

    我正在尝试在 eclipse kepler 中执行 android 程序 但是 每次执行时我都会收到此消息 我按照大家对这个问题所说的做了 Making sure there is a line on windows Host file t
  • 端口和套接字有什么区别?

    这是我组织中的一位软件工程师提出的问题 我对最广泛的定义感兴趣 Summary TCP 套接字是一个端点instance由特定 TCP 连接或侦听状态上下文中的 IP 地址和端口定义 端口是虚拟化标识符定义服务端点 与服务不同 instan
  • 阻止 IP 地址访问 Heroku 上的 Flask 应用程序?

    我需要在我的网站上阻止一个 IP 地址 在 Heroku 上运行 Flask 应用程序 我看到我的服务器每秒有 50 个请求 这绝对不应该发生 我熟悉在 Apache 服务器上使用 htaccess 这里有类似的东西吗 Gunicorn 服
  • 端口 80 被我的 ISP 封锁,那么我的浏览器如何仍然工作?

    我知道当我请求 example com 时 我的浏览器实际上默认为 example com 80 但是 我的 ISP 阻止 80 端口侦听 那么如果端口 80 被阻止 我如何接收请求的响应 它不应该工作 不是吗 当您发出 HTTP 请求 实
  • 当有多个 IP (.NET) 时选择 HTTP 请求使用哪个 IP

    我正在编写一个 NET 程序 它将在具有多个 IP 地址的计算机上运行 该程序向给定的网址发出 HTTP 请求 我想选择我使用的IP地址 这样我就可以确定哪个IP地址将出现在其他服务器的日志上 建议 我相信你可以通过提供一个来强制本地端点B
  • 仅允许特定 IP 地址访问 JSP 文件/文件夹

    我使用 JSP 和 servlet 制作了一个 CMS 应用程序 我没有使用任何类型的框架 CMS 有 2 个部分 前端 管理员 后端 如果我把它托管在www example com 例如 那么我的所有前端站点都会向所有用户显示 But w
  • SNMP 错误,端口已在使用中

    我创建了一个 SNMP 代理模拟器应用程序 它对模拟设备使用端口号 161 有时会出现端口已使用异常 如何知道161端口是否繁忙 只需启动您的应用程序即可 如果它收到 BindException 则该端口正在使用中 如果没有 您的应用程序可
  • 在 Java 中创建 InetAddress 对象

    我正在尝试转换由 IP 号码或名称指定的地址 两者都是字符串 即localhost or 127 0 0 1 转化为Inet地址目的 没有构造函数 而是返回一个静态方法Inet地址 因此 如果我获得主机名 这不是问题 但如果我获得 IP 号
  • 如何杀死 Linux 中特定端口上运行的进程?

    我尝试使用关闭tomcat shutdown sh来自雄猫 bin目录 但发现服务器没有正常关闭 因此我无法重新启动我的 tomcat 正在端口上运行8080 我想杀死正在运行的tomcat进程8080 我首先想要获得在特定端口 8080
  • 每个域都有唯一的 IP 吗?

    我想知道每个域名地址是否都有唯一的IP地址 此外 这些IP位于哪里 这个重定向系统是如何工作的 当我们尝试通过写入域名来访问网站时 它有多少个重定向 谢谢 否 每个域没有自己的 IP 地址 多个域可以托管在同一台服务器上 并且位于同一 IP
  • IIS:添加功能

    我需要使用 IIS 7 0 中的 IP 地址和域限制功能编辑 IP 规则 但在我的 Windows 7 计算机上 我的 IIS 中不存在此功能 有谁知道如何向 IIS 添加此功能 我无法在任何地方找到下载 或 IIS 中用于添加功能的部分
  • 将 QTcpSocket 绑定到特定端口

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

    我正在为嵌入式计算机开发一个简单的网络界面 计算机将附带一个静态默认 IP 然后需要由可能不懂技术 Linux 的安装技术人员进行更新 基本上我需要从 Django 应用程序更改以下系统设置 IP地址 Subnet 默认网关 DNS 服务器
  • Windows 下 iOS 开发的替代方案 [重复]

    这个问题在这里已经有答案了 可能的重复 如何使用 Windows 开发机为 iPhone 进行开发 https stackoverflow com questions 22358 how can i develop for iphone u
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • 在Linux中的端口80上运行flask[重复]

    这个问题在这里已经有答案了 也许以前有过这个问题的答案 所以请重定向我 如果是这样的话 我正在考虑在端口 80 上运行 Flask 所以我检查了是否有任何东西正在使用端口 80 因为事实证明端口 80 没有运行 所以当我输入以下内容时 if
  • 如何使用 scapy 重新计算 IP 校验和? [复制]

    这个问题在这里已经有答案了 可能的重复 如何在不发送数据包的情况下计算数据包校验和 https stackoverflow com questions 5953371 how to calculate a packet checksum w
  • Android项目中使用java获取电脑的IP地址

    我在用ksoap2 android http code google com p ksoap2 android 我需要使用java获取IP地址 这样我就不必每次都手动输入它 我所说的 IP 地址是指 例如 如果我这样做ipconfig使用命

随机推荐

  • 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 网络协议 的简写 是为收发网络数据而分配给计算机的值 端口号并非赋予计算机的