有关tcp和udp端口号的疑惑

qiuhui00 2011-10-05 03:24:49
最近在看计算机网络socket编程方面的书,有几个问题想不明白,所以来请教一下。就我目前的理解,端口号是用来代表某种服务的。一台计算机的端口号可以从0-65535,tcp和udp协议拥有各自的端口号。问题如下:
1. 一台计算机上的端口号是不是唯一的?为什么?
2. 一个端口号可以同时被两个使用udp或tcp的进程同时绑定吗?请说明原因
3. 一个端口号可以被使用tcp和udp的两个进程同时绑定吗?请说明原因
...全文
1843 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
错_对 2011-10-07
  • 打赏
  • 举报
回复



错_对 2011-10-07
  • 打赏
  • 举报
回复
服务器端口是用来标注特性服务性质的,服务器与客户机建立连接后,传输数据实际上是用其他闲置端口进行的。

比如bootp服务器端口67, bootp客户机端口68.端口缓存是有限的,UDP下当多个客户机同时与服务器通信会产生大

量的排队延迟甚至丢包,所以在建立连接后,服务器会申请单独的端口与客户机进行通信。我是依据《TCP/IP详

解》的分析。说的不对请拍砖。不过在TCP通信下会有拥塞控制,流量控制,不至于服务器端口缓存排队队列大量

等候,这时候可能是直接用well_know端口与客户机通信,具体还得看系统实现。
qq120848369 2011-10-05
  • 打赏
  • 举报
回复
1,TCP有1-65535,UDP也有1-65535,完全是两个协议,端口又不是什么物理概念,不过就是一个short而已,所以TCP用了1号端口,UDP也用1号端口没有任何影响。

2,楼主可能没搞明白网络编程这些概念,一个套接字分两个地址,一个是src host and src port,一个是dst host and dst port,也就是这个SOCKET本地关联哪个地址与端口,远端关联哪个地址与端口。

不管你自己做的QQ是什么样的,腾讯的QQ是不会主动绑定本地端口的,它用一个UDP SOCKET直接发包给QQ服务器的IP和Port,由内核帮你绑定一个本地的IP和PORT,QQ服务器收到你的包的同时也会recvfrom获得你的这个本地IP和PORT,于是可以回包给你,你用这个UDP SOCKET自然会读到回包,因为服务器是发给你这个本地IP和PORT。
黑娃 2011-10-05
  • 打赏
  • 举报
回复
端口是系统资源,对计算机来说是唯一的,但tcp和udp对同一个端口号系统会看成是不同的资源。如果端口号范围是1-65535,则可理解为系统的端口资源有2套,一套为tcp准备,一套为udp准备
sww01236987 2011-10-05
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 qiuhui00 的回复:]
引用 10 楼 sww01236987 的回复:

1.毫无疑问,不是唯一的。一台电脑可以有0-65535个端口,0-1024是系统预留的端口。每一个程序的端口号通常是唯一的,不排除有些程序会开启多个端口。当一个数据包发送到我的电脑的ip时,由哪个应用程序软件来接受这个数据包,就是由端口号决定的。因为端口号的作用就是为了可以把一个电脑ip收到的多个数据区分开是发个哪个应用程序的。好比信邮件到你……
[/Quote]
回答第三问:原理我也不太清楚,但是我确实测试过,例如我做个类此QQ的程序,占用tcp1234端口,我同时开启多个我的qq,也是可以的。但是我再做一个程序QQ2,当我启动QQ了再启动QQ2程序的时候,就提示套接字绑定失败,端口被占用。
serven_zhang 2011-10-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lida2003 的回复:]

引用 4 楼 qiuhui00 的回复:

可是我搜了一下,有人说tcp和udp的端口号是独立的,这是不是说一个端口号可以同时被使用udp和tcp的两个进程同时绑定?如果是的话,那怎么会说一台计算机的端口号是唯一的呢?


udp和tcp是不同的传输层协议。一般说的是同时两个相同服务绑定同一个端口。
[/Quote]这哥们说的对啊!
qiuhui00 2011-10-05
  • 打赏
  • 举报
回复
对于udp和tcp的端口号是独立的怎么理解呢?
qiuhui00 2011-10-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 sww01236987 的回复:]

