这是来自教材James F. Kurose, Keith W. Ross的图片:计算机网络:自顶向下方法,ISBN-13: 978-0-13-285620-1。ISBN-10: 0-13-285620-4。 根据图片,欢迎端口与实际连接端口不同(因为不同的套接字分配了不同的端口号)。那么假设客户端正在初始化HTTP请求,那么Web服务器上的欢迎端口是80,那么实际连接端口是否与80不同?第二个问题是,TCP握手的目的是什么?我只学过TCP握手的原理,但并不知道为什么握手是必要的。如果我们从TCP中去除握手,我们仍然可以使TCP成为可靠的数据传输协议,对吗?
根据图片,欢迎端口与实际连接端口不同。 并非如此。图片中没有任何指示。它表明监听和已连接的套接字是不同的。这不是同一件事。(因为不同的套接字被分配了不同的端口号。) 并非如此。已接受的套接字具有与其被接受的侦听套接字相同的本地端口号。我不知道您从哪里得到“欢迎端口”这个术语,或者作者从哪里得到“欢迎套接字”这个术语。正确的术语是“监听端口”。那么假设客户端正在初始化HTTP请求,那么Web服务器上的欢迎端口是80,那么实际连接端口是否与80不同? 不是。它是80。第二个问题是,TCP握手的目的是什么?我只学过TCP握手的原因,但实际上不知道为什么握手很重要。如果我们从TCP中摆脱握手,我们仍然可以使TCP成为可靠的数据传输协议,对吧? 不行。它有几个目的,其中之一是建立双方都知道连接存在的事实,另一个目的是在每个方向上建立初始序列号,这使攻击者更难注入数据。
在最低层次上,“欢迎套接字”是代表特定端口的侦听套接字的文件描述符。当另一台计算机连接到该端口并且服务器调用accept时,将生成一个新的文件描述符,表示该特定连接。这就是此图表中的“连接套接字”。 三次握手是建立TCP/IP会话参数所必需的。TCP/IP是一种相当简洁的协议,没有太多复杂或繁琐的仪式。SYN、SYN-ACK、ACK过程确保连接的两端在数据传输开始之前同步。 这个同步过程非常熟悉: 如果没有最终的ACK,发送SYN-ACK的一方不知道他们的响应是否已收到。第三个数据包是必需的,以提供确认。