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

同一台机器的同一个端口只可以被一个进程使用,一般用于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报文结构图示:

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

时间: 2024-10-08 23:05:38

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

wriesharek同时监听多个端口

之前的文章<wireshark解析自定义的protobuf协议> ,当时只监听了一个端口,而如果游戏同时有二个 socket 连接,比如一个是网关另外一个是其它的,怎么办呢? for i,port in ipairs(tcp_port) do tcp_port_table:add(port, m_MeteoricProto) end 参考链接:https://wiki.wireshark.org/Lua/Examples#Using_Lua_to_register_protocols_to_m

Memcached监听多个端口_同一台Windows机器中启动多个Memcached服务

百家姓起名大全 下载Memcached服务器 假设你解压在"C:\Program Files\memcached\memcached.exe" 那么可以如下创建多个服务监听不同的端口啦 监听第一个端口:创建服务名为Memcached_11211,显示名也为Memcached_11211,监听的端口为11211 sc create "Memcached_11211" start= auto binPath= "C:\Program Files\memcach

apache反向代理和监听多个端口设置

修改apache配置文件httpd.conf 一.监听多个端口 在Listen 80后添加监听端口,如 Listen 80 Listen 8080 Listen 8008 二.反向代理设置 1.取消一下模块注释(即去掉前面的#) LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_connect_module modules/mod_proxy_connect.soLoadModule proxy_ftp_module mod

udp 服务器界面监听

今天在做项目的时候,发现不同子网下是不能做UDP通信的,不知道是不是这样呢 遇到一个错误:eclipse遇到报错: The type JPEGImageEncoder is not accessible due to restriction on required library C:\Java\jre1.6.0_07\lib\rt.jar google后发现用以下方式解决: 这个事eclipse的设置问题,它默认把这些受访问限制的API设成了ERROR,你只要把Windows-Preferen

.Net TCP探索(一)——TCP服务端开发(同时监听多个客户端请求)

????最近在园子里看了大神写的(面试官,不要再问我三次握手和四次挥手),忍不住写段程序来测试一番. ????在网上找了很多例子,大多只实现了TCP点对点通讯,但实际应用中,一个服务器端口往往要监听多个客户端发来的消息. 测试工具下载:https://download.csdn.net/download/nbyanghuichao/11872360 ????本例采用System.Threading实现多线程监听,下面只介绍核心代码,省略了消息提示和错误处理,可以从我的GitHub获取完整代码:h

TCP通信问题,我的TCP服务器貌似无法开启监听

代码贴出来,求帮助 using ECG_System.Dao; using ECG_System.Mode; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Net; using System.Net.Sockets; using Sy

activemq的端口监听介绍及端口优化

在activemq的conf/activemq.xml主配置文件里,有这样一段话,如图: 这个图里里的transportConnectors字段就是mq对各个网络协议端口的规定,由图可见,openwire这个name使用的接入端口是61616,amqp这个name的接入端口号是5672.name里的值是随便写的,它也会体现在mq的web Connections界面里,而0.0.0.0是代表本机所有设备的意思,注意这里不可以写127.0.0.1或者localhost,这样写的话mq是无法连上网的.

单线程实现同时监听多个端口(windows平台c++代码)

前言 多年前开发了一套网络库,底层实现采用IOCP(完成端口).该库已在公司多个程序中应用:经过多次修改,长时间检验,已经非常稳定高效. 最近把以前的代码梳理了一下,又加进了一些新的思路.代码结构更加合理,性能也有所提升.打算将该库一些的知识点写出来,以供参考. 服务端要在多个端口监听,这种场合并不多见.但作为一个完善的网络库,似乎有必要支持此功能的. 传统实现方法 如果监听端口个数很少,也可以采用传统的方法.因为accept函数是阻塞的,所以要实现在n个端口监听,就需要n个线程.如果监听端口个

nginx 监听非标准端口80,重定向端口丢失问题解决

使用nginx监听8070端口,并转发到8067端口 我的配置文件如下: upstream odoo { server localhost:8067; } upstream odoochat{ server localhost:8072; } server { listen 8070 default_server; listen [::]:8070 default_server; root /var/www/html; index index.html index.htm index.nginx