tcp选取源端口 src port 是操作系统干的吗?

用户进程可以在发起 tcp 请求的时候,自己选择 src port 吗?

linux、win、mac 上,使用 tcp 访问对面,我的 src port 可以用 c、c++、java、python 自己写在代码里面指定吗?还是说 src port 是 os 随机选择,作为 app 是不能自己选择的?

阅读 3k
4 个回答
A TCP/IP connection is identified by a four element tuple: {source IP, source port, destination IP, destination port}. To establish a TCP/IP connection only a destination IP and port number are needed, the operating system automatically selects source IP and port.

TCP/IP 连接由四元组标识:{源 IP、源端口、目标 IP、目标端口}。要建立 TCP/IP 连接,只需要目标 IP 和端口号,操作系统会自动选择源 IP 和端口。

也就是源端口由操作系统决定,与编程语言无关

参考此答案

新手上路,请多包涵

java中是可以指定使用哪个源端口的,如果指定的端口已被使用是会直接报错的。当你不指定的时候才是os随机给你一个空闲的端口,可以在各个os类似任务管理器的软件中查看各个应用的端口

在TCP连接中,源端口(Source Port)是用户进程或应用程序指定的本地端口。操作系统提供了一定的接口,允许应用程序在建立连接的时候指定源端口,但是这个端口必须在可用端口范围内,并且不能与其他已经被占用的端口重复。如果应用程序没有指定源端口,操作系统会随机选择一个可用端口作为源端口。

在Linux、Windows、Mac等操作系统上,可以使用C、C++、Java、Python等编程语言的socket API来指定源端口。以Python为例,可以通过socket库中的bind()函数指定源端口,如下所示:

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('0.0.0.0', 8888))

在这个例子中,bind()函数指定了本地IP地址为0.0.0.0,本地端口为8888,作为TCP连接的源端口。如果不指定端口,操作系统会自动选择一个可用端口。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题