了解套接字,客户端-服务器架构和客户端差异

时间:2018-07-23 14:42:25

标签: sockets client-server

在该论坛上,我已经阅读了很多有关套接字和客户端-服务器连接的理论,但是有些观点仍然模糊不清,或者有些答案不能完全满足我的要求。

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

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

这些行可能已经出了一些问题。

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

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

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

3)_客户何时应“断开连接”?在每个查询?在某些过程结束时?其他?

感谢您的启发!

1 个答案:

答案 0 :(得分:0)

  

1)_套接字由IP源(客户端的IP),端口源组成   (操作系统自动在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)_客户何时应“断开连接”?在每个查询?在   一些过程结束了吗?其他?

只要它愿意,这取决于程序员(*)。打开和连接新的套接字需要花费启动/关闭的费用,但是无限期地保持套接字的开放还存在一些持续的内存和CPU开销,因此程序员必须做出是否要保持套接字打开的设计决策。是否延长时间。

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