TCP三次握手与四次挥手

TCP概念

TCP是一种面向连接、可靠地、基于字节流的传输层通信协议。

  1. 面向连接是指在传输前,会先在传输信息前,建立一对一的连接。这里的连接不是物理上的,而是软件层面的,是一种状态。
  2. 可靠是指不论网络链路出现怎么样的链路变化,都能保证报文的完整性,有序性。
  3. 字节流:表示传输的信息大小没有边界,可以传输任意大的信息。

TCP连接

用于保证可靠性和流量控制的一组状态信息的组合,包括socket、序列号、窗口大小

通过socket(套接字)来确定一个TCP连接。

socke包含:源地址、目标地址、源端口、目标端口

TCP和UDP的区别:

  1. 连接:TCP需要建立一对一的连接,UDP不需要建立连接,使用广播的方式直接发送数据。
  2. 可靠性:TCP能保证数据传输的完整性和有序性,而UDP只是负责把数据传输出去 不管接收方是否收到
  3. 流量控制:TCP有流量控制机制,能保证数据传输安全性

TCP的三次握手

为什么需要三次握手

  1. 保证不会建立重复连接
  2. 保证传输的可靠性,同步初始化序列

三次握手的过程:

建立TCP连接不是真实的物理连接,而是软件层面的连接,其实是状态同步。

没有建立连接前客户端和服务器都处于closed状态,服务器端主动监听端口。

  1. 客户端向服务器端发出第一次请求, 报文包含一个随机数作为序列号起始值,syn为1,表示为syn报文,此时客户端状态为SYN_SENT
  2. 服务器端收到请求后返回一个报文,ack为1,生成一个随机数作为服务器端序列号起始值,将客户端序列号+1放入确认应答序列号内。此时服务器端状态为SYN_RCVD
  3. 客户端收到响应后,再次发送请求,报文的ack为1,确认应该序列号的值为响应报文的序列号+1。客户端发送后状态为ESTABLISHED,服务器端收到请求后,状态为ESTABLISHED。三次握手中只有第三次能够携带数据、

如果第三次握手的ack包丢失了怎么办?

如果第三次包丢失了,服务器端没有收到应答,在一定周期后会重发响应。

这是客户端其实已经是建立连接状态,如果给服务器发送数据,服务器端收到以后经过检查是没有建立连接的,会发送reset报文

四次挥手

当要关闭连接的时候,想需要经历四次挥手:、

  1. 客户端发送FIN报文,FIN为1,客户端进入FIN_wait1状态
  2. 服务器端收到FIN报文后,发送出响应报文,ack为1,FIN为1,进入CLOSE_WAIT状态,客户端收到报文后进入FIN_Wait2状态,等待服务器端关闭
    3.服务器端做好关闭准备后,发送FIN报文进入LAST_ACK状态,
  3. 客户端收到服务器的FIN报文,返回ack报,进入time——wait状态。服务器端收到以后进入closed状态,而客户端等待一段时间后,才进入close状态。
TCP长连接保活机制:

原理:
当一个tcp连接建立后,一段时间内没有请求,服务器端会发送一个探测包检查客户端是否有响应,如果有则服务器端继续保持连接,如果没有则关闭当前连接。
空闲时间:多久没有通信开始发起探测包
探测次数:最多探测几次
探测间隔
作用:从保活机制的实现来看,只有服务器端发送探测包,当探测失败后服务器端会做出处理,所以和客户端无关,主要是为了避免服务器端无效连接的存在,节省服务器资源。

你可能感兴趣的:(TCP三次握手与四次挥手)