车总,我有个问题想向您请教一下。都说端口号是操作系统进行抽象,用来定位一个进程。那么当一台主机上有两张网卡时,每张网卡上绑定了一个IP地址。那么如果访问不同IP地址的同一端口,比如80,应该不会定位到同一个程序吧。那么端口号就应该是针对于每一张网卡进行的进程抽象,而不是操作系统对每一个进程的抽象吧,不知道这样子理解有没有什么问题?

私信太多无法一一回复,请各位见谅。这个问题特别有讨论的价值,分享给有兴趣的同学。当计算机接收到报文时,需要将这个报文递交(Deliver)给某个特定的进程。计算机操作系统管理进程的方法,和公安系统管理人口很类似。为了唯一地识别一个公民,每个公民都有一个独一无二的身份证号,比如31010xxxxxxxxxxx,每个号码都是唯一的,这个身份证号就是人口管理系统的主键(Master Key)。只要把任意一个合法的身份证号输入查询系统,返回值一定是一个,而不能是多个。如果有多个返回值,那么这个系统估计是假的!操作系统,也给每个进程分配一个独一无二的进程号(Process ID),其中包括操作系统自身的系统进程,以及由用户执行的用户进程。如果报文里携带进程号,操作系统(TCP/IP协议栈)只要把报文转交给该进程号对应的进程就可以了。但是遗憾的是,报文里无论是以太帧头、IP头、TCP头、以及应用层并没有携带进程号,那么操作系统如何能将报文准确无误地转交给真正的接收进程?这难不住机智而聪明的操作系统设计大师,大师给每个进程提前喊话:各位老少爷们,如果各位想与外界通信,必须使用Bind(address,port)函数,将自己的进程号与本地的IP地址、端口号绑定起来。否则,后果自负! 注释:上文的外界,可以是同一台计算机上的其它进程,也可以是互联网上的任何计算机上的进程。小弟(进程)听到老大(操作系统)发话,个个严格遵守规则。有一个进程A是这么做的:Bind (‘1.1.1.1’, 50007),这个系统调用消息携带该进程的进程号ID= 165364,发给了操作系统TCP/IP协议栈。操作系统懒洋洋地拿出一个本子记录一下:(1.1.1.1,50007)--------165364注释:1.1.1.1 是IP地址,50007是端口号稍后当操作系统TCP/IP协议栈接收到一个IP报文,通过提取目的IP地址(位于IP头)、目的端口号(位于TCP头),这两者的组合恰好为(1.1.1.1,50007)。操作系统查询一下小本子,立马就得知这是进程号= 165364进程A的,然后通知该进程A前来将报文取走。进程B也想如法炮制:Bind (‘1.1.1.1’, 50007),很遗憾,操作系统拒绝了。拒绝的消息如下:“builtins.OSError: [WinError 10048] 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。”意味着(1.1.1.1, 50007)这个组合能唯一识别一个进程,这两者的组合就是一个主键(Master Key)。通俗地说,在数据库管理系统,主键可以唯一锁定一条记录。进程B(进程ID= 168323)心有不甘,发现计算机还有其它接口地址2.2.2.2,于是通过Bind (‘2.2.2.2’, 50007),这次成功了。操作系统老爷爷又颤颤巍巍掏出小本子记录了下来:(2.2.2.2,50007)--------168323这样当有(2.2.2.2 , 50007)组合报文到达时,操作系统可以将其转交给进程号= 168323的进程B。问题来了,进程A与进程B是什么关系?进程A、B可以是代码完全不同的程序,也可以是代码相同的程序,在自己独立的内存空间运行的不同实列(Instance)。好比你同时打开多个Word程序,这些Word程序使用相同的代码,但是他们是多个Word实例。问题又来了,如果进程A的代码真的是那样编码,如果放到其它计算机上执行,会遇到问题,因为其它计算机的IP地址可能≠1.1.1.1。为了提高代码的健壮性、可移植性,通常会使用这样的代码:Bind (‘ ’, 50007)其中‘ ’表示任何IP地址。换句话说,不Care计算机的接口IP地址。这个IP地址可以是127.0.0.1,也可以是1.1.1.1, 也可以是192.168.1.1,随便多少都行。那么这个程序可以放到任何计算机上执行。在同一台机器上一个进程B也这样执行:Bind (‘ ’, 50007),可以哇?不可以,因为与进程A冲突!进程B可以Bind (‘ 1.1.1.1’, 50007),可以哇?同样不可以,依然与进程A冲突。因为1.1.1.1是所有IP地址的子集。进程B心慌了,那怎么可以呢?操作系统老爷爷不紧不慢地说,只要别再使用端口50007就可以了。进程B于是执行代码如下:Bind (‘ ’, 50008),可以哇?恭喜你,当然可以!通常服务器代码,都使用类似Bind (‘ ’, 50007) 方式执行,所以50007这个端口号可以唯一识别一个进程,这就是端口号可以唯一识别进程号的由来!

