一、TCP/IP的概念
TCP/IP不是一个协议,而是一个协议簇的统称,下图有部分协议以及所对应的层
二、TCP协议
TCP是一个属于传输层的面向连接的、可靠的、基于字节流的传输层通信协议。为了确保信息能够准确无误的到达,TCP采用了著名的三四握手和四次放手。
三、三次握手(ACK和ack是两种不同概念)
1、客户端将标志位SYN置为1,随机产生一个seq=x,将该数据包发送给服务器,客户端进入SYN-SENT状态了,等待回应
2、服务器收到数据位包后由标志位SYN=1知道客户机在请求建立连接,然后将SYN=1和ACK=1,ack=x+1,并将seq产生随机数seq=y,然后将数据包发给客户端确认连接请求,服务器进入SYN-RCVD状态
3、客户端收到确认后,检查ack是否为x+1,ACK是否为1,如果正确就将标志位ACK=1,seq=x+1,ack=y+1,数据包发送给服务器,服务器确认ack=y+1和ACK+1,客户端和服务器都进入ESTAB-LISHED状态完成三次握手,然后进行数据传送
四、四次挥手
数据传送完成后,进行四次挥手释放连接
1、客户端发送一个FIN,用来关闭到服务器的数据传送,将seq产生随机数u发送给服务器,客户端进入FIN-WAIT-1状态
2、服务器收到FIN后,发送一个ACk,seq为随机数,ack=u+1,三项发给客户端确认,服务器进入CLOSE-WAIT状态
3、服务器再发送FIN=1,ACK=1,seq为随机数w,ack=u+1用来关闭数据传送,服务器进入LAST-ACK状态
4、客户端收到FIN后,进入TIME-WAIT状态,接着发送ACK=1,seq=u+1,ack=w+1,服务器进入CLOSED状态,完成四次挥手
五、学习扩展
1、SYN攻击
在三次握手当中,此时服务器处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,Server需要不断重发直至超时,这些伪造的SYN包将长时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。
2、为什么握手三次挥手要四次?
因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。
领取专属 10元无门槛券
私享最新 技术干货