TCP运输连接的建立和释放
运输连接的三个阶段:
- 建立连接
- 数据传送
- 连接释放
TCP报文首部字段:
序号seq
:本报文段所发送的第一个字节的序号。
确认号ack
:期望收到对方下一个报文的第一个数据字节的序号。
例如B正确收到了A发送的一个报文段,其序号字段值是501,而数据长度是200字节(501~700),这表明B正确收到了A发送的到序号700为止的数据。因此,B期望收到A的下一个数据序号为701,于是B在发送A的确认报文中把确认号置为701.
- 即:若确认号 = N,表明到序号N-1的所有数据都已正确收到。
确认位ACK
:仅当ACK = 1时, 确认号字段才有效。
同步SYN
:在建立连接时用来同步序号。
- 当SYN =1, ACK = 0时,表明这是一个请求报文,表明请求建立连接。
- 若对方同意建立连接,则发送响应报文,响应报文中SYN = 1, ACK = 1。
终止FIN
:用来释放一个连接。当FIN = 1 时,表明此报文的发送方的数据已经发送完毕,请求释放连接。
记忆版1
TCP连接建立:三次握手(简)
流程:请求-确认-对确认的确认
步骤:
- 客户端向服务器端发送SYN包;
- 服务端向客户端发送SYN+ACK;
- 客户端回复ACK。
描述:客户端发送连接请求报文段,服务器端发送确认报文段,客户端发送确认报文段。
发生的错误:已失效的连接请求报文段
如果是两次握手:假如A发送了两次“连接请求报文段”,其中一个完成了建立连接、传输数据、关闭连接的操作后。服务器端对另一个“连接请求报文段”进行了确认而进入等待,浪费资源。而三次握手机制中由于服务器端并没有收到客户端的“确认报文段”,因而知道不必太长等待。
TCP连接释放:四次挥手(简)
流程:A:拜 B:好吧,拜 A:好吧。
- 客户端向服务器端发送FIN;
- 服务器端回复ACK,并进入wait状态;
- 服务器端确认并发送FIN;
- 客户端回复ACK。