tcp c++ bind 端口_计算机端口到底是什么?相关推荐

  1. 怎样知道邮箱的端口_网络端口介绍

    1. 什么是端口 端口就好一个房子的门,是出入这间房子的必经之路. 如果一个程序需要收发网络数据,那么就需要有这样的端口 在linux系统中,端口可以有65536(2的16次方)个之多! 既然有这么多 ...

  2. mac 查看端口_交换机端口对应的mac地址与IP地址

    1.MAC地址表 通俗的讲,没太交换机都有一个MAC地址表,该表记录了交换机每个端口与终端设备的MAC地址的映射关系,交换机的工作原理就是跟据MAC表中的端口与主机地址的映射关系来选择目的端口,进行二 ...

  3. 如何启用计算机端口,Win7系统下开启计算机端口的方法

    计算机端口是计算机与外界通讯交流的出口,有时候由于操作的失误会把计算机的端口关闭,这时候就需要用户手动去开启.在Win7系统下,用户该如何开启端口呢?下面小编为大家介绍两种比较实用的方法. Win7系 ...

  4. 计算机常识之计算机端口(Port)

    通常我们所说的端口就是指计算机端口.计算机端口是英文port的意译,可以认为是计算机与外界通讯交流的出口. 端口又可分为三大类:公认端口(Well Known Ports).注册端口(Register ...

  5. 网络运维之计算机端口

    网络运维之计算机端口 一.计算机端口介绍 1.定义 2.端口理解 3.端口分类 二.传输层TCP/UDP 1.TCP/UDP解释 2.TCP连接的三次握手 3.TCP/UDP应用 三.常用的默认端口合 ...

  6. win10如何打开计算机端口,win10系统开启计算机端口的操作方法

    win10系统开启计算机端口的操作方法? 很多win10用户在使用电脑的时候,会发现win10系统开启计算机端口的的现象,根据小编的调查并不是所有的朋友都知道win10系统开启计算机端口的的问题怎么解 ...

  7. win7如何开计算机端口,win7系统开启计算机端口的操作方法

    win7系统使用久了,好多网友反馈说需要对win7系统开启计算机端口进行设置.对于win7系统开启计算机端口有什么好的办法可以进行设置呢?其实win7系统开启计算机端口的操作方法,我们只需要1.首先点 ...

  8. win7如何开计算机端口,win7旗舰版64位系统快速开启计算机端口的两种方法

    不知道大家对于 win7系统 计算机端口的了解有多少,PConline的小编先跟大家普及一下,所谓的计算机"端口"是英文port的义译,可以认为是计算机与外界通讯交流的出口.分软件 ...

  9. TCP/IP协议学习之计算机中的端口

    端口的概念 在网络技术中,端口(Port)大致有两种意思:一是物理意义上的端口,比如,ADSL Modem.集线器.交换机.路由器用于连接其他网络设备的接口,如RJ-45端口.SC端口等等.二是逻辑意 ...

最新文章

  1. PowerShell-5.网络请求
  2. 三十八、Java集合中的ConcurrentHashMap
  3. 1-STM32+W5500+GPRS物联网开发基础篇-工控板简介
  4. Intel和AMD的最新视频编码/解码基准测试
  5. java和Js中的类型转换_JavaScript 类型转换
  6. 【渝粤教育】广东开放大学 社会工作行政 形成性考核 (52)
  7. 将博客文章转变为电子书
  8. sql 删除字段中下划线_SQL基础教程知识点总结
  9. node 连接mongodb
  10. Python——数据存储:JSON操作
  11. python能制作ppt动画效果吗_你听说过Python可以做动画吗
  12. 上海市计算机二级vb试题及答案,上海计算机二级VB试题
  13. 西门子免授权CNC数控系统数据采集c#、C、python都支持,可支持再各种操作系统上运行,无须西门子OPC,支持828D 840dsl 808 802dsl 840d 810d 西门子数控DNC程序
  14. 关于kali Linux缺少pyrit或者pyrit无法定位的问题
  15. 裸奔真的会中木马病毒 挖矿病毒 wup.exe 程序文件占用电脑资源
  16. 多家快递如何同时批量查询呢
  17. 网页脚本注入执行任意代码
  18. 个人计算机cache是什么意思,cache在计算机中的作用是什么?
  19. GNSS-INS组合导航:KF-GINS(一)
  20. 三星s9电池测试软件,三星Galaxy S9深度解析(二)配置、软件以及电池

热门文章

  1. 满足什么条件的两个量才可以被分类?
  2. php domain cookie cross-domian,跨域(cross-domain)访问 cookie (读取和设置)
  3. c mysql insert语句_MySQL_mysql insert详细讲解,INSERT语法 INSERT [LOW_PRIORITY |DELA - phpStudy...
  4. 一起学nRF51xx 1 - GPIO
  5. 计算机课四年级说课稿,小学信息技术说课稿
  6. android学习第一天
  7. 十三五乐山全力推进智慧城市和新能源汽车等项目
  8. BZOJ 1226: [SDOI2009]学校食堂Dining [DP 状压]
  9. Python3中的内置函数
  10. JS 获取中英字符串字节长度