我正在读一篇文章(https://www.inetdaemon.com/tutorials/internet/tcp/3-way_handshake.shtml) 内容如下:
FTP、Telnet、HTTP、HTTPS、SMTP、POP3、IMAP、SSH 以及任何其他通过 TCP 运行的协议在打开连接时也会执行三次握手。
但是不是只有 TCP(在传输层)才有三次握手吗?像 HTTP 这样的应用层协议怎么也有三次握手,这意味着总共六次握手?
答案1
这篇文章具有误导性。这些协议本身并不重复同一种握手。
最有可能的是,本文只是意味着,如果您在应用层建立 SMTP 连接,那么您也必然在传输层建立 TCP 连接。
答案2
来自维基百科 TCP 连接建立:
- SYN:主动打开由客户端向服务器发送 SYN 来执行。客户端将段的序列号设置为随机值 A。
- SYN-ACK:作为响应,服务器回复 SYN-ACK。确认号设置为比收到的序列号大一,即 A+1,服务器为数据包选择的序列号是另一个随机数 B。
- ACK:最后,客户端向服务器发送回一个 ACK。序列号设置为收到的确认值即 A+1,确认号设置为比收到的序列号大一即 B+1。