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

网络工程 tcp IP地址 第 4 层
2022-02-12 23:47:28

我们知道 TCP 套接字是端口号和 IP 地址。TCP 套接字连接是 3 次握手:SYN 包、SYN-ACK 包和 ACK 包吗?

TCP套接字连接是否遵循TCP堆栈?

TCP连接是否遵循TCP堆栈进行数据传输?

我的问题是 TCP 堆栈、TCP 连接和 TCP 套接字连接如何相互关联?我们如何区分它们?并且套接字连接稍后使用由操作系统负责的IP地址?

1个回答

TCP 连接由一对套接字(本地和远程)标识。连接到远程 TCP 和握手可为您提供双向连接。它就像主机之间的一对管道(每个方向一个),任何进入管道一端的东西都会从另一端出来。

RFC 793,传输控制协议解释(见重点,但 RFC 更详细):

多路复用:

为了允许单个主机内的多个进程同时使用 TCP 通信设施,TCP 在每个主机内提供一组地址或端口。与来自互联网通信层的网络和主机地址连接起来,形成一个套接字。一对套接字唯一地标识每个连接。也就是说,一个套接字可以同时用于多个连接。

端口到进程的绑定由每个主机独立处理。然而,将经常使用的进程(例如,“记录器”或分时服务)附加到公众已知的固定套接字被证明是有用的。然后可以通过已知地址访问这些服务。建立和学习其他进程的端口地址可能涉及更多的动态机制。

连接:

上述可靠性和流量控制机制要求 TCP 初始化和维护每个数据流的某些状态信息。这些信息(包括套接字、序列号和窗口大小)的组合称为连接。每个连接都由一对标识其两侧的套接字唯一指定。

当两个进程希望进行通信时,它们的 TCP 必须首先建立连接(初始化每一端的状态信息)。当他们的通信完成时,连接将被终止或关闭以释放资源以供其他用途。

由于必须在不可靠的主机之间以及通过不可靠的互联网通信系统建立连接,因此使用基于时钟的序列号的握手机制来避免连接的错误初始化。