【发布时间】:2015-06-29 20:45:23
【问题描述】:
当我使用服务器打开 TCP 时(在 OSI 的第 7 层上),第 5 层会创建带有端口号和 IP 的套接字。
我想知道这个套接字是否包括我的 IP/服务器 IP,以及我的(随机)端口或服务器端口(例如 HTTP 的 80)
当我用服务器打开 TCP 时,我们一起打开 TCP
所以这意味着我们有共同的插座?
【问题讨论】:
当我使用服务器打开 TCP 时(在 OSI 的第 7 层上),第 5 层会创建带有端口号和 IP 的套接字。
我想知道这个套接字是否包括我的 IP/服务器 IP,以及我的(随机)端口或服务器端口(例如 HTTP 的 80)
当我用服务器打开 TCP 时,我们一起打开 TCP
所以这意味着我们有共同的插座?
【问题讨论】:
当我使用服务器打开 TCP 时(在 OSI 的 7 层上)
忘记 OSI。它已经过时了,TCP/IP 也没有遵循它。它有自己的层模型。
第 5 层创建带有端口号和 IP 的套接字
TCP 在 TCP 层创建它。
我想知道这个套接字是否包括我的 IP/服务器 IP,以及我的(随机)端口或服务器端口(例如 HTTP 的 80。)
以上所有。
当我用服务器打开 TCP 时,我们一起打开 TCP 所以这意味着我们有公共套接字?
没有。套接字是连接的端点。有两个末端,两个插口。
【讨论】:
TCP 是第 4 层,即所谓的传输层,因此暂时忽略 OSI 模型。
通常 - 'a socket' 只是一个没有任何标识的端点。当您 bind 到一个地址或 connect 到一个地址时,套接字会获得它的身份。
当您bind 到某个地址时 - 您只能在其端点获得本地端口和本地 IP 地址,而不是远程 IP 和端口地址。因此,除非您在其上使用listen,否则此类套接字并不是很有用。这通常在服务器上完成。另请注意,您可以绑定到“机器上的所有地址”,然后您本身就没有任何一个端点。
当您 connect 连接到服务器(例如 TCP 服务器 @ 端口 80)时,您的操作系统 TCP/IP 堆栈使用本地 IP 地址并选择随机端口连接到服务器套接字(例如一个 @ 987654326@ing 以上)。这是所有 4 个地址都出现的时候。这个套接字是一个连接的套接字,所有 4 个值都会出现。
【讨论】: