python - python socket是否基本上像计算机到计算机VPN一样通过互联网连接主机和客户端?
问题描述
我对此进行了很多搜索,但找不到任何东西。我没有对python sockets进行太多尝试,只是制作了一个主机和客户端可以相互发送消息的系统。我想知道的是当客户端通过python套接字连接到主机时,它是否也在程序外部建立连接?例如,通过套接字连接后我们可以玩任何局域网游戏吗?
解决方案
套接字不特定于任何语言;它们是底层 API 提供给用户空间的逻辑端点。您可以使用任何支持网络的语言创建 TCP/IP 套接字。
“我想知道的是当客户端通过python套接字连接到主机时,它是否也在程序外部建立连接?”
这取决于您正在查看的图层。从顶部开始考虑 TCP/IP 模型的前三层(应用程序、传输、网络)。
应用层:互联网的所有底层都是从应用层抽象出来的。现在,如果您查看是否在程序外部建立了连接,那完全取决于它们遵循的协议。如果考虑 HTTP 协议,它大多是无状态或无连接的(如果忽略 cookie)。但是如果你看一下 SSL,就会发生一些握手,并且会话状态在客户端和服务器端都保持不变。
传输层:该层中两个著名的协议是 TCP 和 UDP。使用 TCP 在任何数据传输之前,通过执行三次握手来建立 TCP 连接。但是在 UDP 的情况下,没有定义像连接这样的术语。
Internet 层:虽然众所周知且最常用的网络架构是 Internet,但还有一些其他架构,例如 ATM CBR 和 ATM ABR。互联网架构属于数据报网络的范畴,这意味着没有状态维护,链路层交换机或路由器只是转发数据包。相反,ATM 体系结构属于虚电路网络的范畴。监控网络层的每个连接以提供服务。例如,在 ATM CBR 的情况下,监控连接以提供恒定比特率服务,而在 ATM ABR 的情况下,监控连接以提供最低比特率服务。
这里我只是总结了前三层的连接设置,其他层也可能发生同样的事情。
总而言之,是否在您的程序之外建立了连接?这取决于所有这些因素,您使用的是什么应用层协议,您使用的是什么传输层协议,以及底层网络架构是什么......等等。您还可以看到连接建立发生在网络层而不是应用层,这就是所有这些网络抽象的来源。您可以幸福地忽略潜在的细节!
推荐阅读
- azure - Azure DevOps - 本地部署管道
- vb.net - 如何检测 TCPClient 的服务器端断开连接?
- linux - SPNEGO 使用了错误的 KRBTGT 主体名称
- node.js - 无服务器框架 - JavaScript 堆内存不足
- c++ - 在 C++ 中读取范围迭代器;收到 ASAN 错误
- jenkins-pipeline - Jenkinsfile 未终止的带引号的字符串
- c++ - std::cout 输出 int 的编译错误
- java - 在两个表的条件下在休眠中批量插入
- excel - 在多个文件(文件夹内)中仅替换一列中的字符
- python - AWS beanstalk worker 实例部署错误:没有模块,没有属性