网络通讯笔记之两台设备通过tcp通讯,都需要知道对方的ip和端口号吗?

网络通讯笔记之两台设备通过tcp通讯,都需要知道对方的ip和端口号吗?

code review!

不需要 。在标准的 TCP 通讯中,只有一方(主动发起连接的一方)需要预先知道另一方(被动等待连接的一方)的 IP 地址和端口号

TCP 通讯通常采用客户端/服务端(Client/Server)模型,这两者的角色和对地址信息的需求是完全不同的。

  1. 客户端(Client - 主动方)
  • 必须预先知道对方信息:客户端需要主动向服务端发送建立连接的请求(TCP 三次握手)。如果没有服务端的明确 IP 和端口,请求就无处投递。
  • 自己的信息:客户端通常不需要手动指定自己的端口号。在发起连接时,客户端的操作系统会自动在后台分配一个空闲的、随机的端口(称为"临时端口"或 Ephemeral Port)。
  1. 服务端(Server - 被动方)
  • 必须公开自己的信息:服务端需要在本地绑定(Bind)一个固定的端口,并在该端口上持续监听(Listen),让别人能够找到它。
  • 不需要预先知道客户端的信息 :当客户端的数据包(SYN 包)到达服务端时,TCP 网络协议的"数据包头部"会自动携带客户端的源 IP 地址源端口号。服务端收到数据包后,直接像看"来电显示"一样提取出这些信息,然后利用它们将响应数据准确地发回给客户端。
  1. 生活中的比喻:
    这就好比(客户端)打电话给一家披萨店(服务端)订餐:
  • 必须预先知道披萨店的电话号码(服务端的 IP 和端口),否则无法拨号。
  • 披萨店不需要提前知道电话号码。当电话打通时,披萨店的座机上会显示来电号码(数据包中自带的源 IP 和源端口)。即使中途挂断,披萨店也能根据这个来电号码把电话回拨给。
  1. 总结来说
    服务端只负责"开门迎客"(暴露 IP:端口并监听),客户端负责"敲门"(主动连接) 。这就是 TCP 最经典、最简单、最常用的方式。

    两台设备进行 TCP 通讯前,必须先确定好谁做服务端(负责监听),谁做客户端(负责连接)。只有客户端需要提前知道服务端的 IP 和端口。

    在标准的 TCP 客户端-服务器模型下,只需服务端暴露自己的 IP 和端口,客户端主动来连接就可以了。服务端不需要事先知道任何客户端的 IP 或端口。

  2. 实际中需要注意的几点:

  • 公网环境:如果服务端在公网,客户端能直接连;如果服务端在内网(家里/公司),需要端口映射(路由器 NAT)或使用公网穿透工具(如 frp、ngrok、ZeroTier)。
  • 防火墙:服务端必须把该端口放行(Windows 防火墙、Linux ufw/firewalld、云服务器安全组)。
  • IP 变化:动态 IP 的话,建议用域名(DDNS)而不是裸 IP。
  • 安全:生产环境推荐加 TLS(wss)、认证、限 IP 等,不要直接裸 TCP 暴露。
相关推荐
Hotchip_MEMS几秒前
MS2202AB-M15E输出驱动能力:直连MCU GPIO无需三极管
人工智能·笔记·物联网·电脑·制造
Privasa-隐私实验室6 分钟前
跨端技术选型|Flutter搭建隐私加密App,安卓与iOS双端差异适配实战
android·笔记·安全·flutter·ios·隐私安全·aes-256
tju新生代魔迷15 分钟前
Verilog HDL 学习笔记(九)| 第 9 章 实用建模技术
笔记·学习
tang7778917 分钟前
爬虫代理池搭建全流程:从IP筛选、去重到自动切换(附完整落地代码)
爬虫·网络协议·tcp/ip·代理ip池·爬虫代理池
凯尔萨厮21 分钟前
Java学习笔记十三(Stream与Lambda)
笔记·学习
M78佐菲8 小时前
Linux学习笔记:TCP协议
linux·笔记·学习·tcp/ip·算法
噜~噜~噜~9 小时前
操作系统笔记-2.3.5.1.1生产者-消费者问题
笔记·操作系统
米饭不加菜13 小时前
ESP-01S通过TCP直接与手机建立通信
网络·tcp/ip·智能手机
Huathy-雨落江南,浮生若梦13 小时前
Caddy 学习笔记 - 反向代理与 IP 封禁
笔记·学习·tcp/ip
xx~t14 小时前
嵌入式——Linux软件编程——网络1
linux·c语言·网络·vscode·网络协议