首页 文章

端口号和套接字之间的区别

提问于
浏览
4

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

  • (1)这两者有什么区别?

  • (2)内部如何操作套接字和端口 . 套接字是文件吗?

  • (3)当我们使用应用程序发送数据时如何发送数据?

  • (4)如果有插座那么我们为什么要使用端口号?

对不起我的英文..先谢谢你的回复 .

2 回答

  • 4

    (1)这两者有什么区别?

    运行IP网络的计算机始终具有固定数量的端口 - 65535个TCP端口和65535个UDP端口 . 网络数据包的头部包含一个16字节的无符号短字段,用于指定应将数据包传送到哪些端口 .

    另一方面,套接字由每个程序分配需求 . 套接字用作程序和OS的网络堆栈之间的句柄/接口,用于构建和指定特定网络任务的上下文 . 套接字可以绑定也可以不绑定到端口,并且也可以(并且通常)同时将多个套接字绑定到特定端口 .

    (2)内部如何操作套接字和端口 . 套接字是文件吗?

    这完全取决于操作系统;不同的操作系统以不同的方式 . 目前还不清楚这个问题中“文件”是什么意思,但一般情况下套接字与文件系统没有任何关系 . 另一方面,Unix风格的操作系统的一个特性是套接字描述符也可以像文件系统文件描述符一样使用 - 即你可以将它们传递给read()/ write()/ select()等并获得有用的结果 . 其他操作系统(如Windows)不支持该功能,对于它们,您必须对套接字与文件使用完全独立的函数调用集 .

    (3)当我们使用应用程序发送数据时如何发送数据?

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

    (4)如果有插座那么我们为什么要使用端口号?

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

  • 0

    1)这两者有什么区别? (2)内部如何操作套接字和端口 . 套接字是文件吗?

    套接字是(IP端口):

    • 套接字就像电话(即用于通信的端到端设备)

    • IP就像您的电话号码(即您的套接字地址)

    • 端口就像您要与之交谈的人(即您要从该地址订购的服务)

    套接字是进程的一部分 . linux中的进程是一个文件 .

    (3)当我们使用应用程序发送数据时如何发送数据?

    通过将数据转换为字节来发送数据 . 有关字节排序的小/大端问题,因此在编码时必须考虑到这一点 .

    (4)如果有插座那么我们为什么要使用端口号?

    套接字是(地址端口),这意味着您可以通过许多电话号码(IP)从许多电话号码(IP)访问您想要与之通话的人(端口)(这并不意味着一个电话号码上的人将回复您)与其他电话号码相同,因为他/她的工作可能会有所不同) .

相关问题