套接字连接和TCP连接之间有什么区别?

30

这两个概念是相同的吗?它们有区别吗?

在我看来,它们是不同的,socket连接是基于TCP连接的。一个socket包含一个IP地址和端口号,只能连接到另一个socket,但是在同一台机器上的一个IP地址和端口号可以通过TCP连接与许多其他IP地址和端口号连接起来。 这样说对吗?

4个回答

47

TCP/IP是一种通信协议栈,套接字(socket)则是(双向)通信的端点。套接字不一定基于TCP,但通常情况下确实如此。术语“套接字”也经常用于指操作系统提供的API,它允许您在TCP/IP协议栈上建立连接,例如,Winsock API为Windows上通过TCP/IP协议栈建立连接提供了API。

套接字唯一地映射到应用程序,因为端口由操作系统为您管理。

更多阅读:http://en.wikipedia.org/wiki/Internet_socket以及http://en.wikipedia.org/wiki/Winsock


10

Socket是OSI模型中的第5层协议(会话层),不依赖于底层协议,这意味着它可以在TCP、UDP、MPTCP等(第4层-传输层协议)之上运行。Socket连接用于节点之间持续交换数据(它创建了它们之间的会话),但TCP连接使数据段在节点之间可靠传输。


6
套接字被定义为应用程序编程接口(API),通常用于两个进程之间的通信,但不仅限于此。它们涉及库函数、系统调用和操作系统内核实现。最常见的套接字API类型是Berkely套接字和Winsock(Windows)。
套接字的其他分类按其提供的访问类型分为:
- TCP套接字:用于建立TCP连接 - UDP套接字:用于UDP通信 - 数据包套接字:用于直接访问第2层 - Unix域套接字:通过同一节点内的文件进行IPC - 原始套接字:用于直接访问IP层 - 路由套接字 - SCTP套接字 - 其他类型的套接字
在Linux、Unix和Windows中,有TCP、UDP和Unix域套接字。上述其他类型的套接字在Linux中实现,我不知道它们是否存在于Windows中。
TCP连接是一个TCP概念。它连接两个端点,通常是两个进程(或一个进程自身),并由(IPAddress1、Port1、IPAddress2、Port2)定义。在TCP 3次握手之后建立TCP连接。
在TCP中,套接字由两个进程之间的TCP连接元素(IPAddress1、Port1、IPAddress2、Port2)定义。但是,也可以存在一个监听套接字。这是一个允许进程通过网络监听其他进程建立连接的套接字。

https://en.wikipedia.org/wiki/Berkeley_sockets

https://en.wikipedia.org/wiki/Winsock


1
也许作为补充:互联网套接字(TCP、UDP等)由主机地址和16位端口号(0-65535)标识,而Unix域套接字或进程间(在同一节点上)通信套接字由文件名标识。 - theking2

2

Socket连接意味着两个对等方相互连接,协议可以是TCP或UDP。因此,连接不指定连接类型,它是连接的通用术语。

当您说TCP连接时,它意味着使用TCP协议连接了两个节点。


谢谢澄清。那么基于TCP的套接字连接怎么样呢?TCP套接字连接和TCP连接有什么区别? - Thomson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接