第五章 深入了解TCP
- TCP是一个
面向连接 的,可靠的 ,基于字节流的传输层协议 - 客户端发送SYN,服务端收到发送ACK回应并发送SYN包,客户端收到ACK,并发送回应服务器的ACK
- TCP参数
- ReceiveBufferSize、SendBufferSize操作系统读写缓冲区大小默认都为8kb = 8192byte
- NoDelay,是否启用Nagle算法,举例tcp/ip协议会将数据加工,如果发送很小的数据体a,总发送字节为21(20的ip头和20的tcp头)。这样会导致发送总数据包体变大。所以Nagle算法发现如果发送的数据字节很小,将会积攒到一定的大小再发送。
这会导致网络实时性下降 - TTL 就是ip数据包发送时,经过路由器最大跳数。每经过1个将会-1,直到TTL=0,路由器将会丢弃数据包,这样将会防止路由器循环,从而导致无限转发问题。如下图
- ReuseAdress:端口复用,因为TCP四次挥手会有等待时间,退出程序和端口释放不同步。这个的用途就是服务器挂了重启,然后服务器端口并未释放,导致无法重新绑定端口问题。
- LingerState 在说这个先说一下TCP四次挥手,客户端发送FIN指令,然后进入TIME_WAIT_1状态,服务端收到FIN指令进入CLOSE_WAIT状态将会发送ACK回应客户端,此时客户端为TIME_WAIT_2状态,待服务端将数据发送完成,发送FIN指令进入LAST_ACK状态,客户端收到将会进入TIME_WAIT阶段(一般为4分钟,4分钟后释放Socket),服务端收到客户端回应的ACK将会直接释放Socket。而
LingerState 可以设置一个超时时间,给服务端发送缓冲区的数据,超时过了,将会释放Socket。
- 心跳机制:当连接没有数据传输时,会发送一个信号( KeepAlive开启),对端接收到这个信号将会回应,如果没有回应,重传几次还没有回应将会关闭这个连接。TCP的KeepAlive默认为2个小时,很鸡肋,所以一般自己实现。
缺点:这也有叫PingPong,这个信号首先会占用资源,并且有可能会出现,这条连接有用但是被释放了。
通用客户端网络模块
|