TCP
介绍
连接的生命周期
报文格式
- 序列号 包的序列号,用于控制包的按序传送
- Ack server的回应,表示收到,用于可靠性传输
- tcp flags tcp 状态机
- window 流量控制
通过三次握手建立连接,连接有半连接队列和全连接队列。如果发生dos攻击,会出现大量的SYN_RCVD
状态,可通过服务端主动发送一个特殊的ack来进行探测对方是否是恶意客户端。连接队列如果满了的话,会出现connection reset by peer
异常。当server收到client的ack时,会将连接放到全连接队列中等待accept,这个时候如果server没有accept connection并且client在持续发送数据,就会造成客户端重传数据卡住。
client发送数据后,server可能会延迟回复ack 一般是配置为40ms
关键词
- rtt 网络往返时间(round trip time)
- mss 最大分段大小 (maxium segment size)。tcp最大报文大小,不包含tcp header和option
- mtu 网络最大传输单元(maximum transmit unit)。多用于以太网口,如果要传输的数据包的大小超过mtu,有可能会丢弃包。
三次握手
握手过程
syn-> syn ack -> ack
半连接队列 baklog
全连接队列
在连接队列满了的时候会出现 connection reset by peer
常见问题
队列溢出
Connection reset by peer
队列溢出后的重传
四次挥手
挥手过程,中间状态
finish_wait_1
close_wait
finish_wait_2
last_ack
TIME_WAIT
TIME_WAIT大量出现的话会造成不能创建连接
常见问题
出现大量TIME_WAIT
为何四次挥手
fin -> fin ack -> fin -> ack
传输过程
- mss
- mtu maximum transmission unit
- delay ack
- nagle
启动
慢启动,逐渐增大流量
可靠
ack确认,重传
ack 实际确认直接,deplay ack。
流量控制
窗口,拥塞
常见问题
- 粘包
- 丢包 加速
- 队头阻塞(head-of-line blocking)
- dos攻击
调试工具
参考