为什么要4次挥手?
确保数据可以残缺传输。
当被动方收到自动方的FIN报文通知时,它仅仅表示自动方没有数据再发送给被动方了。
但未必被动方一切的数据都残缺的发送给了自动方,所以被动方不会马上封锁SOCKET,它能够还需求发送一些数据给自动方后,
再发送FIN报文给自动方,通知自动方赞同封锁衔接,所以这里的ACK报文和FIN报文少数状况下都是分开发送的。
一、TCP报文格式
TCP报文格式图:
上图中有几个字段需求重点引见下:
(1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此停止标记。
(2)确认序号:Ack序号,占32位,只要ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
(3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,详细含义如下:
(A)URG:紧急指针(urgent pointer)有效。
(B)ACK:确认序号有效。
(C)PSH:接纳方应该尽快将这个报文交给运用层。
(D)RST:重置衔接。
(E)SYN:发起一个新衔接。
(F)FIN:释放一个衔接。
需求留意的是:
(A)不要将确认序号Ack与标志位中的ACK搞混了。
(B)确认方Ack=发起方Req+1,两端配对。
二、三次握手
TCP(Transmission Control Protocol) 传输控制协议
TCP是主机对主机层的传输控制协议,提供牢靠的衔接效劳,采用三次握手确认树立一个衔接
位码即tcp标志位,有6种标示:
SYN(synchronous树立联机)
ACK(acknowledgement 确认)
PSH(push传送)
FIN(finish完毕)
RST(reset重置)
URG(urgent紧急)
Sequence number(顺序号码)
Acknowledge number(确认号码)
establish 树立,创立
所谓三次握手(Three-Way Handshake)即树立TCP衔接,是指树立一个TCP衔接时,需求客户端和效劳端总共发送3个包以确认衔接的树立。在socket编程中,这一进程由客户端执行connect来触发,整个流程如下图所示:
(1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT形状,等候Server确认。
(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client央求树立衔接,Server将标志位SYN和ACK都置为1,ack (number )=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认衔接央求,Server进入SYN_RCVD形状。
(3)第三次握手:Client收到确认后,反省ack能否为J+1,ACK能否为1,假设正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server反省ack能否为K+1,ACK能否为1,假设正确则衔接树立成功,Client和Server进入ESTABLISHED形状,完成三次握手,随后Client与Server之间可以末尾传输数据了。
SYN攻击:
在三次握手进程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP衔接称为半衔接(half-open connect),此时Server处于SYN_RCVD形状,当收到ACK后,Server转入ESTABLISHED形状。
SYN攻击就是Client在短时间内伪造少量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等候Client确实认,由于源地址是不存在的,因此,Server需求不断重发直至超时,这些伪造的SYN包将长时间占用未衔接队列,招致正常的SYN央求由于队列满而被丢弃,从而惹起网络梗塞甚至系统瘫痪。
SYN攻击时一种典型的DDOS攻击,检测SYN攻击的方式十分复杂,即当Server上有少量半衔接形状且源IP地址是随机的,则可以判定遭到SYN攻击了,运用如下命令可以让之现行:
#netstat -nap | grep SYN_RECV
三、四次挥手
(责任编辑:admin)