TCP/IP协议详解:四层体系与历史背景

需积分: 11 0 下载量 81 浏览量 更新于2024-07-21 收藏 4.14MB PDF 举报
TCP/IP协议详解(卷 1)是一部深入探讨网络通信核心技术的著作,它讲述了TCP/IP协议族如何让不同制造商和操作系统下的计算机能够相互通信,这得益于其开放性和广泛的应用。TCP/IP起源于20世纪60年代末的美国政府项目,经过几十年的发展,已经成为全球互联网的基础。 该书第一章首先介绍了TCP/IP协议的起源和重要性,强调了其在全球互联网中的核心地位。作者通过历史的角度,鼓励读者参考文献[Lynch1993]以了解更多关于TCP/IP早期发展的细节。 网络协议设计通常采用分层结构,TCP/IP也不例外。它被划分为四个主要层次,分别是: 1. 链路层,也称为数据链路层或网络接口层,负责处理硬件连接的物理层面,包括操作系统中的设备驱动程序和网络接口卡,确保数据能在物理介质上传输。 2. 网络层,即互联网层,主要任务是路径选择和分组传输。在这个层次,TCP/IP包括IP协议、ICMP协议(用于错误检测和报告)和IGMP协议(多播协议),它们共同确保数据包的路由和管理。 3. 运输层,是协议栈中的关键环节,它为应用程序提供端到端的通信服务。在TCP/IP中,TCP和UDP是两个主要的运输层协议。TCP提供面向连接、可靠的数据传输服务,如流量控制、错误校验和重传机制,使得应用层无需关注底层细节。相比之下,UDP是一种无连接、不可靠的服务,适合对实时性要求较高的应用,如在线视频和语音通信,因为它不保证数据的有序到达,但速度较快。 理解TCP/IP的这些基本概念和层次结构对于学习网络编程、网络管理员和开发者来说至关重要,因为它们构成了现代互联网通信的基石。后续章节将更深入地探讨各个协议的工作原理、配置和优化策略,帮助读者构建和维护高效、安全的网络环境。

#include <jansson.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_ECU 10 typedef struct { char ddd[16]; } ECU; typedef struct { char zhushini[16]; char qusi[16]; } Nishizhu; typedef struct { char sourceaddress[5]; char target_ip[16]; char local_ip[16]; char target_port[6]; ECU ecu[MAX_ECU]; Nishizhu nishizhu; } TCPSetting; typedef struct { TCPSetting tcp_setting; } Config; int main() { // 初始化结构体 Config config; memset(&config, 0, sizeof(Config)); strcpy(config.tcp_setting.sourceaddress, "abcd"); strcpy(config.tcp_setting.target_ip, "192.168.1.100"); strcpy(config.tcp_setting.local_ip, "192.168.1.200"); strcpy(config.tcp_setting.target_port, "12345"); strcpy(config.tcp_setting.ecu[0].ddd, "ecu1"); strcpy(config.tcp_setting.ecu[1].ddd, "ecu2"); strcpy(config.tcp_setting.nishizhu.zhushini, "zhushini"); strcpy(config.tcp_setting.nishizhu.qusi, "qusi"); // 将结构体转成json json_t *root = json_object(); json_t *tcp_setting = json_object(); json_object_set_new(root, "tcp_setting", tcp_setting); json_object_set_new(tcp_setting, "sourceaddress", json_string(config.tcp_setting.sourceaddress)); json_object_set_new(tcp_setting, "target_ip", json_string(config.tcp_setting.target_ip)); json_object_set_new(tcp_setting, "local_ip", json_string(config.tcp_setting.local_ip)); json_object_set_new(tcp_setting, "target_port", json_string(config.tcp_setting.target_port)); json_t *ecu = json_array(); for (int i = 0; i < MAX_ECU; ++i) { json_t *ecu_obj = json_object(); json_object_set_new(ecu_obj, "ddd", json_string(config.tcp_setting.ecu[i].ddd)); json_array_append_new(ecu, ecu_obj); } json_object_set_new(tcp_setting, "ecu", ecu); json_t *nishizhu = json_object(); json_object_set_new(nishizhu, "zhushini", json_string(config.tcp_setting.nishizhu.zhushini)); json_object_set_new(nishizhu, "qusi", json_string(config.tcp_setting.nishizhu.qusi)); json_object_set_new(tcp_setting, "nishizhu", nishizhu); // 保存成json文件 FILE *fp = fopen("config.json", "w"); if (fp == NULL) { printf("Failed to open file\n"); exit(1); } json_dumpf(root, fp, JSON_INDENT(4)); fclose(fp); // 释放内存 json_decref(root); return 0; } 运行上面的代码 保持的json文件中不包含ecu参数的内容

2023-06-11 上传