TCP三次握手
TCP连接为什么需要三次握手
1. 由于网络情况复杂,可能会出现丢包现象,如果第二次握手的时候服务器就认为这个端口可用,然后一直开启,但是如果客户端未收到服务器发送的回复,那么就会重新发送请求,服务器就会重新开启一个端口连接,这样就会浪费一个端口。
三次握手每一次没收到报文会怎么样
第一次没收到,服务器不会有任何动作,客户端进入syn-send状态后,等待一段时间,发现没有回复,就会重复这个过程,直到发送次数大于最大重传次数
第二次没有收到,客户端继续重传,服务器会阻塞在accept()(syn-rcvd)状态,等待客户端发送ack报文
第三次没有收到,服务器重传,如果超过次数限制,那么accept()调用返回-1,同时向客户端发送RST报文,消除客户端的单方面连接
第二次握手传回的报文为什么syn = 1?
告诉客户端这响应的时客户端发送的报文
第三次握手可以携带数据吗
两次握手后客户端已经进入established状态,可以发送数据
note:第一次握手不允许发送数据,但是会消耗一个序号,服务器的返回也是