- 一、数据交互
- 1.Windows运行网络调试助手作为 TCP 服务器
- 2.Ubuntu启动一个TCP客户端程序
- 客户端---02client.c
- 执行结果
- 二、抓包分析
- wireshark
- 1.应用层---用户数据
- 2.传输层---TCP协议
- 转载:
- 3.网络层---IP协议
- 路由器是根据ip地址来收发数据的,路由器是一个工作在网络层的设备
- 4.链路层---以太网(MAC)
- 交换机是根据mac地址收发数据的,所以交换机是工作在链路层的设备
- 6. 非原创
NetAssist网络调试助手
2.Ubuntu启动一个TCP客户端程序 客户端—02client.c使用教程
02client.c
#include执行结果#include #include #include #include #include #include #include #include #include #include #include #include int main(int argc, char const *argv[]) { if (3!=argc) { printf("Use: %s n",argv[0]); exit(-1); } // 1.创建流式套接字 // socket返回的文件描述符 int sockfd = 0; // IPV4使用,//TCP if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket error"); exit(-1); } printf("sockfd=%dn",sockfd); // 2.填充服务器的网络信息结构体 struct sockaddr_in addr; //清空、填充0 memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; // IPV4 //端口号 //将无符号2字节整型 主机-->网络 addr.sin_port = htons(atoi(argv[2])); // ip地址 //将strptr所指的字符串转换成32位的网络字节序二进制值。 addr.sin_addr.s_addr = inet_addr(argv[1]); //结构体长度 socklen_t addr_len = sizeof(addr); //3.与服务器建立连接 connect //强制类型转换 if(-1 == connect(sockfd, (struct sockaddr *)&addr, addr_len)){ perror("connect error"); exit(-1); } while (1) { char bu[128] = {0}; //发 printf("input > "); scanf("%s", bu); send(sockfd, bu, 128,0); if (strcmp(bu,"quit")==0) { //关闭文件描述符 close(sockfd); break; } //收 memset(bu, 0, sizeof(bu)); printf("服务器 > "); fflush(stdout); recv(sockfd, bu, 128,0); printf("%sn", bu); if (strcmp(bu,"quit")==0) { //关闭文件描述符 close(sockfd); break; } } //关闭文件描述符 close(sockfd); return 0; }
- Windows安装
- Linux安装
linux 启动软件:
- sudo wireshark
- 使用教程
Wireshark图解TCP三次握手与四次挥手



