理解端口复用(四元组)

来源:互联网 发布:全球网络电视安卓版 编辑:程序博客网 时间:2024/05/17 08:49
唯一能够确定一个连接有4个东西:
1. 服务器的IP
2. 服务器的Port
3. 客户端的IP
4. 客户端的Port

服务器的IP和Port可以保持不变,只要客户端的IP和Port彼此不同就OK了。

一个socket是可以建立多个连接的,为了阐释这个概念,你应该先明白一个TCP连接的标记为一个四元组
(source_ip, source_port, destination_ip, destination_port)
即(源IP,源端口,目的IP,目的端口)四个元素的组合。只要四个元素的组合中有一个元素不一样,那就可以区别不同的连接,比如:
你的IP地址是11.1.2.3, 在8080端口监听
那么当一个来自 22.4.5.6 ,端口为5555的连接到达后,那么建立的这条连接的四元组为
(11.1.2.3, 8080, 22.4.5.6, 5555)
这时,假设上面的那个客户(22.4.5.6)发来第二条连接请求,端口为6666,那么,新连接的四元组为
(11.1.2.3, 8080, 22.4.5.6, 5555)
那么,你主机的8080端口建立了两条连接;
但是,此时上面的那个客户(22.4.5.6)发来的第三条连接请求的端口如果为5555或6666的新连接,那么由于无法区分于上面两条连接,那么第三条连接的请求就无法建立


进一步的理解:

也可以在同一个端口号和IP地址上绑定一个TCP套接字和一个UDP套接字

原因在于端口号虽然一样,但由于协议不一样,所以端口是完全独立的


tcp/udp一般采用五元组来定位一个连接:

src_ip, src_port, dest_ip, dest_port, protocol_type  

引用楼主 qiuhui00 的回复:
最近在看计算机网络socket编程方面的书,有几个问题想不明白,所以来请教一下。就我目前的理解,端口号是用来代表某种服务的。一台计算机的端口号可以从0-65535,tcp和udp协议拥有各自的端口号。问题如下:
1. 一台计算机上的端口号是不是唯一的?为什么?
==> 不理解你的问题,可能你的意思是一个服务的端口是否唯一?一般来说某个写一下服务默认情况下是一个端口号。但是也可能多个端口提供相同服务,这个和程序设计实现相关。

2. 一个端口号可以同时被两个使用udp或tcp的进程同时绑定吗?请说明原因
==>可以,protocol_type不一样,不是两个相同链接。

3. 一个端口号可以被使用tcp和udp的两个进程同时……
==> 可以,同上。

原创粉丝点击