TCP长短连接
1、什么是TCP长连接
从应用层来看,就是client到server建立一次连接,发送多个数据包,直到不再与server通信时关闭连接。connect----send----recv----send----recv----... ...----close。
从传输层来看,使用的是keep alive timer实现(TCP对每个连接建立7个定时器:connection establishment、retransmission、delayed ACK、persist、keep alive、FIN_WAIT_2、time_wait),keep alive定时器会在应用层没有数据发送时每隔2小时发送一个tcp包,序列号是当前segment sequence-1,包内容为空,然后接收ACK。
目的:
1、防止对方掉电或者crash后能释放连接;
2、通过NAT代理或者防火墙的时候,由于NAT和防火墙会因为内存大小的原因而丢弃不活跃的连接,这就导致连接丢失,而keep alive定时器到期后发送的tcp包使连接在NAT或者防火墙上排到连接队列的前面,避免被NAT或者防火墙释放连接。
2、什么是TCP短连接
从应用层看,就是client发哦server建立一次连接,通信一次,断开连接。
connect----send----recv----close connect----send----recv----close
如果需要实现不释放连接而发送多次数据,需要在应用层实现心跳发送。
3、优缺点:
长连接:一旦建立连接,以后发送数据就避免了三次握手连接和四次握手关闭的开销,但是需要额外发送keep alive定时器到期发送的tcp包;
短连接:每次发送数据都需要先三次握手建立连接,发送数据后需要四次握手关闭连接,每次发送数据都需要额外开销,无维护连接的额外开销。