`
nigelzeng
  • 浏览: 606744 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

TCP、UDP绑定同一端口通信的解释

阅读更多

昨日突然讨论起TCP与UDP是否可以在同一端口进行绑定,通信。

在印象当中我记得是可以的,今日google了相关资料,

确定以及肯定的:

TCP、UDP可以绑定同一端口来进行通信:

 

      网络中可以被命名和寻址的通信端口,是操作系统可分配的一种资源。 

      按照OSI七层协议的描述,传输层与网络层在功能上的最大区别是传输层提供进程通信能力。从这个意义上讲,网络通信的最终地址就不仅仅是主机地址了,还包括可以描述进程的某种标识符。为此,TCP/IP协议提出了协议端口(protocol   port,简称端口)的概念,用于标识通信的进程。 

      端口是一种抽象的软件结构(包括一些数据结构和I/O缓冲区)。应用程序(即进程)通过系统调用与某端口建立连接(binding)后,传输层传给该端口的数据都被相应进程所接收,相应进程发给传输层的数据都通过该端口输出。在TCP/IP协议的实现中,端口操作类似于一般的I/O操作,进程获取一个端口,相当于获取本地唯一的I/O文件,可以用一般的读写原语访问之。 

      类似于文件描述符,每个端口都拥有一个叫端口号(port   number)的整数型标识符,用于区别不同端口。由于TCP/IP传输层的两个协议TCP和UDP是完全独立的两个软件模块,因此各自的端口号也相互独立,如TCP有一个255号端口,UDP也可以有一个255号端口,二者并不冲突。 

      端口号的分配是一个重要问题。有两种基本分配方式:第一种叫全局分配,这是一种集中控制方式,由一个公认的中央机构根据用户需要进行统一分配,并将结果公布于众。第二种是本地分配,又称动态连接,即进程需要访问传输层服务时,向本地操作系统提出申请,操作系统返回一个本地唯一的端口号,进程再通过合适的系统调用将自己与该端口号联系起来(绑扎)。TCP/IP端口号的分配中综合了上述两种方式。TCP/IP将端口号分为两部分,少量的作为保留端口,以全局方式分配给服务进程。因此,每一个标准服务器都拥有一个全局公认的端口(即周知口,well-known   port),即使在不同机器上,其端口号也相同。剩余的为自由端口,以本地方式进行分配。TCP和UDP均规定,小于256的端口号才能作保留端口。

 

 

· 再讨论一下,一个服务器监控一个端口,比如80端口,它为什么可以建立上成千上万的连接?

 

   首先, 一个TCP连接需要由四元组来形成,即(src_ip,src_port,dst_ip,dst_port)。当一个连接请求过来的时候,服务端调用accept函数,新生成一个socket,这个socket所占用的本地端口依然是80端口。由四元组就很容易分析到了,同一个(src_ip,src_port),它所对应的(dst_ip,dst_port)可以无穷变化,这样就可以建立很多个客户端的请求了。

分享到:
评论

相关推荐

    C#winform TCP通信 UDP通信 Socket通信 vs2017 .net4.0

    在.NET框架中,C#为开发人员提供了丰富的网络通信库,包括TCP、UDP以及Socket通信。这些协议在软件开发中广泛应用于服务器与客户端之间的数据交换,尤其在分布式系统和实时应用中扮演着重要角色。本项目...

    同一端口即作TCP用又作UDP使用

    TCP(Transmission Control Protocol)提供面向连接的、可靠的通信服务,而UDP(User Datagram Protocol)则是一种无连接的、不可靠的通信协议,但具有更低的延迟和更高的效率。在某些情况下,我们可能需要在同一台...

    TCPUDP端口扫描系统

    TCPUDP端口扫描系统是一个实用工具,用于探测远程主机上开放的TCP和UDP端口。通过端口扫描,我们可以了解网络设备的服务状态,识别可能的安全漏洞,以及进行网络维护和故障排查。 TCP是一种面向连接的、可靠的协议...

    python tcp udp server 绑定同一个端口

    tcp和udp可以绑定同一个端口。并且独立接收以及处理消息。rar包括3个文件,server端(通过threadpool启动tcp server和udp server),以及tcp client端、udp client端。

    TCP、UDP 通信程序设计实验报告

    在深入探讨TCP与UDP通信程序设计实验报告之前,我们首先要了解TCP(传输控制协议)和UDP(用户数据报协议)之间的区别和联系。TCP是一种面向连接的协议,它提供可靠的数据传输服务,保证数据包按顺序到达,并且能够...

    C#源码-检测本机UDP监听,TCP监听,TCP客户端连接的所有端口是否已经占用

    本文将详细解析如何使用C#语言来检测本机的UDP监听、TCP监听以及TCP客户端连接的端口占用情况。 首先,我们要理解端口在计算机网络中的作用。端口是TCP/IP协议的一部分,它们是网络应用程序之间通信的通道。TCP和...

    TCP/UDP/IP/IPv6 异步通信调试工具

    本压缩包提供的"IPv4andIPv6通讯测试工具"是一个集成了IPv4和IPv6环境的调试工具,可以帮助开发者绑定本地端口,通过套接字进行通信。套接字是操作系统提供的接口,使得应用程序能够与网络进行交互,发送和接收数据...

    UDP 实现端到端的通讯,两者之间绑定IP 端口

    下面将详细解释UDP通信机制以及如何通过绑定IP和端口进行通信。 ### UDP通信基础 1. **无连接性**:UDP不建立连接就可以直接发送数据,因此它没有TCP的三次握手过程,这使得UDP通信更快,但同时也意味着没有确认...

    TCP和UDP端口详解

    - **DNS端口**:DNS服务通常使用53端口进行通信,无论是TCP还是UDP协议都支持此端口。DNS端口的安全性非常重要,因为它是互联网上非常关键的服务之一。 #### 六、端口的应用实例 - **FTP端口**:FTP服务通常使用21...

    C++ 客户端通讯库(TCP/UDP/SERIALPORT)

    TCP通信通常包括以下几个步骤:创建套接字、绑定IP地址和端口号、监听连接请求、接受连接、交换数据、最后关闭连接。在C++Builder中,你可以利用VCL(Visual Component Library)提供的TClientSocket和TServerSocket...

    LWIP裸机实现TCPUDP通讯

    - **UDP套接字**:创建UDP套接字使用`udp_new()`,绑定本地端口使用`udp_bind()`,连接到远程地址使用`udp_connect()`(可选)。 - **数据收发**:使用`udp_sendto()`发送数据,`udp_recv()`注册接收回调处理接收...

    C# Socket TCP和UDP报文及端口测试工具的开发(提供源码)万能超好测试工具

    3. **端口测试**:在TCP和UDP通信中,端口是标识服务的逻辑地址。在C#中,我们可以使用Socket的Bind方法绑定到特定端口,然后使用Listen方法开始监听。端口测试通常包括检查端口是否开放、能否成功建立连接或发送...

    TCP,UDP等各端口占用程序查看

    了解如何查看TCP和UDP端口占用情况,对于解决端口冲突、排查网络问题以及优化系统性能至关重要。 首先,TCP是一种面向连接的、可靠的协议,它确保了数据的顺序传输和错误检查。在TCP中,每个连接都有一个唯一的标识...

    C#写的检查TCP、UDP端口是否被占用

    C#写的检查TCP、UDP端口是否被占用,原理就是利用netstat -a,在得到的结果当中检索端口是否被占用,有时候运行有点慢,注意的是有些知名端口的检查结果是错误的(因为在netstat -a运行结果当中,知名端口没有用数字...

    Socket TCP UDP 客户端 服务器模拟工具

    在标题和描述中提到的"Socket TCP UDP 客户端 服务器模拟工具",它是一个帮助开发者理解和实践TCP和UDP协议的工具。TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是互联网上最常用的两种...

    ethnet udp tcp.rar_TCP UDP SOCKET_TCP/UDP通信_tcp套接字_udp 程序

    `bind()`绑定套接字到特定端口,`listen()`和`accept()`用于TCP服务器监听和接受连接,`connect()`用于TCP客户端建立连接,`send()`和`recv()`用于数据的发送和接收,以及`sendto()`和`recvfrom()`在UDP中用于发送和...

    VC下的Tcp Udp通信源码

    源码中可能会包含如何创建UDP套接字、绑定端口、向指定地址发送数据以及从任何来源接收数据的示例。 学习这些源码,开发者可以了解到以下知识点: 1. Winsock库的初始化和清理:在开始网络编程之前,需要调用`...

    TCP_UDP.zip_TCP UDp_cmake_cmake udp_socket TCP UDP_tcp

    在TCP UDP项目中,开发者会创建socket对象,通过bind函数绑定本地地址和端口,listen函数监听TCP连接请求,accept函数接受连接,connect函数建立TCP连接,以及send和recv函数来发送和接收数据。对于UDP,使用sendto...

    基于TCP和UDP的socket通信程序(C语言)

    在IT领域,网络编程是构建分布式系统和网络应用的基础,其中TCP和UDP是两种主要的传输层协议。本文将深入探讨这两个协议以及如何使用C语言进行socket编程。 首先,TCP(Transmission Control Protocol)是一种面向...

Global site tag (gtag.js) - Google Analytics