1) 第一次握手:客户机的TCP首先向服务器的TCP发送一个连接请求报文段。这个特殊的报文段中不含
应用层数据,其首部中的SYN标志位被置为1。另外,客户机会随机选择一个起始序号seq = x(连接请
求报文不携带数据,但要消耗一个序号)。
2) 第二次握手:服务器的TCP 收到连接请求报文段后,如同意建立连接,就向客户机发回确认,并为该
TCP连接分配TCP缓存和变量。在确认报文段中,SYN 和ACK 位都被置为1, 确认号字段的值为x+1,并且
服务器随机产生起始序号seq= y( 确认报文不携带数据,但也要消耗一个序号)。确认报文段同样不包
含应用层数据。
3) 第三次握手:当客户机收到确认报文段后,还要向服务器给出确认,并且也要给该连接分配缓存和变
量。这个报文段的ACK 标志位被置1, 序号字段为x+1, 确认号字段ack=y+1。该报文段可以携带数据,若
不携带数据则不消耗序号
http中的tcp连接的第三次握手的报文段中就捎带了客户对万维网文档的请求 。
成功进行以上三步后,就建立了TCP 连接,接下来就可以传送应用层数据。TCP 提供的是全双工通信,
因此通信双方的应用进程在任何时候都能发送数据。
【总结】:
1) SYN = 1,ACK = 0,seq = x;
2) SYN = 1,ACK = 1,seq = y,ack = x+1;
3) SYN = 0,ACK = 1,seq = x+1,ack=y+1。
【拓展问题1】:什么是SYN洪泛攻击?(三次握手机制有什么问题?)
答:由于服务器端的资源是在完成第二次握手时分配的,而客户端的资源是在完成第三次握手时
分配的,攻击者发送TCP的SYN报文段,SYN是TCP三次握手中的第一个数据包,而当服务器返回
ACK后,该攻击者就不对其进行再确认,那这个TCP连接就处于挂起状态,也就是所谓的半连接状
态,服务器收不到再确认的话,还会重复发送ACK给攻击者。这样更加会浪费服务器的资源。攻
击者就对服务器发送非常大量的这种TCP连接,由于每一个都没法完成三次握手,所以在服务器
上,这些TCP连接会因为挂起状态而消耗CPU和内存,最后服务器可能死机,就无法为正常用户
提供服务了。
【拓展问题2】:如果已经建立了连接,但是客户端突然出现故障了怎么办?
TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资
源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两
小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一
次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
评论0
最新资源