gpt4 book ai didi

sockets - 端口号和套接字的区别

转载 作者:行者123 更新时间:2023-12-05 00:56:45 24 4
gpt4 key购买 nike

我开始阅读 W. Richard Stevens 的 UNIX 网络编程,我很困惑端口和套接字。当我在互联网上阅读时,它说套接字是连接的端点,并且对于端口号,它写道,IP 地址和端口没有形成一个唯一的对。
所以现在我的问题是:

  • (1) 这两者有什么区别?
  • (2)sockets和ports是如何内部操作的。套接字是文件吗?
  • (3) 当我们使用应用程序发送数据时,数据是如何发送的?
  • (4) 如果有套接字,那么我们为什么要使用端口号?

  • 对不起我的英语..提前感谢您的回复。

    最佳答案

    (1) What is the difference between these two ?


    运行 IP 网络的计算机始终具有固定数量的端口——65535 个 TCP 端口和 65535 个 UDP 端口。网络数据包的 header 中包含一个 16 位无符号短字段,用于指定数据包应传送到哪些端口。
    另一方面,套接字由每个程序按需分配。套接字用作程序和操作系统网络堆栈之间的句柄/接口(interface),用于为特定网络任务构建和指定上下文。一个套接字可能绑定(bind)到一个端口,也可能不绑定(bind),并且同时有多个套接字绑定(bind)到一个特定端口也是可能的(并且很常见)。

    (2)How are sockets and ports internally manipulated. Are sockets afile ?


    这完全取决于操作系统。并且不同的操作系统以不同的方式进行。目前尚不清楚这个问题中的"file"是什么意思,但一般来说,套接字与文件系统没有任何关系。另一方面,Unix 风格操作系统的一个特点是套接字描述符也可以以与文件系统文件描述符非常相似的方式使用——即您可以将它们传递给 read()/write()/select() 等并获得有用的结果。其他操作系统,如 Windows,不支持该功能,对于它们,您必须对套接字和文件使用一组完全独立的函数调用。

    (3) How is data sent when we send it using an application ?


    应用程序调用 send() 函数(或类似的函数,例如 sendto()),传入相关的套接字描述符以及指向它要发送的数据的指针,然后由网络堆栈来复制该数据将数据打包成一个数据包并将其传送到适当的网络设备进行传输。

    (4) If sockets are there then why do we use port numbers ?


    因为您需要一种与其他计算机上的特定程序通信的方法,而计算机 A 无法知道计算机 B 上存在哪些套接字(如果有)。但是端口号是固定的,因此程序员可以将它们用作通信的集合点——例如,您的 Web 浏览器知道 Web 服务器几乎肯定会在服务器运行时监听端口 80 上的传入 HTTP 请求,因此它可以将其请求发送到端口 80 并有合理的期望得到有用的回应。如果它必须指定一个套接字作为目标,它会指定什么?服务器的套接字编号是任意的,并且每次服务器运行时都可能不同。

    关于sockets - 端口号和套接字的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35828447/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com