首页 > 其他分享 >TCPUDP 共用端口问题

TCPUDP 共用端口问题

时间:2024-10-03 12:44:12浏览次数:7  
标签:TCPUDP src ip dst 端口 TCP 共用 port

TCP/UDP 共用端口问题。

转载自:TCP/UDP 占用端口问题总结 - mengban - 博客园 (cnblogs.com)

1.TCP UDP 可以共同占用一个端口号吗?

首先明确一点 端口是一种抽象的软件结构(包括一些数据结构和I/O缓冲区)。
应用程序(即进程)通过系统调用与某端口建立连接(binding)后,传输层传给该端口的数据都被相应进程所接收,相应进程发给传输层的数据都通过该端口输出。在TCP/IP协议的实现中,端口操作类似于一般的I/O操作,进程获取一个端口,相当于获取本地唯一的I/O文件,可以用一般的读写原语访问之。
类似于文件描述符,每个端口都拥有一个叫端口号(port number)的整数型标识符,用于区别不同端口。由于TCP/IP传输层的两个协议TCP和UDP是完全独立的两个软件模块,因此各自的端口号也相互独立,如TCP有一个255号端口,UDP也可以有一个255号端口,二者并不冲突。

2.为什么一个80端口可以建立很多连接?

一个TCP连接需要由四元组来形成,即(src_ip,src_port,dst_ip,dst_port)。假设有客户端建立了连接(src_ip1,src_port1,dst_ip1,dst_port1),那么,如果我们还有listen在(src_ip1,src_port1),那么当(dst_ip1,dst_port1)发送消息过来,系统应该把消息给谁?所以就说明了客户端占用了某一端口时,该端口就不能被其它进程listen了。
那么,对于有些童鞋,可能还有这样的疑问,是否一台机器就只能建立65535个连接了(端口16位限制)?非也,一个连接由四元组(src_ip,src_port,dst_ip,dst_port)形式,那么当(src_ip,src_port)一定时,变化的(dst_ip,dst_port)就可以建立更多连接了。
所以一台机器可以建立最多65535个连接是大错特错的。所有的一切都可以用四元组原理来分析即:一个TCP连接需要由四元组来形成,即(src_ip,src_port,dst_ip,dst_port),只要四个元素的组合中有一个元素不一样,那就可以区别不同的连接

3.承接2问 为什么还会出现端口被占的情况??

这个问题问的好。默认情况下 一个网络应用程序的套接字绑定了一个端口 这时候别的套接字就无法使用这个端口。这个就是为什么我们实际应用过程中经常会出现 端口已经被使用的情况。

但是 在实际网络编程过程中,socket有一个 SO_REUSEADDR 选项。该选项可以用在以下四种情况下。 (摘自《Unix网络编程》卷一,即UNPv1)

1、当有一个有相同本地地址和端口的socket1处于TIME_WAIT状态时,而你启动的程序的socket2要占用该地址和端口,你的程序就要用到该选项。
2、SO_REUSEADDR允许同一port上启动同一服务器的多个实例(多个进程)。但每个实例绑定的IP地址是不能相同的。在有多块网卡或用IP Alias技术的机器可以测试这种情况。
3、SO_REUSEADDR允许单个进程绑定相同的端口到多个socket上,但每个socket绑定的ip地址不同。这和2很相似,区别请看UNPv1。
4、SO_REUSEADDR允许完全相同的地址和端口的重复绑定。但这只用于UDP的多播,不用于TCP。

标签:TCPUDP,src,ip,dst,端口,TCP,共用,port
From: https://www.cnblogs.com/runtimeerror/p/18445591

相关文章

  • C语言 共用体
    概念在C语言中,共用体(Union)是一种特殊的数据类型。它可以在不同的时刻存储不同类型的数据,但所有成员共享同一块内存空间。这与结构体不同,结构体的每个成员都有自己独立的内存空间。定义和声明定义共用体的定义形式与结构体相似,使用关键字union。例如:unionData{int......
  • ubuntu nginx 配置端口
    ubuntunginx配置端口在Ubuntu上配置Nginx监听端口,你需要编辑Nginx的配置文件。默认情况下,配置文件通常位于/etc/nginx/sites-available/default。以下是如何更改Nginx配置以监听特定端口的步骤:打开终端。输入以下命令以编辑默认的Nginx配置文件:sudonano/etc/nginx/sites-a......
  • Idea启动SpringBoot程序报错:Veb server failed to start. Port 8082 was already in u
    目录Idea启动SpringBoot程序报错:Vebserverfailedtostart.Port8082wasalreadyinuse一、解决办法1、查找占用端口的进程2、结束进程①在任务管理器中终结指定pid的进程②在命令提示符中结束进程 3、重新启动项目4、对于macOS和Linux系统二、博主亲历三、为......
  • socket 开端口
    一.服务端#!/usr/bin/envpython3importsocket#创建socket对象server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)host=socket.gethostname()#设置一个端口port=12345#绑定端口server_socket.bind((host,port))#设置最大连接数,超过后排队serve......
  • 虚拟机端口映射到本机端口(超详细)
    应用场景:在工作或者学习中,我们和我们的团队都是处在一个局域网中的,为了某些业务,我们会在自己的本机安装虚拟机,比如我们会安装一台linux虚拟机作为服务器,在服务器上搭建对应的服务,这时候需要团队都能访问到你的虚拟机,但很明显,如果我们用的NAT模式的话,我们的虚拟......
  • 获取连接电脑的设备的所有端口信息
    1defsearch_port(port_name):2#获取连接电脑的设备的所有端口信息3port_list=list(comports())4print("port_list",port_list)56iflen(port_list)>0:7#遍历所有端口信息,根据端口名称port_name查找需要的端口号8f......
  • FRP内网穿透-端口转发
    参考链接:使用frp实现内网穿透教程_frp内网穿透-CSDN博客frp是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCP、UDP、HTTP、HTTPS等,并且具备P2P通信功能。使用frp,您可以安全、便捷地将内网服务暴露到公网,通过拥有公网IP的节点进行中转。frp主要由......
  • 深入解析网络通信的四大关键要素:网卡、MAC地址、IP地址、子网掩码与端口
    文章目录深入解析网络通信的四大关键要素:网卡、MAC地址、IP地址、子网掩码与端口**1.网卡(NetworkInterfaceCard,NIC)**关键知识点:联系与区别:**2.MAC地址(MediaAccessControlAddress)**关键知识点:联系与区别:**3.IP地址(InternetProtocolAddress)**关键知识......
  • GPIO输入输出端口
    目录GPIO输出模块:        1.使用RCC开启GPIO时钟;2.配置GPIO函数初始化GPIO;3.使用输出控制GPIO端口;代码示例1.LED闪烁2.LED流水灯3.蜂鸣器GPIO输入模块:流程同上(GPIO改成输入模式函数部分改为读取函数)代码示例1.按键控制LED2.光敏传感器控制蜂鸣器GPI......
  • 交换机镜像之端口镜像,有哪些分类?
    端口镜像是指在网络交换机中,复制流经特定端口的数据包,并将这些数据包发送到另一个指定的端口以便进行监控和分析。这一过程不影响原始流量,允许管理员在不中断网络服务的情况下进行流量分析。端口镜像通常用于网络故障排除、流量分析以及安全监控等场景。前置概念镜像源......