【问题标题】:Understanding socket basics了解套接字基础知识
【发布时间】:2011-06-14 12:05:43
【问题描述】:

我一直在阅读基本的网络编程,但很难找到关于套接字到底是什么以及它与 OSI 或 TCP/IP 堆栈的关系的直截了当的解释。

  1. 谁能向我解释一下什么是套接字?它是程序员或 API 定义的数据结构,还是网卡上的硬件设备?

  2. 上述网络模型的哪些层处理“原始”套接字?传输层?网络层?

  3. 就它们之间传递的数据而言,套接字是基于文本的还是二进制的?

  4. 基于套接字的网络编程是否有替代方法?还是所有联网应用程序都使用某种形式的套接字?

如果我能得到这么多,我应该对我正在阅读的其他所有内容都有一个非常清楚的了解。感谢您的帮助!

【问题讨论】:

    标签: sockets network-programming


    【解决方案1】:

    简短回答:

    1. Socket 是 IP 连接端点的抽象——因此,如果您将其视为 API 结构,那么您离得并不远。请阅读http://en.wikipedia.org/wiki/Internet_socket
    2. Internet layer 即 IP 协议。在实践中,您通常使用绑定到特定传输层参数(数据报/UDP 或流/TCP)的显式套接字
    3. 套接字以网络字节顺序发送数据——无论是文本还是二进制,取决于上层协议。
    4. 理论上,可能是的 - 但实际上所有 IP 流量都是使用“套接字”完成的

    【讨论】:

    • 感谢金韦斯!那么,是否可以肯定地说,实现套接字结构的人必须允许它符合 IP 协议?
    • ...另外,如果套接字是 IP 级结构,那么实现 IPv4 或 IPSec 的套接字有什么区别?
    • 套接字(通常)不实现 IPSec - 您(通常)只使用“普通”TCP 或 UDP 套接字来创建流量和网络堆栈的较低级别(可能在不同的网络节点上) ) 处理 IPSec 的 ESP 转换。从应用程序程序员的角度来看,除了打开套接字时需要使用的地址之外,IPv4 和 IPv6 套接字之间应该没有区别。
    • (3) 不正确。套接字以您发送它的任何顺序发送 data,而不是按网络字节顺序。这仅适用于 IP、UDP 和 TCP 标头。
    【解决方案2】:

    Socket是操作系统提供的一种软件机制。顾名思义,你可以把它想象成一个“电源插座”或一些电连接器,尽管插座不是物理设备,而是一种软件机制。在现实世界中,当您有两个电连接器时,您可以用电线将它们连接起来。以与网络编程相同的方式,您可以在一台计算机上创建一个套接字,在另一台计算机上创建另一个套接字,然后连接这些套接字。当您将数据写入其中一个时,您会在另一个上收到它。还有几种不同类型的插座。例如,如果您正在编写服务器软件,您希望拥有一个从不发送或接收实际数据而只侦听和接受传入连接并为每个新连接创建一个新套接字的侦听套接字。

    【讨论】:

    • 谁负责将数据从一端发送到另一端?
    【解决方案3】:

    在 C 语言中,套接字是内核空间中的一种数据结构,对应于 UDP 或 TCP 会话的一个端点(我在谈论 UDP 时非常松散地使用会话 非常)。它通常与本地端的一个端口号相关联,并且在会话的任一端很少有多个“知名”号。

    “原始套接字”或多或少是物理传输的端点。它们很少用于应用程序编程,但有时用于各种诊断(traceroute、ping,可能还有其他),并且可能需要提升权限才能打开。

    套接字本质上是一个二进制八位组传输。将套接字(至少是 TCP 套接字)视为基于文本的流并不罕见。

    如果你深入挖掘的话,我还没有看到不涉及套接字之类的编程模型,但肯定还有其他的网络模型。 “/net/”伪文件系统,打开“/net/127.0.0.0.1/tcp/80”(或“tcp/www”)将为您提供一个文件句柄,其中写入最终在本地主机上的Web服务器上只是一个。

    【讨论】:

      【解决方案4】:

      假设your PC at home,您打开了two browser 窗口。

      一个在看facebook website,另一个在看Yahoo website。

      与 facebook 的连接是:

      Your PC – IP1+port 30200 ——– facebook IP2 +port 80 (standard port)

      combination IP1+30200 = the socket on the client computer 和 IP2 + port 80 = destination socket on the facebook server。

      与雅虎的连接是:

      your PC – IP1+port 60401 ——–Yahoo IP3 +port 80 (standard port)

      The combination IP1+60401 = the socket on the client computer 和IP3 + port 80 = destination socket on the Yahoo server。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-11
        • 1970-01-01
        • 1970-01-01
        • 2021-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-30
        相关资源
        最近更新 更多