当前位置:实例文章 » 其他实例» [文章]TCP/IP 介绍

TCP/IP 介绍

发布人:shili8 发布时间:2025-03-13 14:14 阅读次数:0

**TCP/IP介绍**

TCP/IP(Transmission Control Protocol/Internet Protocol)是互联网通信协议栈的核心组成部分。它定义了数据在网络之间传输的规则和格式,使得不同设备、操作系统和网络之间能够进行通信。

**TCP/IP 协议栈结构**

TCP/IP 协议栈由四个层次组成:

1. **应用层(Application Layer)**
* 提供接口给用户应用程序,例如 HTTP、FTP 等。
2. **传输层(Transport Layer)**
* 提供端到端的数据传输服务,包括 TCP 和 UDP两种协议。
3. **网际层(Internet Layer)**
* 负责将数据包从源设备传递到目的设备,使用 IP 协议。
4. **链路层(Link Layer)**
* 负责在同一个网络中传输数据包,使用 Ethernet、Wi-Fi 等协议。

**TCP/IP 协议**

### TCP 协议TCP(Transmission Control Protocol)是一种面向连接的传输协议。它提供了可靠的数据传输服务,保证数据的完整性和顺序。

#### TCP 三次握手TCP 连接建立时,需要进行三次握手:

1. **客户端发送 SYN 包**
* 客户端发送一个 SYN 包(同步包),包含自己的序列号和初始序列号。
2. **服务器端回应 SYN-ACK 包**
*服务器端收到 SYN 包后,回应一个 SYN-ACK 包(同步确认包),包含自己的序列号和初始序列号。
3. **客户端发送 ACK 包**
* 客户端收到 SYN-ACK 包后,发送一个 ACK 包(确认包),确认连接建立。

#### TCP 四次挥手TCP 连接关闭时,需要进行四次挥手:

1. **客户端发送 FIN 包**
* 客户端发送一个 FIN 包(结束包),表示数据传输完成。
2. **服务器端回应 ACK 包**
*服务器端收到 FIN 包后,回应一个 ACK 包,确认接收到 FIN 包。
3. **服务器端发送 FIN 包**
*服务器端发送一个 FIN 包,表示数据传输完成。
4. **客户端回应 ACK 包**
* 客户端收到 FIN 包后,回应一个 ACK 包,确认连接关闭。

### UDP 协议UDP(User Datagram Protocol)是一种无连接的传输协议。它不提供可靠的数据传输服务,可能会丢失或重复数据包。

#### UDP 的优点和缺点优点:

* 无连接建立过程* 不需要确认收到数据包* 可以减少网络延迟缺点:

* 数据包可能会丢失或重复* 不提供可靠的数据传输服务### IP 协议IP(Internet Protocol)是网际层协议,负责将数据包从源设备传递到目的设备。

#### IP 地址IP 地址是每个设备在网络中唯一的地址。它由四个字节组成,使用点分法表示。

#### 子网掩码子网掩码是用于划分子网的掩码。它与 IP 地址一起使用,可以确定一个设备属于哪个子网。

### 其他 TCP/IP 协议* **ICMP(Internet Control Message Protocol)**
+ 用于网络故障诊断和管理* **IGMP(Internet Group Management Protocol)**
+ 用于多播组成员管理* **ARP(Address Resolution Protocol)**
+ 用于将 IP 地址转换为 MAC 地址**TCP/IP代码示例**

### TCP 三次握手

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

#define MAXLINE1024int main() {
 int sockfd, connfd;
 struct sockaddr_in servaddr, cliaddr;

 // 创建 socket sockfd = socket(AF_INET, SOCK_STREAM,0);
 if (sockfd < 0) {
 perror("socket");
 exit(1);
 }

 // 设置服务器端地址 memset(&servaddr,0, sizeof(servaddr));
 servaddr.sin_family = AF_INET;
 servaddr.sin_port = htons(1234);
 inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr);

 // 连接服务器端 if (connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) {
 perror("connect");
 exit(1);
 }

 // 发送 SYN 包 char synbuf[MAXLINE];
 sprintf(synbuf, "SYN %d", getpid());
 send(sockfd, synbuf, strlen(synbuf),0);

 // 等待服务器端回应 SYN-ACK 包 recv(sockfd, synbuf, MAXLINE,0);
 printf("Received SYN-ACK: %s
", synbuf);

 // 发送 ACK 包 char ackbuf[MAXLINE];
 sprintf(ackbuf, "ACK %d", getpid());
 send(sockfd, ackbuf, strlen(ackbuf),0);

 return0;
}


### TCP 四次挥手
c#include <stdio.h>
#include <stdlib.h>

#define MAXLINE1024int main() {
 int sockfd, connfd;
 struct sockaddr_in servaddr, cliaddr;

 // 创建 socket sockfd = socket(AF_INET, SOCK_STREAM,0);
 if (sockfd < 0) {
 perror("socket");
 exit(1);
 }

 // 设置服务器端地址 memset(&servaddr,0, sizeof(servaddr));
 servaddr.sin_family = AF_INET;
 servaddr.sin_port = htons(1234);
 inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr);

 // 连接服务器端 if (connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) {
 perror("connect");
 exit(1);
 }

 // 发送 FIN 包 char finbuf[MAXLINE];
 sprintf(finbuf, "FIN %d", getpid());
 send(sockfd, finbuf, strlen(finbuf),0);

 // 等待服务器端回应 ACK 包 recv(sockfd, finbuf, MAXLINE,0);
 printf("Received ACK: %s
", finbuf);

 return0;
}


**总结**

TCP/IP 协议栈是互联网通信协议栈的核心组成部分。它定义了数据在网络之间传输的规则和格式,使得不同设备、操作系统和网络之间能够进行通信。TCP 协议提供了可靠的数据传输服务,保证数据的完整性和顺序,而 UDP 协议不提供可靠的数据传输服务,可能会丢失或重复数据包。IP 协议负责将数据包从源设备传递到目的设备。TCP/IP 协议栈结构由四个层次组成:应用层、传输层、网际层和链路层。

其他信息

其他资源

Top