第一次握手:
Client将SYN置1,随机产生一个初始序列号seq发送给Server,进入SYN_SENT状态;
第二次握手:
Server收到Client的SYN=1之后,知道客户端请求建立连接,将自己的SYN置1,ACK置1,产生一个acknowledge number=sequence number+1,并随机产生一个自己的初始序列号,发送给客户端;进入SYN_RCVD状态;
第三次握手:
客户端检查acknowledge number是否为序列号+1,ACK是否为1,检查正确之后将自己的ACK置为1,产生一个acknowledge number=服务器发的序列号+1,发送给服务器;进入ESTABLISHED状态;服务器检查ACK为1和acknowledge number为序列号+1之后,也进入ESTABLISHED状态;完成三次握手,连接建立。
1 Tcp建立链接可以两次握手吗?
不可以,会出现一下情况:已经失效的连接请求报文段又传到了服务器端
2 可以采取四次握手码?
可以,但是会降低传输的效率
四次握手是指:第二次握手:Server只发送ACK和acknowledge number;而Server的SYN和初始序列号在第三次握手时发送;原来协议中的第三次握手变为第四次握手。出于优化目的,四次握手中的二、三可以合并。
3 三次握手中,如果客户端的ACK未送达服务器,会怎么样?
会重新发送之前的SYN+ACK,默认重发五次,之后自动关闭连接。
4 如果建立了连接,但是客户端出现故障怎么办呢?
服务器每收到一次客户端的请求后都会重新复位一个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。