计算机网络 三次握手 四次挥手(面试必问!!!)
发布人:shili8
发布时间:2024-12-24 08:25
阅读次数:0
**计算机网络:三次握手与四次挥手**
在计算机网络中,连接建立和断开是两个非常重要的过程。TCP(传输控制协议)是一种面向连接的协议,它需要在客户端和服务器之间建立一个可靠的连接,以便数据可以安全地传输。在这个过程中,三次握手和四次挥手是两个关键步骤。
**三次握手**
三次握手是TCP连接建立的过程。它确保了双方都同意使用某种特定的协议来传输数据。下面是三次握手的详细过程:
1. **第一次握手**:客户端发送一个 SYN(同步序列号)包到服务器,包含一个随机生成的序列号(seq_num)。这个包的目的地是服务器的IP地址和端口号。
c// 客户端代码示例struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8080); inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr); int sockfd = socket(AF_INET, SOCK_STREAM,0); send(sockfd, "SYN", strlen("SYN"),0, (struct sockaddr*)&server_addr);
2. **第二次握手**:服务器接收到客户端的 SYN 包后,会回复一个 SYN-ACK(同步确认)包给客户端。这个包中包含了一个随机生成的序列号(ack_num),以及一个确认码(seq_num)。
c//服务器代码示例struct sockaddr_in client_addr; client_addr.sin_family = AF_INET; client_addr.sin_port = htons(8080); inet_pton(AF_INET, "127.0.0.1", &client_addr.sin_addr); int sockfd = socket(AF_INET, SOCK_STREAM,0); recv(sockfd, "SYN", strlen("SYN"),0, (struct sockaddr*)&client_addr); send(sockfd, "SYN-ACK", strlen("SYN-ACK"),0, (struct sockaddr*)&client_addr);
3. **第三次握手**:客户端接收到服务器的 SYN-ACK 包后,会回复一个 ACK(确认)包给服务器。这个包中包含了一个确认码(ack_num),以及一个随机生成的序列号(seq_num)。
c// 客户端代码示例recv(sockfd, "SYN-ACK", strlen("SYN-ACK"),0, (struct sockaddr*)&server_addr); send(sockfd, "ACK", strlen("ACK"),0, (struct sockaddr*)&server_addr);
**四次挥手**
四次挥手是TCP连接断开的过程。它确保了双方都同意关闭连接,并释放资源。在这个过程中,客户端和服务器会交换四个包来完成断开。
1. **第一次挥手**:客户端发送一个 FIN(结束)包到服务器,表示自己要关闭连接。
c// 客户端代码示例send(sockfd, "FIN", strlen("FIN"),0, (struct sockaddr*)&server_addr);
2. **第二次挥手**:服务器接收到客户端的 FIN 包后,会回复一个 ACK(确认)包给客户端。
c//服务器代码示例recv(sockfd, "FIN", strlen("FIN"),0, (struct sockaddr*)&client_addr); send(sockfd, "ACK", strlen("ACK"),0, (struct sockaddr*)&client_addr);
3. **第三次挥手**:服务器发送一个 FIN(结束)包到客户端,表示自己要关闭连接。
c//服务器代码示例send(sockfd, "FIN", strlen("FIN"),0, (struct sockaddr*)&client_addr);
4. **第四次挥手**:客户端接收到服务器的 FIN 包后,会回复一个 ACK(确认)包给服务器。
c// 客户端代码示例recv(sockfd, "FIN", strlen("FIN"),0, (struct sockaddr*)&server_addr); send(sockfd, "ACK", strlen("ACK"),0, (struct sockaddr*)&server_addr);
以上就是三次握手和四次挥手的详细过程。通过这些步骤,客户端和服务器可以建立一个可靠的连接,并在需要时关闭连接。