tcp/ip协议状态

TCP/IP(transmission control protocol/ internet protocol)

即传输控制协议/网际协议,提供点对点的链接机制和数据传输标准,通过协议堆栈的方式,实现出不同的通信协议。


在tcp报文首部中,需要了解的标志位

  • URG:紧急指针标志,1表示有效,0表示忽略;
  • ACK:确认序号标志,1表示确认有效,0表示忽略确认字段;
  • PUSH:为1表示指示接收方收到该报文后,尽快将报文交给应用程序而不是在缓冲区排队;
  • RST:重置连接标志,用于重置由于主机崩溃或其他原因出现的错误连接,或拒绝非法报文连接请求;
  • SYN:同步序号,用于建立连接过程中的连接请求;
  • FIN:用于释放连接,为1时表示发送方已经没有数据发送了,关闭本端数据流。

三次握手建立连接:

  1. LISTEN:调用socket,bind,listen函数之后,服务器端进入等待连接的状态,监听客户端发过来的连接请求
  2. SYN_SENT:客户端调用connect函数,发送SYN给服务器,等待服务器端的确认
  3. SYN_RCVD:服务器端收到了客户端的连接请求,服务器端的发送ACK+SYN给客户端
  4. ESTABLISHED:客户端收到服务器的ACK+SYN,立即回应一个ACK,进入ESTABLISHED状态,服务器端收到客户端的ACK也会从SYS_RCVD进入ESTABLISHED状态,客户端和服务器端都准备进行传输数据了。

出于安全考虑,为避免SYN Flood攻击,实际上在accept函数之前已经完成了三次握手。

四次挥手终止连接:

主动打开:客户端发送第一个SYN报文,主动发起建立tcp连接的请求

被动打开:服务器接收第一个SYN报文并且回应一个SYN报文,响应tcp连接请求

  1. FIN_WAIT-1:主动关闭端调用close函数,发送FIN并等待ACK报文的状态,一旦收到ACK报文就进入下一状态
  2. CLOSE-WAIT:被动关闭端收到FIN后,已发送ACK报文但还未发送FIN报文,等待应用程序发出关闭连接的指令
  3. FIN_WAIT-2:主动关闭端收到被动关闭端的ACK并等待另一端FIN报文的状态,等接收到另一端的FIN报文,状态就变成了TIMA_WAIT
  4. LAST_ACK:被动关闭端,已经发送FIN等待ACK报文,接收到主动端的ACK,进入CLOSED状态

TIMEWAIT 状态的任务:可靠的终止连接(万一被动关闭的一端未收到ACK,不停的发送FIN),丢弃迟来的数据(内核让read返回值为0通知应用层另一端已经停止向本段的数据传输)


TCP是一种提供可靠性交付协议,即传输的数据,无差错,不丢失,不重复并且按序到达。

可靠性具体表现在传输数据的过程中:

确认重传(positive acknowledgement with retransmission)

  • 数据被分割成合适发送的数据块并使用序列号对数据进行编号,每个报文段都包含一个校验码,对收到报文段进行校验若与校验码一致就回复确认,否则就丢弃,等待发送端超时重发;
  • 对失序的报文段进行重新排序,通过对数据序列号排序以正确的顺序交给应用层;
  • 丢弃重复报文;
  • 发送方每发出一个报文段就会启动一个定时器,等待被动方确认收到此报文,如果不能及时收到确认,将重发此报文;

流量控制(flow control using sliding window)

  • 滑动窗口(slide window):

防止发送方发送速度较快,导致接收方缓冲区溢出,只允发送方发送接收方缓冲区能接收的数据。

拥塞控制(congestion control)

拥塞控制是基于整个网络的通信状况,在网络延时增加的情况下,重传会导致网络的负担进而形成一个恶性循环。为避免产生“网络风暴”,提高网络网络利用率,保证每条数据流的公平性,TCP引入拥塞控制策略。

  • 慢启动(slow start) 

刚开始发送数据时并不知道网络的实际情况,需要一种试探的方式平滑的增加拥塞窗口(CWND)的大小,当拥塞窗口的大小超过慢启动门限(ssthresh)将进入拥塞避免阶段。

  • 避免拥塞(congestion avoidance)

使得拥塞窗口按照线性的方式增加,从而减缓其扩大。

  • 快速恢复(fast recovery)和快速重传(fast retransmission)

接收方发现有报文段丢失,就会发送ACK报文主动告诉发送方重传丢失的报文段,如果连续收到的3个重复确认报文,就启动发送方的快速重传和快速恢复,立即重传丢失的报文段。

TCP状态转换图详解

图解TCP-IP协议

TCP状态转换图TCP/IP连接状态变迁图CLOSE_WAIT

TCP的状态变迁图《TCP/IP详解》之一:连接建立、断开

TCP/IP 建立连接、断开连接的过程

《linux高性能服务器编程》

发布了26 篇原创文章 · 获赞 16 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Teemo_king/article/details/79918067