码迷,mamicode.com
首页 > 其他好文 > 详细

TCP和UDP可以同时监听相同的端口吗

时间:2019-03-13 18:00:55      阅读:427      评论:0      收藏:0      [点我收藏+]

标签:检验和   tcp报文   端口号   进程   能力   上层   127.0.0.1   term   协议   

同一台机器的同一个端口只可以被一个进程使用,一般用于tcp,或者udp。那一个进程使用同一个端口同时监听tcp、udp请求,是否可以呢?

答案:可以。

端口可以形象地比喻成操作系统上的编号唯一的文件,应用程序和网络协议可以对其进行i/o操作。
但是既然唯一又为何tcp udp可以用相同的端口号呢?这样的话,程序在连接到端口时,怎么知道此时从该端口进来的数据是tcp的还是udp的呢?

是不是可以这样理解?端口的唯一性的标识不是端口号,而是端口号和协议名称的组合,应用程序和协议寻址时就是靠的这个组合?

使用netstat -an自己看看就知道了,IP数据包首部有个叫做协议的字段,指出了上层协议是TCP还是UDP还是其他P。
协议字段(报头检验和前面那个),其值为6,则为TCP;
其值为17,则为UDP。

[root@web ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State      
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      
tcp        0      0 0.0.0.0:46997               0.0.0.0:*                   LISTEN      
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      
tcp        0     64 10.0.0.7:22                 10.0.0.253:61752            ESTABLISHED 
tcp        0      0 :::3306                     :::*                        LISTEN      
tcp        0      0 :::111                      :::*                        LISTEN      
tcp        0      0 :::22                       :::*                        LISTEN      
tcp        0      0 :::40566                    :::*                        LISTEN      
udp        0      0 127.0.0.1:967               0.0.0.0:*                               
udp        0      0 0.0.0.0:34398               0.0.0.0:*                               
udp        0      0 0.0.0.0:111                 0.0.0.0:*                               
udp        0      0 0.0.0.0:944                 0.0.0.0:*                               
udp        0      0 :::111                      :::*                                    
udp        0      0 :::944                      :::*                                    
udp        0      0 :::19764                    :::*   

操作系统有能力根据接受的报文的IP字段里面的协议部分判断这个报文是什么报文,就是说,系统读数据的时候还没有读到上层报文(TCP/UDP)的时候已经知道上层是什么报文了,直接交给相关的内核进程或协议栈处理就可以了。而在同一个协议内部端口号唯一。

TCP报文结构图示:
技术图片

UDP报文结构图示:
技术图片

TCP和UDP可以同时监听相同的端口吗

标签:检验和   tcp报文   端口号   进程   能力   上层   127.0.0.1   term   协议   

原文地址:https://blog.51cto.com/12083623/2362539

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!