1.毫无疑问,不是唯一的。一台电脑可以有0-65535个端口,0-1024是系统预留的端口。每一个程序的端口号通常是唯一的,不排除有些程序会开启多个端口。当一个数据包发送到我的电脑的ip时,由哪个应用程序软件来接受这个数据包,就是由端口号决定的。因为端口号的作用就是为了可以把一个电脑ip收到的多个数据区分开是发个哪个应用程序的。好比信邮件到你家,是给你的还是给你哥哥的。家庭地址相当于ip,端口号……
[/Quote]
可能是我的问题提的不够清楚。其实我的意思是,如果一个端口号已经被某个使用udp的进程绑定了,那这个端口号还能不能被另外一个使用udp的进程绑定?又或者是另外一个使用tcp的进程呢?为什么?
sww01236987 2011-10-05
  • 打赏
  • 举报
回复
1.毫无疑问,不是唯一的。一台电脑可以有0-65535个端口,0-1024是系统预留的端口。每一个程序的端口号通常是唯一的,不排除有些程序会开启多个端口。当一个数据包发送到我的电脑的ip时,由哪个应用程序软件来接受这个数据包,就是由端口号决定的。因为端口号的作用就是为了可以把一个电脑ip收到的多个数据区分开是发个哪个应用程序的。好比信邮件到你家,是给你的还是给你哥哥的。家庭地址相当于ip,端口号相当于你们家的成员。
2.可以。ip数据包,首先是由操作系统来接受的,然后根据数据包协议类型,分陪给程序。
3.这个问题我没看出来第二个问题有什么差别。
lida2003 2011-10-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qiuhui00 的回复:]

网络编程当中所说的绑定,是个怎样的过程?
[/Quote]

不好意思,刚才上面的图,文本好像不是很好,大致意思你照着理解吧。绑定bind主要用于服务,而客户端一般采用连接connect。 其过程就像启动一个服务,然后绑定到一个特定端口,对该端口所有进来的tcp/udp请求进行响应。

具体socket内部实现细节,请参加tcp/ip协议栈实现。这里我也说不全,理解下,希望能有所帮助。
lida2003 2011-10-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 qiuhui00 的回复:]

请问端口号到底是个什么概念啊?能给个详细点的解释吗?
[/Quote]

+---------+--------------+--------------+-----------------------------------+
|MAC | IP | TCP/UDP | Data |
+---------+--------------+--------------+-----------------------------------+

基本情况就是上述帧格式:五元组分别位于MAC, IP, TCP/UDP里面:
MAC里面的type决定了是否是IP帧,IP里面给出了SrcIp和DestIp,TCP、UDP头给出了到底是那种传输层协议。

详见TCP/IP 卷一。
qiuhui00 2011-10-05
  • 打赏
  • 举报
回复
网络编程当中所说的绑定,是个怎样的过程?
qiuhui00 2011-10-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lida2003 的回复:]

引用 4 楼 qiuhui00 的回复:

可是我搜了一下,有人说tcp和udp的端口号是独立的,这是不是说一个端口号可以同时被使用udp和tcp的两个进程同时绑定?如果是的话,那怎么会说一台计算机的端口号是唯一的呢?


udp和tcp是不同的传输层协议。一般说的是同时两个相同服务绑定同一个端口。
[/Quote]
请问端口号到底是个什么概念啊?能给个详细点的解释吗?
lida2003 2011-10-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qiuhui00 的回复:]

可是我搜了一下,有人说tcp和udp的端口号是独立的,这是不是说一个端口号可以同时被使用udp和tcp的两个进程同时绑定?如果是的话,那怎么会说一台计算机的端口号是唯一的呢?
[/Quote]

udp和tcp是不同的传输层协议。一般说的是同时两个相同服务绑定同一个端口。
qiuhui00 2011-10-05
  • 打赏
  • 举报
回复
可是我搜了一下,有人说tcp和udp的端口号是独立的,这是不是说一个端口号可以同时被使用udp和tcp的两个进程同时绑定?如果是的话,那怎么会说一台计算机的端口号是唯一的呢?
lida2003 2011-10-05
  • 打赏
  • 举报
回复
tcp/udp一般采用五元组来定位一个连接:

src_ip, src_port, dest_ip, dest_port, protocol_type

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

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

3. 一个端口号可以被使用tcp和udp的两个进程同时……
==> 可以,同上。
[/Quote]
hengshan 2011-10-05
  • 打赏
  • 举报
回复
1、是的。因为端口号就是代表一台机器上的一个进程。
2、不可以,因为端口号代表一个通信进程,在同一个ip上,是唯一的。
3、同2
qiuhui00 2011-10-05
  • 打赏
  • 举报
回复
怎么没有人回答啊?自己顶

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