不同的套接字可以共用相同的端口号吗?
来源:互联网 发布:linux 查看有几个用户 编辑:程序博客网 时间:2024/06/05 06:03
不同的套接字可以共用相同的端口号吗?
(在不同主机上自然可以,下面讨论在同一台主机上的情况。)
需要分情况而看,套接字分为UDP套接字和TCP套接字,对于前者,其由(ip地址,端口号)来标识,后者由(源ip,源端口号,目的ip,目的端口号)标识。
能不能共用相同的端口号要看传送到目的主机的数据能否根据套接字上交到指定的进程中。
对于UDP,假设主机a向主机b发送数据,b在网络层收到数据报后,去掉头部,上交给运输层,运输层再根据报文段头部信息(包含端口号信息等),再去除头部后将得到的数据,交给相应套接字,应用程序经该套接字得到数据。如果UDP套接字共用了端口号,在应用层将数据交给套接字时,将无法确定交给哪个,因为UDP套接字只包含了两个信息。
对于TCP,首先要经过握手阶段建立连接,在目的主机端服务器产生新的套接字,包含了上述四个信息。如果创建多个连接,会产生多个套接字,这些套接字实际上是共用了相同的目的端口号,但此时运输层仍能将数据交到相应的套接字,因为运输层可以知道数据的源ip,源端口号,目的ip和目的端口号,然后就能将数据交到与这些信息相匹配的套接字,此时是可以唯一确定一个套接字的,所以数据最终能到达目的应用进程。(面向连接说法的由来)
综上,UDP套接字不可以共用相同的套接字,而TCP可以。主要还是看传送到目的主机的数据能否根据套接字上交到指定的进程中。
1 0
- 不同的套接字可以共用相同的端口号吗?
- TCP套接字和UDP套接字可以共用相同端口号
- Apache2.2 基于相同IP不同端口的虚拟主机配置
- Apache2.2 基于相同IP不同端口的虚拟主机配置
- nginx监听相同端口,根据域名请求不同的server
- 重载函数的返回值相同与不同都可以吗
- 根据SOCKET套接字获得此套接字绑定的端口号
- 设置可以发送广播的套接字
- 不同版本的python共用一个opencv
- 相同端口的UDP套接字数量过多导致软中断占用CPU利用率高的原因分析
- 从不同的视角看,相同的对象可以是不同的角色:
- 不同继承树的类也可以实现相同的接口
- Java里不同方法里的局部变量的名称可以相同么?!
- accept()返回的套接字绑定哪个端口 新旧套接字的联系
- accept()返回的套接字绑定哪个端口 新旧套接字的联系
- tcp套接字端口复用的总结
- 根据客户端套接字获取客户机的IP和端口号,其形式为IP:port
- 可以接收链路层MAC帧的原始套接字
- Java集合之List
- 先打扫卫生,然后在写规划
- Java集合之Set
- tcp/ip详解(26)
- Activity基础篇之生命周期以及启动和创建
- 不同的套接字可以共用相同的端口号吗?
- 红黑树算法的实现与剖析
- Linux驱动技术(二) _访问I-O内存
- activity之间的数据传递方法
- Mybatis_01_理解动态sql及sql片段
- Activity基础篇之异常情况下生命周期分析
- 观察者模式学习笔记
- preventDefault()
- android消息机制原理详解