TCP通信

作者: PaulLuv | 来源:发表于2018-03-14 10:46 被阅读5次

    1. TCP的几个状态

    • SYN: 建立连接。
    • ACK: 表示响应。
    • FIN: 表示关闭连接。
    • PSH:表示有DATA数据传输。
    • RST: 表示连接重置。
    • URG: 紧急指针有效。

    2. 三次握手

    第一次:客户端发送syn包(syn = 1,seq = x,x随机产生)到服务器,并进入SYN_SEND状态,等待服务器确认;

    第二次:服务器收到syn包(由syn = 1知道客户端要求建立连接),响应客户端发送 SYN+ACK包,SYN(seq = y) ACK(ack = x +1)。此时服务器进入SYN_RECV状态;

    第三次: 客户端收到服务器的 SYN+ACK包后,向服务器发送确认包 ACK(ack = y +1),发送完毕后,客户端与服务端进入ESTABLISHED状态,完成三次握手。

    握手过程中传输的包里不包含数据,三次握手完毕后才开始正式的传输数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP连接都将被一直保持下去。

    简单讲,第一次发送连接包(seq = x),第二次发送响应连接包(ack = x + 1,seq =y),第三次响应包(ack= y+1)

    3. 数据传输

    1. 超时重传机制
      超时重传机制: 每次发送数据包时,发送的数据报都有seq号,接收端接收到数据后,会回复ack进行确认,表示某一seq号的数据已经收到。发送方在发送了某个seq包后,等待一段时间,如果没有收到对于的ack回复,就会认为报文丢失,会重传这个数据包。
      超时重传机制用来保证TCP传输的可靠性。

    2. 快速重传机制
      接收数据方一旦发现有数据包丢掉了,就会发送ack报文告诉发送端重传丢失的报文。如果发送端连续收到标号相同的ack包,则会触发客户端的快速重传。
      超时重传是在发送端等超时,然后触发重传。
      快速重传是接收端主动告诉发送端数据没有收到,然后触发发送端重传。

    3.流量控值(TCP滑动窗流量控值)
    TCP头里有一个字段叫Window,又叫Advertised-Window。这个字段是接收端告诉发送端自己还有多少缓冲区可以接收数据。于是发送端就可以根据接收端的这个处理能力来发送数据,避免接收端处理不过来。
    滑动窗是可以提高TCP传输效率的一种机制。

    1. 拥塞机制
      滑动窗用来做流量控制,只关注发送端和接收端自身的情况,没有考虑整个网络的通信情况。
      拥塞机制是基于整个网络来考虑的。
      某一时刻,网络延迟增加,那么会触发TCP的重传机制。但是,重传会导致更严重的网络负担,会导致更大的延迟以及更多的丢包。于是这个情况会进入恶性循环,被不断的放大。如果一个网络内有上万的TCP连接,那么瞬间就会形成网络风暴,TCP这个协议会拖垮整个网络。因此,TCP引入了拥塞控值策略。
      拥塞策略算法主要包括:慢启动,拥塞避免,拥塞发生,快速恢复。
      (后续再深入了解...)

    4. 四次挥手

    第一次:主动关闭方发送一个FIN(seq = x,ack = y),用来关闭主动方到被动关闭方的数据传送,但此时,主动关闭方还可以接收数据。

    第二次:被动关闭方收到FIN包后,发送一个响应ACK(x +1)给对方。

    第三次:被动关闭方主动发送一个FIN(seq = y),用来关闭被动关闭方到主动关闭方的数据传输。

    第四次:主动关闭方收到被动关闭方的FIN后,发送一个响应ACK(y +1)给对方,至此,完成四次挥手。

    tcp_connect.jpg

    相关文章

      网友评论

        本文标题:TCP通信

        本文链接:https://www.haomeiwen.com/subject/nfvzfftx.html