ip能锁定一台物理机器,对应着一张网卡,外界发来的数据包网卡都会接收。但是问题来了,网卡给程序提供了接口,你监听一下我,要是有消息来了,我就转发给你。这样应用程序就能收到数据了。但是问题来了,程序A和程序B都需要监听网卡接发数据,网卡说那我把接到的数据都发给你两,你们自己看着办吧。好,小A小B都接受了。但是又来了CDEF......,不行了,每个包都被发到了所有应用程序,每个应用程序都累得不行,最终垮了。

  好,那网卡说我给你们加个表示吧,我们之间可以用一个号码来作为标识,我和小A之间就用1来标识,如果外界发给1号标识的数据我就转发给你,你监听我的时候得告诉我你监听的时1,我就转发1的数据包给你。好了其他的BCD...都自己弄一个标识号,只要不重复就行。这样大家都省事了。

  最后设计到安全,一个标识号只能被一个应用程序监听,因为如果小A程序和小B同时监听一个标识号号,那就坏了,我传的数据都被AB接到,这样数据安全性就没办法保证了。

  这个标识号就是端口,最初设计网络数据交换的设计者不知道是怎么想的。这是我的理解。

  其实网卡都是被系统层封装了,端口和进程之间的关系也是系统封装好的。我们只需要用socket就行,给定一个端口号就行了。其他的事都交给操作系统去做。

文字性的描述就是:

  端口是TCP/IP协议簇中,应用层进程与传输层协议实体间的通信接口。端口是操作系统可分配的一种资源;应用程序通过系统调用与某端口绑定后,传输层传给改端口的数据都被相应进程接收,相应进程发给传输层的数据都通过端口输出。

  为什么需要端口这个概念呢?在网络通信过程中,需要唯一识别通信两端的端点,就是使用端口识别运行于某主机中的应用程序。如果没有引入端口,则只能通过 进程号进行识别。进程号是系统动态分配的,不同的系统会使用不同的进程标识符,应用程序在运行之前不知道自己的进程号,如果需要运行后再广播进程号则很难 保证通信的顺利进行。而引入端口后,就可以利用端口号识别应用程序,同时通过固定端口号来识别和使用公共服务,如HTTP和FTP等。

这就是我的理解,希望大家指正拍砖。

最新文章

  1. 【分布式】Zookeeper请求处理
  2. 【HTML5】嵌入另一张HTML文档、通过插件嵌入内容、嵌入数字表现形式
  3. linux awk, xargs
  4. IE11下Forms身份认证无法保存Cookie的问题
  5. 遇到奇怪的C#/C/C++或者Java的bug可以去问问Coverity
  6. 线段树---HDU1394Minimum Inversion Number
  7. bootstarp模板02
  8. HelloPython
  9. Oracle day02 函数
  10. 高斯混合模型(GMM) - 混合高斯回归(GMR)
  11. mysql 开发基础系列19 触发器
  12. java学习之—栈匹配字符串符号
  13. zookeeper(3) zookeeper的实践及原理
  14. Java使用Itext5.5.10进行pdf签章
  15. windows7安装tensorflow-gpu开发环境
  16. Qt中路径问题小结
  17. java web 3.1-web.xml文件配置
  18. eval(PHP 4, PHP 5)
  19. Mysql5.7.9密码已过有效期的处理过程
  20. PHP查询数据库,对象结果集转化为数组

热门文章

  1. SpringBoot + Redis:基本配置及使用
  2. Windows7下caffe-ssd-microsoft下编译
  3. HBase与RDBMS的区别
  4. 关于如何将_variant_t型转化为int型和string类型
  5. 网站html代码解析
  6. Unity引擎GUI之Image
  7. vegas pro 15解决导入的视频和音频有噪声问题,亲测可行
  8. 图像局部显著性—点特征(SiftGPU)
  9. 教材配套PPT初稿
  10. mysql 统计按天、星期、按月数据的各种 sql 语句 (转录)