目的:验证双方接收发送能力是否正常
之所以要三次简单来说就是进行了一个“收到请回复”的过程
客户端:我要连接
服务器:你说“你要连接”确定吗
客户端:我“确定”要连接
SYN:表示连接请求,同步位
ACK:确认位,1有效,2无效
ack:确认号,发送对方发送的序列号+1
SEQ:序列号
首先服务器是启动状态,由客户端主动发启的一个连接过程
为什么要三次握手,两次握手可以吗?
1.为了验证双方接收发送能力是否正常,而两次握手并不能让双方都确定彼此的收发能力正常,服务器端需要确认客户端是否接收到了服务端的序列号
2.阻止重复历史连接的初始化:由于网络问题旧链接比新连接更早的到达服务器,在第二次握手由服务器返回ack报文,如果客户端发现此次发送的syn是旧报文,就会通过第三次握手发送rst报文来结束,直到正常的syn到达服务器(判断连接申请是否来自历史连接)
3.为了安全两次握手链接会放大DDOS攻击
握手可以携带数据吗?
第三次握手是可以携带数据的:第一次不可以是为了防止携带大量数据的多次访问,造成服务器需要消耗内存空间来缓存这些报文的问题
什么是半连接队列?
经过一次握手,此时服务器处于syn_rcvd状态,还未建立连接,服务器会将这时来的请求放在一个队列中这个队列就叫半连接队列,队列满了有可能出现丢包的现象
双方经过三次握手后服务器会把请求放到全连接队列