(一)三次握手
建立一条新的TCP连接时,是指是在发送任意数据之前,TCP连接之间交换一些的IP分组,对连接的有关参数进行沟通(如下图),如果连接只用来传送少量数据,这些交换就会严重降低HTTP的性能。
TCP连接握手需要经过以下几个步骤。
(1) 请求新的TCP连接时,客户端要向服务端发送一个晓得TCP分组(通常是40-60个字节)。这个分组中设置了一个特殊的SYN标记,说明这是一个连接请求
(2)如果服务器接受了连接,就会对一些连接参数进行计算,并向客户端回送一个TCP分组,这个分组中的SYN和ACK标记都被置位,说明连接已被接受。
(3)最后,客户端想服务器会送一条确认信息,通知它连接已成功建立。现代的TCP栈都允许客户端在这个确认分组中发送数据。
位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)
Sequence number(顺序号码) Acknowledge number(确认号码)
(二)确保消息可靠性
由于因特网自身无法确保可靠的分组传输(因特网路由器超负荷的话,可以随意丢地分组),所以TCP实现了自己的确认机制来确保数据的成功传输。
每一个TCP段都有一个序列号和数据完整性校验和。每个段的接收者收到完好的段时,都会向发送者回送小的确认分组,如果发送者没有在指定的窗口时间内收到确认信息,发送者就认为分组已被破坏或者损毁,并重新发送数据。
参考:https://github.com/jawil/blog/issues/14
《HTTP权威指南》