第一部分  TCP/IP 三次握手原理

1TCP/IP三次握手示意图

102015674.jpg

SYN:同步序号。

ACK:应答回复。

RST:复位连接,清除旧有的同步序号。

PSH:尽可能的将数据送往接收进程。

FIN:发送方完成数据发送。

LISTEN:监听是否有连接请求包。

SYN_RECV:该状态处于向发送连接请求方回应我已经收到了你的连接请求阶段。

SYN_SEND:该状态处于已发出连接请求包,等待对方回应阶段。

ESTABLISHED:建立连接状态

2、三次握手步骤

1)第一次握手

客户端向服务器端发送连接请求包SYNsyn=j),等待服务器回应。

2)第二次握手

服务器端收到客户端连接请求包SYNsyn=j)后,将客户端的请求包SYNsyn=j放入到自己的未连接队列,此时服务器需要发送两个包给客户端。

向客户端发送确认自己已收到其连接请求的确认包ACKack=j+1),并向客户端表明已知道了其连接请求为j

向客户端发送连接询问请求包SYNsyn=k),询问客户端是否已经准备好建立连接,可进行数据通信;即在第二次握手时服务器向客户端发送ACKack=j+1)和SYNsyn=k)包,此时服务器进入SYN_RECV状态。

3)第三次握手

客户端收到服务器的ACKack=j+1)和SYNsyn=k)包后,知道了服务器同意建立连接,此时需要发送连接已建立的消息给服务器。

向服务器发送连接建立的确认包ACKack=k+1),回应服务器的SYNsyn=k告诉服务器,我们之间已经建立了连接,可以进行数据通信。

ACKack=k+1)包发送完毕,服务器收到后,此时服务器与客户端进入ESTABLISHED状态,开始进行数据传送。

第二部分 为什么不能只两次握手?

1、三次握手的目的:

消除旧有连接请求的SYN消息对新连接的干扰,同步连接双方的序列号和确认号并交换TCP窗口大小信息。

2、两次握手的危害。

根据三次握手的描述,当第二次握手时,服务器向客户端发送ACK包后,客户端立即建立连接,而不通知服务器我已经开始传输数据。当出现网络阻塞时,因TCP/IP协议具有定时重传机制功能(即请求方向对方发送SYN请求后在规定的时间内未得到回应,会再次发出请求),会出现数据出错现象。例子如下。

举例:

主机A向主机B发送连接请求。

1)主机A向主机B发送SYN连接请求包,若干时间后,B未收到,A再次发送一次,即共发了2次,分别对报文命名为x,y。(这2份请求因阻塞原因,他们的TCP窗口大小和数据报文长度不一致,即是有区别的)

2)假设主机B收到的是请求x, y未收到。那么B就会同A成功建立X连接。由于A发了2次连接请求报文,而这个时候却已经成功建立了连接,可以传输数据。B又不告诉A连接的是x,还是y,若A采取就近原则,建立连接y,那么B处理数据时将出现问题。

第三部分 TCP/IP四次挥手原理

1TCP/IP四次挥手示意图

102044353.jpg

FIN:关闭连接请求。

ACK:应答回复共收到多少数据。

2、为何需要四次挥手

TCP成功建立连接时,使用的是全双工模式(即数据在两个方向上能同时传递),因此每个方向必须单独进行关闭,且双方确认所收到的包大小与发出的包大小一致。

3、作用

保证服务器与客户端都能完全的接受对方发送的数据,保证数据的完整性。

4、四次挥手步骤讲解

假设客户机A向服务器B请求释放TCP/IP连接

1)第一次挥手

   客户机A向服务器B发送FIN包;A告诉B,发给你的数据大小是N,发送完毕,请断开AB的连接。

2)第二次挥手

   服务器B收到了客户机A发送的FIN包,需要向客户机A发送ACK包,告诉A实际收到的数据大小是 不是N,若是则关闭AB的连接。

3)第三次挥手

   服务器B向客户机A发送FIN包,B告诉A,我发给你的数据大小是M,我发送完毕,请求断开BA的连接。

4)第四次挥手

   客户机A收到了服务器B发送的FIN包,并发送ACK包告知其收到的数据大小是M,并关闭BA的连接。