TCP在传输之前会进行三次沟通,一般称为“三次握手”,传完数据断开的时候要进行四次沟通,一般称为“四次挥手”。
这个过程需要理解TCP的两个序号和三个标志位的含义:
- Seq:sequencenumber的缩写,表示传数据的序号。TCP传输时每一个字节都有一个序号,发送数据时会将数据的第一个序号发送给对方,接收方会按序号检查是否接受完整了,如果没接收完整就需要重新传送,这样就可以保证数据的完整性。
- Ack:acknoledgementnumber的缩写,表示确认号。接收端用它来给发送端反馈已经成功接收的数据信息的,他的值为希望接收下一个数据包起始序号,也就是ack值所代表的序号前面数据已经成功接收到了。
- SYN:同步位,用在建立连接时同步序号。刚开始建立连接时并没有历史接收的数据,所以ack也就没办法设置,这时按照正常的机制就无法运行了,SYN的所用就是来解决这个问题的,当接收端接收到SYN=1的报文是就会直接将ack设置为接收到的seq+1的值,注意这里的值并不是校验后设置的,而是根据SYN直接设置的,这样正常的机制就可以
运行了,这样因为通信的双发的ack都需要设置一个初始值。 - FIN:终止位,用来在数据传输完毕后释放连接。
TCP的传输时双全工模式。三次握手和四次挥手保证了连接的可靠性,不过凡事有利就有弊这种模式也有他的缺点,首先是在传输效率上回比较低,另外三次握手的过程中客户端需要发送两次数据才可以连接。
TCP与UDP的区别:主要是TCP是有连接的,UDP是没有连接的,也就是说TCP协议是在沟通好后才会传数据,而UDP协议是拿到地址后直接传输,这样产生的结果就是TCP协议传输的数据更可靠,而UDP传输的速度更快。通常视频传输、语音传输等对等完整性要求不高而对传输速度要求高并且数据量大的通信使用UDP比较多,而邮件、网页等一般使用TCP协议。