🔌 第二章 用电信号传输TCP/IP数据
📄 一句话概括

连接的实体=双方控制信息里互写对方地址——管道是抽象说法,拔掉网线管道也不存在,断开的本质是记录作废。

📝 本节和前面几节的关系

2.1 节建好了本端口;本篇回答【连接】到底连了什么。

一、互相记住

客户端套接字写进服务器 IP+端口; 服务器套接字写进客户端 IP+端口。 两边记录对上了,管道就【通】了。

二、抽象的价值

对应用程序而言管道像真的存在——write 进去对面 read 出来。 抽象的目的是把【分片、对账、重发】全部藏起来。

三、动手 Demo:连接到底是什么

两边的记录单:

for who, rem in [('客户端套接字','服务器 IP + 端口'),
               ('服务器套接字','客户端 IP + 端口')]:
    print('%-10s 记住: %s' % (who, rem))

实跑输出:

--------------------------------------------------------------------
连接到底是什么
--------------------------------------------------------------------
  管道是抽象说法,实体是【双方都记住了对方】:

  谁               记住了什么
  ----------------------------------
  客户端套接字     服务器 IP + 端口
  服务器套接字     客户端 IP + 端口
  ----------------------------------

  所以连接=在两块控制信息里互写地址。
  拔掉网线管道【并不存在】——存在的只是记录,
  断开的本质是把记录作废。

这个【互写记录】的模型也解释了为什么服务器最大连接数 受内存限制——每条连接都要一块控制信息。

30 秒实验

  1. 断网后再 read,看报错出现在哪一步。
  2. 算算一台服务器 4GB 内存理论上能挂多少条连接(粗算)。
  3. 想想为什么说【抽象是分层的最大福利】。

常见误区

  1. 以为管道是真实线路——它是两边记录构成的概念。
  2. 以为连接断开就是【拔线】——是记录作废。
自测三问(点开对答案) 1. 连接的实体是什么? —— 双方控制信息互写对方地址。 2. 管道说法的好处是什么? —— 把复杂性藏在抽象后面。 3. 服务器连接数受什么限制? —— 内存(每条连接一块控制信息)。

相关笔记