当前位置:实例文章 » 其他实例» [文章](学习笔记-TCP基础知识)TCP与UDP区别

(学习笔记-TCP基础知识)TCP与UDP区别

发布人:shili8 发布时间:2025-01-13 16:29 阅读次数:0

**学习笔记 - TCP 基础知识**

在网络编程中,TCP (Transmission Control Protocol) 和 UDP (User Datagram Protocol) 是两种常见的传输协议。虽然它们都用于数据传输,但它们有着本质上的区别。

###1. TCP 与 UDP 的基本区别**TCP (Transmission Control Protocol)*** 面向连接:建立连接之前,需要三次握手(SYN、SYN-ACK、ACK)来确认双方的准备。
* 可靠传输:保证数据的完整性和顺序,使用序列号和确认机制。
* 流量控制:通过窗口大小控制发送速率,防止网络拥塞。
* 错误恢复:重发丢失的包,确保数据的准确传递。

**UDP (User Datagram Protocol)*** 面向无连接:不需要建立连接,直接发送数据包。
* 不可靠传输:可能会丢失或乱序到达目的地。
* 无流量控制:发送速率没有限制。
* 无错误恢复:不重发丢失的包。

###2. TCP 与 UDP 的应用场景**TCP**

* HTTP、FTP 等文件传输协议,需要保证数据的完整性和顺序。
* Email、IM 等实时通信服务,需要确保消息的准确传递。
* 文件传输、数据库连接等需要可靠传输的场景。

**UDP**

* DNS 查询、SNMP 等监控服务,不需要确认收到数据包。
* VoIP、视频流等实时多媒体服务,需要快速传输数据。
* 游戏服务器、直播平台等需要低延迟和高吞吐量的场景。

###3. TCP 与 UDP 的实现**TCP**

c#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_BUFFER_SIZE1024int main() {
 int sockfd = socket(AF_INET, SOCK_STREAM,0);
 if (sockfd == -1) {
 perror("socket");
 exit(1);
 }

 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);

 if (connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) {
 perror("connect");
 exit(1);
 }

 char buffer[MAX_BUFFER_SIZE];
 while (fgets(buffer, MAX_BUFFER_SIZE, stdin) != NULL) {
 send(sockfd, buffer, strlen(buffer),0);
 recv(sockfd, buffer, MAX_BUFFER_SIZE,0);
 printf("%s", buffer);
 }

 close(sockfd);
 return0;
}


**UDP**

c#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_BUFFER_SIZE1024int main() {
 int sockfd = socket(AF_INET, SOCK_DGRAM,0);
 if (sockfd == -1) {
 perror("socket");
 exit(1);
 }

 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);

 char buffer[MAX_BUFFER_SIZE];
 while (fgets(buffer, MAX_BUFFER_SIZE, stdin) != NULL) {
 sendto(sockfd, buffer, strlen(buffer),0, (struct sockaddr*)&server_addr, sizeof(server_addr));
 recvfrom(sockfd, buffer, MAX_BUFFER_SIZE,0, NULL, NULL);
 printf("%s", buffer);
 }

 close(sockfd);
 return0;
}


### 总结TCP 和 UDP 是两种不同的传输协议,各有其特点和应用场景。TCP 面向连接,保证数据的完整性和顺序,而 UDP 面向无连接,不可靠传输。选择合适的传输协议对于网络编程至关重要。

其他信息

其他资源

Top