基础概念
OSI 是 Open System Interconnect的 缩写,意为开放式系统互联。TCP/IP模型
可以看做是对OSI模型
的一种简化。
- OSI模型从底层到上层依次是:
物理层->链路层->网络层->传输层->会话层->表示层->应用层
; - TCP/IP模型从底层到上层依次是:
物理链路层->网络层->传输层->应用层
。
HTTP、WebSocket 等应用层协议,都是基于 TCP 协议来传输数据的。我们可以把这些高级协议理解成对 TCP 的封装。
既然大家都使用 TCP 协议,那么大家的连接和断开,都要遵循 TCP 协议中的三次握手
和四次挥手
,只是在连接之后发送的内容不同,或者是断开的时间不同。
握手原理
- SYN:建立连接标志位
- ACK:确认标志位
- FIN:结束标志位
- Seq:序列化编号
- Ack number:确认编号
三次握手
- 第一次握手:建立连接时,客户端A发送SYN包(
SYN置为1,seq=x
)到服务器B,并进入SYN_SEND
状态,等待服务器B确认; - 第二次握手:服务器收到SYN报文段,需要对这个SYN报文段进行确认,设置Ack number为seq+1(即
Ack置为1,Ack number = x+1
);
同时,自己还要发送SYN请求信息,将SYN置为1,seq=y
;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV
状态; - 第三次握手:客户端收到服务器的SYN+ACK报文段,然后将Ack number设置为y+1,即(
SYN位为0,ACK位为1,Ack number = y+1
),向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED
状态,完成TCP三次握手。
四次挥手
- 第一次挥手:主机1(可以使客户端,也可以是服务器端),设置Seq 和Ack Number,向主机2发送一个