tcp 连接
三次握手:能确定双方都做好了传输数据的准备,并且彼此知道对方已经准备好,
通知对方自己的初始序号isn,设置其他初始化的参数和状态变量。
前两次握手不能携带数据,第三次握手可以携带数据。
syn flood攻击:攻击者发送syn,服务器创建半开连接并发送synack,攻击者不发送ack
解决方法:很多种方法
syn cookies技术:当半连接队列满后,服务器不再生成半开连接,
根据发送端和接收端的ip和端口号以及一个秘密数,
用某个散列函数,生成cookie发给发送端,合法的发送端会返回一个ack,
服务器根据两端的ip和端口号以及秘密数,生成新的cookie,如果新cookie+1等于ack,
服务器就生成一个全开的连接
nmap端口扫描工具:发送syn,如果返回synack,则有进程在监听该端口。
返回rst,没有进程监听,但报文可以到达目的主机。
什么都不返回,可能被防火墙拦截。
四次挥手:对称释放方式,发送fin后不会再发送段,但可以继续接收段。
第一个ack可以和第二个fin合并成一个段
经过两倍最大数据包生存期后,没有收到对fin的ack,fin的发送方直接释放连接,
这里用到专门的计时器,
传输层无法保证释放连接时不丢失数据,这需要应用层的介入。
syn占用一个序号,ack不占用序号
连接管理
粗线是一般情形,细线是不常发生的情形
实线是客户端,虚线是服务器
主动关闭的一端会经历Time_Wait状态,其作用为:
1,B发fin,A对fin的ack可能丢失,B会重传fin,
A处于Time_Wait状态,就可以收到重传的fin,并再次发送ack
2,Time_Wait持续2MSL,连接关闭后再重新建立连接,老的连接的报文都消失了。
下图每条线上都标记了 事件/动作