网络通讯笔记之两台设备通过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 暴露。
相关推荐
0xR3lativ1ty1 天前
关闭公网IP的两种方式
网络协议·tcp/ip·php
Yeh2020581 天前
cookie与Session笔记
笔记
d111111111d1 天前
STM32-UART封装问题解析
笔记·stm32·单片机·嵌入式硬件·学习·算法
寒秋花开曾相惜1 天前
(学习笔记)4.2 逻辑设计和硬件控制语言HCL(4.2.1 逻辑门&4.2.2 组合电路和HCL布尔表达式)
linux·网络·数据结构·笔记·学习·fpga开发
Yeh2020581 天前
request与response笔记
java·前端·笔记
2401_873479401 天前
固件升级如何按地区分批推送?IP地址查询定位决定升级策略
网络协议·tcp/ip·php
net3m331 天前
所有esp_websocket_client_send。。。的地方都加锁,就不容易websocket 断线重连
网络·websocket·网络协议
Jiangxl~1 天前
IP数据云如何为不同行业提供精准IP查询与风险防控解决方案?
网络·网络协议·tcp/ip·算法·ai·ip·安全架构
Fuyo_11191 天前
C++ 内存管理
c++·笔记
你觉得脆皮鸡好吃吗1 天前
HTTP (XSS前简单了解)
网络·网络协议·http·网络安全学习