(学习笔记-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 面向无连接,不可靠传输。选择合适的传输协议对于网络编程至关重要。