首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux的Internet域套接字、传输协议(TCP/UDP)的S套接字和端口

Linux的Internet域套接字、传输协议(TCP/UDP)的S套接字和端口
EN

Unix & Linux用户
提问于 2019-02-14 21:02:19
回答 1查看 937关注 0票数 0

很长一段时间以来,我一直被一些困惑所困扰。

  • Linux提供的internet域套接字,
  • 传输协议(TCP/UDP)的S套接字和
  • 传输协议(TCP/UDP)的S端口。

因此,在一些相关帖子上的答复有很多含糊不清和不一致之处,使我的困惑更加严重。

  1. Linux和传输协议(TCP/UDP)都有“套接字”的概念。这两个概念有何不同?internet域套接字(表示为文件吗?)Linux提供的套接字在传输协议(TCP/UDP)中的忠实实现?(我想是的,如果是这样的话,我们可以交替使用这两个术语。)
  2. 从概念上讲,把传输协议(TCP/UDP)中的端口看作是元组(IP地址、传输协议、端口号)还是仅仅是端口号是正确的吗?(我猜一个端口是一个元组(IP地址、传输协议、端口号),因为我曾多次被教育,相同的端口号具有不同的IP地址或不同的传输协议代表着不同的端口。在这个意义上,端口和套接字(在传输协议中)似乎是一个相同的概念。似乎已建立的名称"port“仅指”端口号“,为了避免不必要的混淆,我将在下面明确使用”端口号“。
  3. 套接字(在传输协议中)和元组(IP地址、传输协议、端口号)之间有什么关系?套接字集与元组集(IP地址、传输协议、端口号)之间是否存在双射映射?每个元组必须有一个或多个套接字(IP地址、传输协议、端口号),每个套接字必须有一个或多个元组(IP地址、传输协议、端口号)?两个套接字能共享相同的元组(IP地址、传输协议、端口号)吗?两个元组(IP地址、传输协议、端口号)可以共享同一个套接字吗?
  4. 我听说了两个进程可以共享同一个套接字。 (我理解它的方式是两个进程可以共享一个文件,假设Linux的internet域套接字和传输协议(TCP/UDP)的S套接字可以互换使用)。两个进程可以共享相同的元组(IP地址、传输协议、端口号)吗?
  5. 我听说两个连接不能共享同一个套接字 (假设Linux的网域套接字和传输协议(TCP/UDP)的S套接字可以互换使用),两个连接可以共享相同的元组(IP地址、传输协议、端口号)吗?

谢谢。

EN

回答 1

Unix & Linux用户

发布于 2019-02-14 21:27:19

  1. 套接字是操作系统API。该API允许相同或不同系统上的应用程序通过TCP和UDP (和其他)协议进行通信。UNIX域套接字(在编写时不是internet域套接字)提供了类似的功能,仅用于与同一系统上的应用程序通信。两者的概念是相似的: API提供了创建套接字、绑定、listen+accept和连接套接字、读取和写入套接字以及关闭套接字的方法。在读写方面,它们匹配与常规文件、命名管道、匿名管道等相关的其他文件描述符,但是文件描述符的创建是不同的,与常规文件相比,文件描述符上还有更多的操作。
  2. TCP和UDP中的端口号是介于1和65535之间的整数。“端口”一词用作“端口号”的缩写。IP地址、端口号和协议的元组描述端点地址。在阅读其他文学作品时,称其为端口会引起混乱。
  3. 未连接(但已经绑定)套接字只表示单个端点(ip、端口、协议)。连接的套接字表示本地端点和另一个(本地或远程)端点,即连接。对于相同的连接,不能有多个内核内的套接字,但是对于同一个内核内的套接字,可以有多个文件描述符。其中一个可以在多个连接套接字中具有相同的端点,但对于相同的连接不能具有相同的端点,即连接的另一个端点必须不同。实际上,可以有多个表示同一个端点的未连接套接字,但这是非常不寻常的。
  4. 套接字可以在进程之间共享,因为套接字是文件描述符,文件描述符可以共享。共享通常通过分叉来完成,即父程序打开某个文件或套接字,其子程序继承它。但是也有一些方法可以将文件描述符/套接字从一个进程发送到另一个进程。共享意味着两者都可以写入和读取,但不会重复任何数据,也就是说,如果父数据读取一些数据,这些数据是从套接字中提取的,并且不能被子节点读取。但是,一个进程不可能创建一个新的套接字(而不是共享一个现有的套接字),它表示与同一个系统上的现有套接字完全相同的连接。
  5. 两个套接字/连接可以在一个端点上共享同一个端口,但它们不能共享两个端点,即至少一个源IP、源端口、目标IP、目标端口或协议需要不同。
票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/500714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档