网络通讯笔记之两台设备通过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 暴露。
相关推荐
La Pulga4 小时前
【FreeRTOS源码学习笔记】任务延时列表
笔记·mcu·学习·嵌入式·freertos·实时操作系统
Java成神之路-6 小时前
TCP Socket 与 UDP Socket
tcp/ip·计算机网络·udp
Peter-OK9 小时前
PostgreSQL学习笔记(入门-进阶-精通说明)
笔记·学习·postgresql
成都蜀味缘餐饮技术培训学校11 小时前
手撕烤兔技术培训实战指南,秘制腌料配方比例与调制手法
大数据·经验分享·笔记·其他·微信公众平台
希和202712 小时前
免费AI视频生成工具汇总(国内优先,适合做漫剧、短视频,Obsidian笔记版)
人工智能·笔记·音视频
蒸蒸yyyyzwd13 小时前
秋招学习笔记 day109
笔记·八股
只愿云淡风清16 小时前
正则表达式学习笔记 02:基础语法
笔记·学习·正则表达式
希和20271 天前
考研英语阅读词汇笔记|城市野径、抄近道步道(非正式小路)
笔记·考研
一个人旅程~1 天前
关于imac27inch因改短用户名导致混合硬盘和系统崩溃的问题分析与故障解决
经验分享·笔记·macos·新浪微博
心祭丫丫1 天前
【每天一个 Python 小案例17】Python 实现通讯录
开发语言·人工智能·笔记·python·学习