TCP协议应该全部开发人员都听过,至于有没有搞清楚就不知道了。今天分享一下本身理解的思路。服务器
TCP协议是传输层的协议,除了TCP协议以外,应用层仍是UDP协议。相对比,UDP协议不可靠,TCP丢包以后会从新传输,UDP不会,并且UDP是无序的。二者之间仍是有不少区别的,UDP也有本身的优势,好比传输速度快。如今大部分都是由TCP协议。网络
先明白TCP协议做用:性能
为了在不可靠的网络上提供可靠的端到端字的传输协议,网络的结构、带宽、延迟、数据包大小和其余参数等都有很大的不一样,TCP的做用是可以动态地适应网络的这些不一样,拥有面对各类故障时的健壮性。并且对应的数据包若是已丢失,TCP将会被进行重传。简单记忆就是保证数据通讯的完整性和可靠性,防止丢包。cdn
TCP三次握手:开发
三次握手主要的目的是为了确认两个应用层都具有收和发的能力。it
第一次握手,发送方发送SYN=一、SEQ=X,证实了发送方能发数据;io
第二次握手,接收方发送SYN=一、ACK=X+一、SEQ=Y,ACK确保了接收方能收数据,SYN确保了接收方能发数据;class
第三次握手,接收方发送ACK=Y+一、SEQ=Z,证实了发送方能接收。lazyload
因此这就是为何须要三次握手而不是两次四次五次,大于三次浪费,少于三次不能保证双方同时具有收和发。gc
固然,三次握手的SYN、ACK、SEQ都有深层次的解释和意义,好比数据包的组装、慢启动等,本身以为不须要去了解那么深。三次握手还有一个做用,就是节省服务器的开销,若是三次握手中间有一个是失败的,那么服务器就不会一直等待,浪费性能,而是直接关闭这个链接。
TCP四次挥手:
跟三次握手差很少,也是为了让发送方和接收方知道数据状态。
第一次挥手,发送方发送FIN告诉接收方发送完毕,要关闭传输;
第二次挥手,接收方发送ACK=FIN+1告诉发送方知道发完了;
第三次挥手,接受方发送FIN告诉发送方,接收完了,要关闭数据传输;
第四次挥手,发送方发送ACK告诉接收方知道了。
四次挥手其实不仅仅只有FIN和ACK,还有其余的数据包,好比STN和SEQ等。这边只是以FIN和ACK为主介绍一下。那为何须要四次呢?由于当发送方告诉接收方发完了的时候,接收方还有可能没接收完消息,因此只能先回复一部分,告诉发送方已经收到发完了的消息了。当消息彻底接收完毕以后,才会告诉发送方已经接收完了。
这只是三次握手和四次挥手,TCP协议是很是复杂的,什么对应的状态、报文、数据分类、传输技术、滑动窗口协议、超时重传SACK方法等。这边只是分享了最简单的三次握手和四次挥手,并且连这两个部分都只是简单的介绍。