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