TCP 握手连接
1.请求新的TCP连接时,客户端要向服务器发送一个小的TCP分组(通常是40~60个字节)。这个分组中设置了一个特殊的SYN标记,说明这是一个连接请求。
2.如果服务器接受了连接,就会对一些连接参数进行计算,并向客户端回送一个TCP分组,这个分组中的SYN和ACK标记都被置位,说明连接请求已被接受。
3.最后,客户端向服务器回送一条确认信息,通知它连接已成功建立,现代的TCP栈都允许客户端在这个确认分组中发送数据。
TCP 性能
HTTP 事务的时延
HTTP的事务时延主要有下面几个原因:
1.客户端首先需要根据URI确定Web服务器的IP地址和端口号。如果,最近没有对URI中的主机名进行访问,通过DNS解析系统将URI中的主机名转换成一个IP地址可能要花费数十秒的时间。
2.接下来,客户端会向服务器发送一条TCP连接请求,并等待服务器回送一个请求接受应答。每条新的TCP连接都会有连接建立时延。这个值通常最多只有一两秒钟,但如果有数百个HTTP事务的话,这个值会快速叠加上去。
3.一旦连接建立起来,客户端就会通过新建立的TCP管道来发送HTTP请求。数据到达时,Web服务器会从TCP连接中读取请求报文,并对请求进行处理。因特网传输请求报文,以及服务器处理请求报文都需要时间。
4.然后,Web服务器会回送HTTP响应,网络和服务器负载,请求和响应报文的尺寸,以及客户端和服务器之间的距离。TCP协议的技术复杂性也会对时延产生巨大的影响。
TCP 慢启动
TCP 数据传输的性能还取决于TCP连接的使用期(age)。TCP连接会随着时间进行自我"调谐",起初会限制连接的最大速度,如果数据传输成功,会随着时间的推移提高传输速度。这种调谐被称为TCP慢启动,用于防治因特网突然的过载和拥塞。
TCP慢启动限制了一个TCP端点在任意时刻传输的分组数。简单来说,每成功接收一个分组,发送端就有了发送另外两个分组的权限。如果,某个HTTP事务有大量数据要发送,是不能一次将所有分组都发送出去的。必须发送一个分组,等待确认;然后可以发送两个分组,每个分组都必须被确认,这样就可以发送四个分组了,这样就可以发送四个分组了,以此类推。这种方式被称为"打开拥塞窗口"。
由于存在这种拥塞控制特性,所以新连接的传输速度会比已经交换过一定量数据的"已调谐"连接慢一些。