TCP
TCP和UDP的区别
TCP面向连接,UDP面向非连接
TCP保证数据顺序,UDP不保证
TCP保证数据正确性,UDP不保证
TCP对系统资源要求多,UDP要求少
TCP传输速度慢,UDP速度快
可靠传输服务
保证接收方进程从缓存区读出的字节流与发送方发出的字节流完全一样。
序号
TCP首部的序号字段用来保证数据有序地进入缓存区,序号值是报文段发送的数据的第一个字节的序号。
累计确认
TCP首部的确认号是期望收到对方的下一个报文段序号,只确认至第一个丢失字节为止的字节。
重传
导致重传的两种事件:超时和冗余ACK。
1.超时
每发送一个报文段,就设置一个计时器。如果计时器时间到了但没有收到确认,则重传该报文段。问题是超时周期太长。
2.冗余ACK
冗余ACK指再次收到某个报文段的ACK。每当比期望序号大的失序报文段到达时,接收方发送一个冗余ACK,指明下一个期待字节的序号。当发送方收到对同一个报文段的3个冗余ACK时,就认为这个被确认报文段之后的报文段已经丢失,然后对这个丢失的报文段进行重传。
三次握手和四次挥手

为什么客户端最后还要发送一次确认呢?
1. 防止滞留一段时间的连接请求又传到服务端后多次建立连接。
2. MSS(TCP段最大长度)协商客户端需要告知服务端已收到。

为什么建立连接是三次握手,关闭连接是四次挥手?
1. 客户端告诉服务端关闭连接时,服务端确认后经过CLOSE_WAIT被动关闭该连接。
2. 客户端收到服务端被动关闭连接通知后确认,进入TIME_WAIT等待2MSL(2倍TCP段最大存活时间,保证关闭的TCP端口不立即被使用)。
go zookeeper心跳抓包分析
抓取zk客户端和服务端心跳包
zk客户端同1s内发送1个包含12个字节的心跳请求包和1个没有数据的确认包。
zk服务端同1s内发送1个包含20个字节的心跳响应确认包。

参考资料
浙公网安备 33010602011771号