三次握手的作用:
同步序列号
交换TCP通信的参数:MSS,想扩大滑动窗口时候的比例因子,选择性确认,指定校验和算法
三次握手中的状态
起初大家都是close状态—>服务器处于listen状态—>客户端处于syn-sent状态—>服务端处于syn-received状态—>established状态
netstat -n |grep tcp
同时发送syn
三次握手中的性能优化与安全攻击问题
syn backlog——syn received
backlog—-accept队列
net.ipv4.tcp.syn(ack)retries修改重试次数
可以使用fast open,服务端在接收syn后返回cookie,第二次建立连接时客户端直接可以发起数据请求而不是等到第三次才可以
net.ipv4.tcp_fastopen
syn flood攻击是什么?
(攻击者客户端每次发个syn就下线了,服务端要等待63s才能断开连接(服务端返回syn+ack超时时间),这样会导致syn队列占满)
怎么防范?
1.(优先)可以调整tcp synbacklog的大小,synack_retries减少服务端重试次数(断开连接更早),或者abort_on_overflow处理不过来直接返回RST表示连接失败
2.syn cookie(TCP会通过源地址端口、目标地址端口和时间戳打造)
使用syn cookie后当syn队列满后给客户端返回cookie和syn,ack。当第三次握手把cookie传过来验证合法后才加入backlog队列(这样就不会直接丢弃连接)
但是他会占用空间导致一些可选功能失效比如时间戳,扩充滑动窗口
ISN的初始化必须是递增的,否则会导致旧连接的旧报文被误认为是新报文
MSS的作用:
避免IP层分层(MSS 536,MTU 576 - IP头部20字节 - TCP头部20字节),IP层的分层没有效率,当丢失报文的时候所有的报文都要重传
流量控制,考虑到接收端的能力