TCP的欢迎端口和连接端口有什么区别?三次握手的目的是什么?

3
这是来自教材James F. Kurose, Keith W. Ross的图片:计算机网络:自顶向下方法,ISBN-13: 978-0-13-285620-1。ISBN-10: 0-13-285620-4。

enter image description here

根据图片,欢迎端口与实际连接端口不同(因为不同的套接字分配了不同的端口号)。那么假设客户端正在初始化HTTP请求,那么Web服务器上的欢迎端口是80,那么实际连接端口是否与80不同?
第二个问题是,TCP握手的目的是什么?我只学过TCP握手的原理,但并不知道为什么握手是必要的。如果我们从TCP中去除握手,我们仍然可以使TCP成为可靠的数据传输协议,对吗?

1
请注意,您包含的图表显示服务器进程上有两个套接字,而不是两个端口。相同的服务器端口用于两个套接字。(“套接字”的概念只是服务器端的软件事物,与通过电线发送的内容无关。) - Greg Hewgill
2个回答

5
根据图片,欢迎端口与实际连接端口不同。 并非如此。图片中没有任何指示。它表明监听和已连接的套接字是不同的。这不是同一件事。
(因为不同的套接字被分配了不同的端口号。) 并非如此。已接受的套接字具有与其被接受的侦听套接字相同的本地端口号。我不知道您从哪里得到“欢迎端口”这个术语,或者作者从哪里得到“欢迎套接字”这个术语。正确的术语是“监听端口”。
那么假设客户端正在初始化HTTP请求,那么Web服务器上的欢迎端口是80,那么实际连接端口是否与80不同? 不是。它是80。
第二个问题是,TCP握手的目的是什么?我只学过TCP握手的原因,但实际上不知道为什么握手很重要。如果我们从TCP中摆脱握手,我们仍然可以使TCP成为可靠的数据传输协议,对吧? 不行。它有几个目的,其中之一是建立双方都知道连接存在的事实,另一个目的是在每个方向上建立初始序列号,这使攻击者更难注入数据。

那么套接字和端口号有什么区别呢?我被告知,“IP地址和端口”一起被称为“套接字”,因此由于欢迎套接字和连接套接字的IP地址和端口号相同,为什么我们会有两个不同的套接字呢? - whoisit
请查看端口和套接字的区别是什么 - user207421
感谢您发布答案。但是,由于IP地址和端口号“一起被称为”套接字“,所以我们为什么会有两个不同的套接字:欢迎套接字和连接套接字,因为它们的IP地址和端口号相同? - whoisit
不对,"IP地址和端口"一起被称为"套接字(Socket)"是错误的。套接字是连接的终点。请查看我刚刚发布的链接以及其他重复内容。 - user207421

3

在最低层次上,“欢迎套接字”是代表特定端口的侦听套接字的文件描述符。当另一台计算机连接到该端口并且服务器调用accept时,将生成一个新的文件描述符,表示该特定连接。这就是此图表中的“连接套接字”。

三次握手是建立TCP/IP会话参数所必需的。TCP/IP是一种相当简洁的协议,没有太多复杂或繁琐的仪式。SYN、SYN-ACK、ACK过程确保连接的两端在数据传输开始之前同步。

这个同步过程非常熟悉:

enter image description here

如果没有最终的ACK,发送SYN-ACK的一方不知道他们的响应是否已收到。第三个数据包是必需的,以提供确认。


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