TCP被称为面向连接、面向流,可靠的传输层协议。它与UDP最大的不同在于它是可靠性的,所以需要可靠传输的时候就需要用到TCP,如果需要快速传输则选择UDP。

    TCP的连接又称为3次握手。

    1)、客户端向服务器发送一个SYN分段,表示我要向和你连接。

    2)、服务器收到该分段后,向客户端发送一个ACK+SYN分段,ACK表示回应我已经收到了你的SYN分段,SYN分段表示我想和你连接。

   3)、 客户端收到服务器的SYN分段后,向服务器发送ACK分段进行确认。此时、TCP的连接建立完成了。

   打个比方:

      甲说:你在吗?

      乙说:我在。你在吗?

      甲说:我在。

 

  TCP的关闭:

    TCP的关闭必须要在双方的数据都发送完毕才进行关闭。

    1)、甲方想关闭数据,则需要发送FIN分段,发送了FIN分段之后,甲方就不能再发送新的数据。而新发送的FIN分段排队在之前发的分段之后,就是说只有等之前的数据发送完后,FIN分段才会从系统缓存中发送到乙方。但是此时甲方还是可以收到数据,

    2)、乙方收到FIN分段后,知道甲方数据已经发送完毕,乙方则通知程序数据接收已经完毕,然后想甲方发送一个ACK分段。等数据发送完毕后,乙方发送FIN分段。

         3)、甲方收到乙方的FIN后,向乙方发送ACK。等一定时间过去后,甲方认为连接一个关闭了,则进入close状态。

    4)、乙方收到ACK后,立即进入close状态。

 

 TCP数据传输这一块的3个机制:确认机制,超时机制,重发机制。

  确认机制:一般现实中都是累计确认机制,为了省流量,比如甲方发送了4个分段1,2,3,4,乙方都接收成功了,会返回最大序列号4,表示4之前的都接收成功了。再比如乙只接收到1,2,4,则会返回2.

  超时机制:如果一段时间发现分段没有确认,则认为 该分段接收超时。

  重发机制:当发现分段丢失时,进行重发。此时如果甲方发送1,2,3,4,乙方接收了1,2,4,则会重发3和4吗。事实是不会,因为乙会发送一个SACK的分段,该分段会说明4分段未丢失,所以重发就需要重发3就可以了。

    TCP流量控制:

   一般通过发送的发送窗口根据接收方的窗口调整,或者通过当时的网络情况调整。避免资源浪费。

    拥塞控制:慢启动、拥塞避免、快速重发、快速恢复。

  当发现拥塞时,如果是超时则进行慢启动,如果是收到重复的确认,则进行快速重发和快速恢复机制。

  其中重复确认是指收到4,5,6,7分段时,假设4分段丢失,当收到5分段时,接收方会向发送方发送需要4分段的包,收到6,7亦是,到连续3次之后,就可以快速重发了。