📄 一句话概括
connect(描述符, 服务器IP, 端口号) 三样参数各管一样;接通的动作是两边互发控制信息——IP 找到哪台机器,端口找到机器上哪个程序。
📝 本节和前面几节的关系
1.4.2 有了管道两头的口;本篇把两头接上——控制信息先行。
一、三样参数
描述符=用哪个本端套接字;服务器 IP=另一端在哪家; 端口号=那家屋里找哪扇门。三者缺一不可。
二、接通=互发控制信息
客户端说【我要连你的 80】,服务器回【行,连上了】; 之后双方套接字里都记着对方——管道成形。 端口的必要性:服务器上跑着 Web、邮件等多个程序, 没有端口就不知道把管道递给谁。
三、动手 Demo:connect 把管道接上
三参数各司其职,一张表说清:
for p, ex, mean in [('描述符','3','用哪个本端套接字'),
('服务器IP','172.20.1.1','管道另一端在哪家'),
('端口号','80','那家屋里找哪扇门')]:
print('%-9s %-12s %s' % (p, ex, mean))
实跑输出:
--------------------------------------------------------------------
connect 把管道接上
--------------------------------------------------------------------
connect(描述符, 服务器IP, 端口号) 三样参数各管一样:
参数 例子 告诉协议栈什么
----------------------------------------------
描述符 3 用哪个本端套接字
服务器 IP 172.20.1.1 管道另一端在哪家
端口号 80 那家屋里找哪扇门
----------------------------------------------
接通的动作 = 两边互发控制信息:
客户端说【我要连你的 80】,服务器回【行,连上了】——
之后两边的套接字里都记着对方,管道成形,数据随时能走。
IP 找到【哪台机器】,端口找到【机器上哪个程序】——
缺一不可。
对照 1.2.4 的 DNS 查询:它连的端口是 53—— 同一台 DNS 服务器,门牌不同而已。
30 秒实验
- telnet 一台主机的 80 和 443,感受【连上】与【拒绝】的区别。
- 连一个没开监听的端口,看报错(连接被拒)。
- 想想 IP+端口和【门牌+房间号】的类比哪里像、哪里不像。
常见误区
- 以为 IP 就够定位程序——端口才区分机器上的不同程序。
- 以为 connect 发的是数据——先走控制信息,数据是下一步。
自测三问(点开对答案)
1. connect 的三个参数分别是什么? —— 描述符、服务器 IP、端口号。 2. 为什么需要端口号? —— 区分服务器上跑的多个程序。 3. 【接通】的实质是什么? —— 两边互发控制信息,互相记住对方。- ☐ 下一节(1.4.4 通信阶段:传递消息)
相关笔记
- 根据端口号分配数据到应用程序(端口号、已知端口号) —— 端口体系
- 通信阶段:传递消息 —— 管道通了,走数据
- 🔌 网络是怎样连接的 · 索引