【问题标题】:Transmission Control Protocol socket传输控制协议套接字
【发布时间】:2015-06-29 20:45:23
【问题描述】:

当我使用服务器打开 TCP 时(在 OSI 的第 7 层上),第 5 层会创建带有端口号和 IP 的套接字。
我想知道这个套接字是否包括我的 IP/服务器 IP,以及我的(随机)端口或服务器端口(例如 HTTP 的 80)

当我用服务器打开 TCP 时,我们一起打开 TCP
所以这意味着我们有共同的插座?

【问题讨论】:

    标签: sockets tcp


    【解决方案1】:

    当我使用服务器打开 TCP 时(在 OSI 的 7 层上)

    忘记 OSI。它已经过时了,TCP/IP 也没有遵循它。它有自己的层模型。

    第 5 层创建带有端口号和 IP 的套接字

    TCP 在 TCP 层创建它。

    我想知道这个套接字是否包括我的 IP/服务器 IP,以及我的(随机)端口或服务器端口(例如 HTTP 的 80。)

    以上所有。

    当我用服务器打开 TCP 时,我们一起打开 TCP 所以这意味着我们有公共套接字?

    没有。套接字是连接的端点。有两个末端,两个插口。

    【讨论】:

    • 所以套接字有我的端口,他的端口,我的IP,他的IP?为什么有2个插座?谢谢
    • 1.是的。 2.因为连接有两端。
    【解决方案2】:

    TCP 是第 4 层,即所谓的传输层,因此暂时忽略 OSI 模型。

    通常 - 'a socket' 只是一个没有任何标识的端点。当您 bind 到一个地址或 connect 到一个地址时,套接字会获得它的身份。

    当您bind 到某个地址时 - 您只能在其端点获得本地端口和本地 IP 地址,而不是远程 IP 和端口地址。因此,除非您在其上使用listen,否则此类套接字并不是很有用。这通常在服务器上完成。另请注意,您可以绑定到“机器上的所有地址”,然后您本身就没有任何一个端点。

    当您 connect 连接到服务器(例如 TCP 服务器 @ 端口 80)时,您的操作系统 TCP/IP 堆栈使用本地 IP 地址并选择随机端口连接到服务器套接字(例如一个 @ 987654326@ing 以上)。这是所有 4 个地址都出现的时候。这个套接字是一个连接的套接字,所有 4 个值都会出现。

    【讨论】:

    • 您确实有“任何一个端点”。您不会“绑定到机器上的所有地址”:您绑定到一个特殊的地址,即 any。不是“全部”。它有所作为。
    • 我不完全理解-所以你的服务器用他的端口和他的 ip 构建了他的套接字?为什么不用我的端口和 ip?
    • 服务器如何知道你的端口和IP?我建议您在开始接触套接字编程之前阅读“TCP/IP 图解第 1 卷”。
    • @chriswhite 服务器知道客户端的IP:端口,直到他连接。然后他从 IP 数据包中就知道了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    相关资源
    最近更新 更多