07-TCP3次握手,4次挥手过程
爬虫是一种自动化获取网页数据的技术。要学会爬虫,首先需要了解网络通信协议,其中TCP/IP是最常用的一种协议。本文将详细介绍TCP协议中的3次握手和4次挥手过程。
1. 3次握手
TCP协议使用3次握手来建立可靠的连接,确保数据的可靠传输。
第一步:客户端向服务器发送一个SYN包,告诉服务器要建立连接。
SYN = client.random_sequence_number
Seq = random.randint(1, MAX_VALUE)
send_packet(SYN=1, Seq=Seq)
第二步:服务器收到客户端的SYN包后,向客户端发送一个SYN+ACK包,告诉客户端可以建立连接。
SYN = server.random_sequence_number
Seq = client.last_sequence_number + 1
send_packet(SYN=1, ACK=1, Seq=Seq, Ack=client.last_sequence_number + 1)
第三步:客户端收到服务器的SYN+ACK包后,向服务器发送一个ACK包,告诉服务器连接已建立。
Seq = client.last_sequence_number + 1
send_packet(ACK=1, Seq=Seq, Ack=server.last_sequence_number + 1)
这样就完成了3次握手的过程,建立了双向的可靠连接。
2. 4次挥手
TCP协议使用4次挥手来关闭连接。
第一步:客户端向服务器发送一个FIN包,告诉服务器要关闭连接。
FIN = client.random_sequence_number
Seq = client.last_sequence_number + 1
send_packet(FIN=1, Seq=Seq, Ack=server.last_sequence_number + 1)
第二步:服务器收到客户端的FIN包后,向客户端发送一个ACK包,告诉客户端已收到关闭请求。
Seq = server.last_sequence_number + 1
send_packet(ACK=1, Seq=Seq, Ack=client.last_sequence_number + 1)
第三步:服务器向客户端发送一个FIN包,告诉客户端服务器也要关闭连接。
FIN = server.random_sequence_number
Seq = server.last_sequence_number + 1
send_packet(FIN=1, Seq=Seq, Ack=client.last_sequence_number + 1)
第四步:客户端收到服务器的FIN包后,向服务器发送一个ACK包,告诉服务器已收到关闭请求。
Seq = client.last_sequence_number + 1
send_packet(ACK=1, Seq=Seq, Ack=server.last_sequence_number + 1)
这样就完成了4次挥手的过程,彻底关闭了连接。
通过学习TCP协议的3次握手和4次挥手过程,我们可以更好地理解网络通信的原理,为后续学习爬虫技术打下坚实的基础。