网上关于这个问题吵得很凶,但是仔细看过之后我更偏向认为两种说的是一样的。
首先我们来看看 TCP 协议的三次握手过程
如上图所示:
解释一下里面的英文:
- 里面起到作用的一些标志位就是TCP报文首部里的内容,ACK确认标志位,SYN同步标志位,ack确认号;
- 两端的状态CLOSED 就是连接关闭状态,LISTEN状态就是监听状态,SYN-SENT就是同步已发送状态,SYN-RCVD就是同步已接受状态,ESTABLISHED就是连接已建立状态。
三报文挥手的过程如下:
- 客户端发送连接请求:头部SYN=1,表明这是一个TCP连接请求报文段,序号seq有一个初始值,作为TCP客户进程选择的初始序号。(SYN=1的报文是不能携带数据的)
- 服务器发送针对收到的连接请求的确认:头部SYN=1,确认位ACK=1,表明是一个TCP请求确认报文段,seq设定初值y,作为服务器进程选择的初始序号&