http协议学习笔记(2)
程序员文章站
2022-06-22 18:03:00
http是应用层协议,TCP是传输层协议,http连接时基于TCP连接的
过程:根据URL通过DNS找出要访问的服务器的IP地址,然后创建套接字,客户端与服务器间进行TCP连接(三次握手),...
http是应用层协议,TCP是传输层协议,http连接时基于TCP连接的
过程:根据URL通过DNS找出要访问的服务器的IP地址,然后创建套接字,客户端与服务器间进行TCP连接(三次握手),客户端发送请求报文,带有SYN标签,服务器收到后返回一个ACK应答包,并发送一个带有SYN标签的包,客户端收到后,返回ACK包确认连接成功(现代TCP栈在第三次握手的时候就已经开始发送数据),建立连接后发送数据。
TCP延迟算法:如果规定时间内没有收到ACK包就会进行重连。ACK应答包实际上非常小,所以允许在第三次握手时携带数据,通常延迟100到200毫秒,等待数据,如果没有数据要携带,那么就会单独发送ACK应答包
产生的问题:
1、发送数据是很快的,大部分时间都浪费在建立连接的过程中。TCP的首部和标记占40个字节,如果只发送少量的数据会浪费,所以设计了Nagle算法,只有数据到达最大容量时才会进行发送。但TCP连接建立后,并不会直接发送http数据,而是发送http请求报文,但请求报文很小,不能占满容量,所以一定会等待100到200毫秒,造成了很大的时间延迟
2、TCP慢启动,建立连接后TCP会限制最大速度,一段时间后才能提速,用于防止过载和拥塞,也造成了一定的延迟
解决方法:1、设置参数TCP_NODELAY,禁用nagle算法
2、持久连接