Sockets 了解套接字、客户机-服务器体系结构&;客户差异化

Sockets 了解套接字、客户机-服务器体系结构&;客户差异化,sockets,client-server,Sockets,Client Server,我在这个论坛上读了很多关于套接字和客户机-服务器连接的理论,但有些观点仍然模糊不清,或者有些答案不能完全满足我 此外,我希望我的话得到确认、完成或更正: 1) _uu套接字由IP源(客户端的IP)、端口源(操作系统在1024和65535之间自动随机选择的端口)、IP目的地(127.0.0.1?我这里没有提到)、端口目的地(由服务器端口定义的开发人员)和协议类型组成 这些行可能已经有问题了 但考虑到这一点,服务器如何区分从同一台机器访问服务器的两个进程?(要理解,如果开发人员想要阻止来自同一台机器

我在这个论坛上读了很多关于套接字和客户机-服务器连接的理论,但有些观点仍然模糊不清,或者有些答案不能完全满足我

此外,我希望我的话得到确认、完成或更正:

1) _uu套接字由IP源(客户端的IP)、端口源(操作系统在1024和65535之间自动随机选择的端口)、IP目的地(127.0.0.1?我这里没有提到)、端口目的地(由服务器端口定义的开发人员)和协议类型组成

这些行可能已经有问题了

但考虑到这一点,服务器如何区分从同一台机器访问服务器的两个进程?(要理解,如果开发人员想要阻止来自同一台机器的多个访问,他将如何发挥作用)。 唯一的区别是操作系统自动填充的源端口。在这种情况下,它会表现得像是一台完全不同的机器,对吗

2) 我听说实际上有一对插座。一个由客户端生成,一个由服务器生成

服务器真的需要第二个套接字吗?此套接字是一个简单的副本,用于在“当前连接的客户端”列表中保留副本,还是一个具有不同值的不同套接字

3) _uu客户端应在何时“断开连接”?每次询问?在某个过程结束时?其他的

谢谢你的启发

1) _uu套接字由IP源(客户端的IP)、端口源组成 (操作系统在1024到1024之间自动随机选择的端口 65535),IP目的地(127.0.0.1?我在这里找不到的东西),端口 目标(由服务器端口定义的开发程序)和协议 类型

我不会说这些数据点构成了“套接字”;相反,TCP连接可以仅使用以下数据点进行唯一标识:

1. Source IP - the IP address of the client computer
2. Source Port - the port number (on the client computer) that the client is sending packets from and receiving packets on
3. Destination IP - the IP address of the server computer
4. Destination Port - the port number (on the server computer) that the server is sending packets from and receivign packets on
5. Protocol type - what communications-protocol is in use (i.e. either TCP or UDP)
但是考虑到这是真的,服务器如何区分这两个呢 从同一台计算机访问服务器的进程

它可以区分它们,因为5元组(上面)对于两个连接中的每一个都是唯一的。特别是,在服务器从进程2接收的TCP数据包中,字段2(源端口)将不同于从进程1接收的数据包中的值

唯一的区别是自动填充的源端口 操作系统。在这种情况下,它会表现得完全不同 机器,对吗

服务器可以按其编程方式进行操作,但在大多数情况下,服务器将被编程为不关心两个客户端连接是否来自同一台物理机器。对于大多数服务器来说,客户机就是客户机,而客户机的物理位置并不那么重要

服务器真的需要第二个套接字吗?是 此套接字是一个简单的副本,用于在“客户端”中保存副本 “已连接”-列表还是具有不同值的不同套接字

套接字是一种存在于计算机内存中的数据结构,用于帮助计算机跟踪与特定网络连接相关的当前状态。由于客户机和服务器都需要跟踪其连接的结束,因此客户机和服务器都有自己的套接字来表示其端点。(请注意“TCP连接”(您可以将其想象为从一台计算机到另一台计算机的虚拟/虚拟连接)与两个“套接字”(即位于该连接两端的虚拟/虚拟连接器,将连接线连接到一端的客户机程序和另一端的服务器程序)之间的区别

3) _uu客户端应在何时“断开连接”?每次询问?在 某个过程的结束?其他的

只要它愿意;这取决于程序员(*)。打开和连接一个新的套接字会有启动/关闭成本,但保持套接字无限期地打开也会有一些持续的内存和CPU开销,因此程序员必须做出设计决策,决定是否要让套接字在较长时间内保持打开


(*)请注意,在现代操作系统中,如果客户端程序退出或崩溃,操作系统将自动关闭套接字并断开连接。

非常感谢这些精确性!唯一让我感到“不满意”的一点是:“而且客户的物理位置没有那么重要。”我只是意识到,如果你想避免多个连接,那么绝对没有可用的参数来区分。。。即使它可能是必要的,或者至少在少数情况下是有用的。对我来说,这似乎是不现实的,事实上,如果服务器只允许来自给定IP地址的一个连接,那么这样做是完全自由的。它可以在任何套接字上调用
getpeername()
,以找出连接另一端所在的IP地址(即字段#1),如果两个套接字具有相同的源IP字段,它可以关闭其中一个。(注意,由于NAT和代理等原因,源IP字段可能是NAT/代理框的IP地址,而不是客户端实际运行的计算机的IP地址)