TCP/IP 介绍
**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 协议栈结构由四个层次组成:应用层、传输层、网际层和链路层。