计算机网络
文章平均质量分 89
dc爱傲雪和技术
极限运动员
展开
-
多进程并发服务器
3.子进程:完成通信,接受一个客户端连接,就创建一个子进程用于通信。要实现TCP通信服务器处理并发的任务,使用多线程或者多进程来解决。2.父进程负责等待并接受客户端的连接。原创 2024-06-12 08:32:31 · 507 阅读 · 0 评论 -
TCP三次握手四次挥手,滑动窗口
通过三次握手,TCP协议能够在不可靠的网络环境中提供一种可靠的、有序的数据传输方式。这种机制使TCP成为互联网上应用最广泛的协议之一,广泛用于Web浏览、电子邮件、文件传输等。TCP(传输控制协议)的头部包含多个关键字段,每个字段都对于维持TCP的可靠性、效率和数据完整性至关重要。16位端口号 (Port Number)源端口号和目的端口号分别用于标识发送和接收的应用程序。端口号是与IP地址一起用来标识网络上的特定进程。原创 2024-06-03 20:35:25 · 763 阅读 · 0 评论 -
TCP通信实现(服务端与客户端)
【代码】TCP通信实现(服务端与客户端)原创 2024-05-26 08:38:05 · 400 阅读 · 0 评论 -
TCP通信流程
你的描述准确地概述了 TCP 客户端的基本通信流程。这里我会扩展你的说明,提供一个详细的解释,并给出如何在 C 语言中实现一个简单的 TCP 客户端的示例代码。通过这些特性的对比,可以根据具体的网络应用需求选择适合的传输协议。原创 2024-05-23 10:58:12 · 728 阅读 · 0 评论 -
socket地址理解
套接字的基本概念套接字(socket)是计算机网络中用于通信的端点,它抽象了不同主机上应用进程之间双向通信的机制。套接字连接应用进程与网络协议栈,使得应用程序能够利用网络协议进行通信。它作为应用程序与网络协议栈的接口,通过操作系统提供的 API 进行数据交换。套接字的工作机制在网络通信中,套接字充当两个应用程序之间的通信连接点。一个应用程序可以将数据写入其所在主机的套接字,数据通过网络接口卡(NIC)和传输介质发送到目标主机的套接字,从而实现数据传输。原创 2024-05-22 10:47:50 · 978 阅读 · 0 评论 -
网络通信过程
上层协议是如何使用下层协议提供的服务的呢?其实这是通过封装(encapsulation)实现的。应用程序数据在发送到物理网络上之前,将沿着协议栈从上往下依次传递。每层协议都将在上层数据的基础上加上自己的头部信息(有时还包括尾部信息),以实现该层的功能,这个过程就称为封装。当帧到达目的主机时,将沿着协议栈自底向上依次传递。各层协议依次处理帧中本层负责的头部数据,以获取所需的信息,并最终将处理后的帧交给目标应用程序。分用是依靠头部信息中的类型字段实现的。arp协议会将ip地址对应的物理地址缓存在本机。原创 2024-05-20 06:45:51 · 132 阅读 · 0 评论 -
网络结构模式
IP地址(Internet Protocol Address),即互联网协议地址,是一个分配给网络中设备的数字标签。这种地址系统是IP协议的核心部分,允许不同网络设备通过因特网进行通信。IP地址不仅标识主机或其他网络设备,还帮助定位这些设备的地理位置。子网掩码(subnet mask),也叫网络掩码、地址掩码或子网络遮罩,是一种用于指明一个 IP 地址哪些位表示子网标识,哪些位表示主机标识的技术。子网掩码不能单独存在,必须结合 IP 地址一起使用。原创 2024-05-18 08:07:30 · 1016 阅读 · 0 评论 -
线程同步--条件变量,信号量
这里讨论的特定函数与条件变量有关,条件变量是同步原语,允许线程挂起执行并等待某些条件发生。如果信号量的值为0,调用线程将阻塞,直到信号量值变为非0。如果超时,则返回错误。条件变量不是锁,可以引起线程阻塞,某个条件满足以后阻塞线程或解除线程,他不能解决数据混乱的问题。: 通过增加信号量的值来释放信号量,如果有线程因等待这个信号量而阻塞,它将被唤醒。的非阻塞版本,如果信号量的值为0,则立即返回错误,而不是阻塞。此函数解除阻塞所有当前在指定条件变量上阻塞的线程。: 销毁一个未命名的信号量,释放它可能占用的资源。原创 2024-05-12 22:40:26 · 759 阅读 · 0 评论 -
线程同步--互斥锁,读写锁
饥饿发生在某些线程无法获得必需的系统资源。这个函数通常在一个线程完成对受保护的共享资源的操作后调用,以释放互斥量,允许其他线程可以锁定此互斥量并访问相同的资源。在多线程编程中,互斥量是同步原语的一种,非常关键于防止所谓的“竞态条件”(race conditions),即多个线程同时访问和修改同一共享资源而引起的不可预测结果。初始化是在互斥量使用之前必需的步骤,以确保互斥量在首次使用时处于已知的状态。通过合理使用互斥量的锁定与解锁操作,可以有效管理线程之间对共享资源的访问,保障数据的完整性和程序的稳定运行。原创 2024-05-11 07:44:12 · 765 阅读 · 0 评论 -
Linux线程概述与线程操作
被取消的线程可以忽略取消请求、延迟处理请求或立即终止,具体取决于线程的取消状态和类型设置。这意味着一旦这个线程完成它的任务(在这里是打印一条消息并休眠一秒),它将自动释放所有资源,而不需要主线程等待它或者回收它的资源。这些标识符在进程的所有线程中都是共享的。输出将显示每个线程的不同 ID,证明每个线程都有其唯一的标识符。这个函数通常在线程函数的末尾使用,但也可以在线程函数的任意位置调用,以便在不需要完全运行完整个函数的情况下退出线程。在 Linux 系统的早期版本中,真正的线程支持是不存在的。原创 2024-05-10 08:33:59 · 1050 阅读 · 0 评论 -
Linux守护进程
会话与进程组:会话是进程组的容器,可以包含多个进程组。在一个会话中,可以指定一个进程组作为前台进程组,其他的则作为后台进程组。前台进程组可以接收来自控制终端的输入,而后台进程组则不能。会话与控制终端:会话首进程可以为会话获取一个控制终端,这个终端成为整个会话及其所有进程组的交互中心。控制终端可以被用来管理会话中的进程,如发送中断信号。进程组与控制终端:在有控制终端的会话中,只有前台进程组可以直接从控制终端接收输入和处理特定的控制信号(如 SIGINT)。原创 2024-05-08 10:08:11 · 839 阅读 · 0 评论 -
Linux进程通信--共享内存
是 Unix 和类 Unix 系统中 System V 共享内存 API 的一部分,用于执行各种控制操作,如查询状态、设置权限、标记共享内存段的删除等。是 Unix 和类 Unix 系统中 System V 共享内存 API 的一部分,用于将共享内存段从调用进程的地址空间中分离。作为键值来创建一个新的、无法通过键值访问的共享内存段,只能通过进程间继承或通过返回的共享内存标识符来访问。是管理共享内存生命周期的关键部分,确保共享内存使用后能够正确地从进程中解除映射,以维护系统的健康和稳定。原创 2024-05-08 08:14:04 · 755 阅读 · 0 评论 -
Linux进程通信-信号
在 C 语言中,killpid_t pid: 指定要发送信号的进程 ID。如果pid大于 0,信号将发送给具有该 ID 的进程。如果pid等于 0,信号将发送给与发送者同一进程组的所有进程。int sig: 要发送的信号。例如,SIGTERM是请求终止进程的标准信号,SIGKILL是强制终止进程的信号。在 C 语言中,raiseint sig: 要发送的信号代码。例如,SIGINT通常用于表示中断信号(如Ctrl+C触发的),而SIGTERM用于请求终止程序。在 C 语言中,abort。原创 2024-05-07 21:06:15 · 1115 阅读 · 0 评论 -
Linux进程间通信-内存映射
内存映射(Memory Mapping)是一种高效的文件访问技术,它将文件的一部分或全部映射到进程的地址空间。通过这种方式,文件可以像访问内存一样进行读写操作,这通常由操作系统来管理。内存映射提供了对文件的高效随机访问,并能显著提高大量数据处理的性能。原创 2024-05-05 21:51:03 · 490 阅读 · 2 评论 -
Linux进程间管道通信
与匿名管道不同,有名管道在文件系统中有一个实际的目录条目,这使得不相关的进程(即不是父子关系的进程)也能通过这种方式进行通信。例如,有名管道更适合在一个守护进程和一些短暂的客户端进程之间进行通信,而匿名管道则适合在一个复杂的管道命令中,将多个子命令连接起来进行数据传输。这种机制是通过创建一个简单的通信方式,即一个数据流,从一个进程的输出作为另一个进程的输入。,使用管道时不存在消息或者消息边界的概念,从管道读取数据 的进程可以读取任意大小的数据块,而不管写入进程写入管道的数据块的大小是多少。原创 2024-04-30 23:17:12 · 744 阅读 · 0 评论 -
多进程控制
这类进程的直接父进程不存在,所以被操作系统的特定进程(在大多数Unix系统中是init进程,PID为1)收养。init进程周期性地执行等待操作来收集其子进程的退出状态,从而确保这些进程不会变成僵尸进程(未清理的终止进程)。未经回收的终止进程(即僵尸进程)不会继续执行,但它们在进程表中占据位置,并保留与其相关的进程标识符(PID)。进程回收是操作系统中一项重要的任务,主要涉及回收已终止进程的资源,并清理系统中的进程表条目。在实际编程中,确保进程正确回收是非常重要的,尤其是在涉及到大量并发子进程的应用程序中。原创 2024-04-27 21:39:18 · 1134 阅读 · 0 评论 -
GDB多进程调试
在使用GDB(GNU Debugger)进行多进程调试时,你可以使用几种不同的方法来管理和调试多个进程。原创 2024-04-24 16:25:58 · 581 阅读 · 0 评论 -
进程概述与进程创建
程序和进程是计算机科学中的基本概念,它们经常被提到,尤其是在操作系统的上下文中。原创 2024-04-22 16:02:29 · 458 阅读 · 0 评论 -
文件目录操作
文件属性操作函数在不同编程语言中,处理文件属性的函数和方法各有不同。这里我将分别介绍 C 和 Python 中的一些常用文件属性操作函数。C 语言在 C 语言中,标准库提供了几种函数来获取和修改文件的属性。这些函数主要通过操作系统的系统调用来实现,常用于POSIX系统(如Unix、Linux)。获取文件属性stat 和 fstat:这些函数用于获取文件的状态信息,如大小、创建时间、修改时间、访问权限等。stat 函数通过文件名获取信息,而 fstat 则通过文件描述符获取。示例原创 2024-04-21 20:40:46 · 732 阅读 · 0 评论 -
Linux系统IO
Linux系统中的IO函数主要包括两大类:标准C库中的函数和Linux系统调用。这些函数可以用于文件操作、网络通信、设备控制等多种IO任务。以下是Linux系统中常用的IO函数和系统调用的概述:标准C库IO函数这些函数是高级的、封装好的,并且与操作系统的底层实现相隔离,提供了便捷的接口给程序员使用。原创 2024-04-21 17:32:42 · 847 阅读 · 3 评论 -
文件IO总结
它是一个小的整数值,用于代表一个打开的文件、管道或网络连接。总结来说,标准C库的IO函数为开发者提供了一层抽象,使得程序员可以在不直接涉及操作系统细节的情况下,编写可在多种平台上运行的程序。总的来说,MMU是现代计算机架构中不可或缺的部分,它通过管理虚拟和物理内存之间的交互,提高了系统的性能和安全性。总之,文件描述符是操作系统管理打开的文件和其他资源的一种基本方式,它在系统级编程中扮演着重要的角色。标准C库的IO函数和Linux系统的IO函数之间存在密切的关系,但它们属于不同的层次,并服务于不同的目的。原创 2024-04-20 21:17:19 · 805 阅读 · 0 评论 -
GDB调试总结
GDB(GNU Debugger)是一个强大的跨平台调试工具,主要用于 Unix 类系统下的 C、C++ 以及其他编程语言的程序调试。GDB 允许你看到程序执行时发生的事情。启动程序:你可以指定程序的运行环境,传递特定的参数给程序。使程序在设定的断点处停止:断点可以是条件式的,依赖于程序的执行路径或达到特定的代码行。检查程序停止时的状态:当程序停止后,可以查看在那一刻变量的值或程序的调用栈。改变程序的执行环境:可以修改程序的内部状态,例如变量的值,以测试程序的行为。动态跟踪程序的执行。原创 2024-04-19 11:08:06 · 294 阅读 · 0 评论 -
Makefile总结
Makefile 是一个包含了一系列用于自动化编译和构建软件的规则和指令的文件。它通常用于管理大型程序的源代码编译,使得开发者可以简化和自动化编译过程。Makefile 文件是由make工具使用的,这是一种普遍使用的自动化工具,特别是在 Unix 和 Linux 环境中。目标(Targets):指定了需要构建的文件或任务。依赖(Dependencies):每个目标可能依赖于一个或多个文件,这些文件需要在构建目标之前更新或创建。规则(Rules):描述了如何从依赖项创建或更新目标的具体命令。原创 2024-04-18 21:28:07 · 958 阅读 · 0 评论 -
动态库的制作和使用
动态库(在Windows上称为DLL,即Dynamic Link Library,在Unix-like系统上称为SO,即Shared Object)的制作过程涉及几个关键步骤:编写源代码、编译源代码为共享的动态对象,并链接它们生成动态库。通过这个过程,动态链接器能够找到所有可执行文件所依赖的共享库,并将它们加载到内存中,使程序可以运行。动态库在运行时需要被加载,如果系统的动态链接器没有在配置的库路径中找到这个库,就会抛出这样的错误。这是一个由用户或管理员设置的环境变量,用于指定额外的库搜索路径。原创 2024-04-18 12:51:02 · 466 阅读 · 0 评论 -
静态库的制作和使用
在C++中,库(library)是一组预先编译的代码,这些代码可以在多个程序中重用,而无需重复编写相同的代码。C++库可以大致分为两类:标准库和第三方库。标准库:C++标准库提供了大量的常用功能,比如数据结构(如向量、列表、映射等)、算法(如排序和搜索)、以及用于输入输出的功能等。这些都是C++标准的一部分,任何遵循标准的C++编译器都会提供这些库。例如,iostream库用于输入输出操作,vector库用于操作动态数组等。第三方库。原创 2024-04-18 10:38:37 · 431 阅读 · 0 评论 -
gcc原理和使用
它最初被创建为一个C语言编译器,后来扩展支持了C++,以及随着时间的推移增加了对其他编程语言的支持,如Fortran、Ada、Java、Go和Rust等。这些选项只是GCC提供的众多参数中的一部分,但它们是最常用的一些,覆盖了大部分常规需求。你可以结合使用这些选项来控制GCC的行为,优化程序的性能,或者调整程序的编译过程。由于其开源和免费的特性,GCC对编程社区的贡献不可估量,是推动软件创新和教育普及的重要工具。都是GCC的一部分,并且都可以用来编译C和C++代码,但是它们在默认行为和链接库方面有所不同。原创 2024-04-17 20:11:18 · 886 阅读 · 0 评论 -
Linux系统编程开发环境搭建
在使用Visual Studio Code (VSCode) 远程连接到虚拟机并设置编译器路径时,你通常会用到VSCode的Remote Development扩展,特别是Remote - SSH扩展,用来连接到运行在虚拟机上的Linux环境。在非对称加密体系中,公钥和私钥是成对存在的,它们之间有数学上的依赖关系,但从一个密钥计算出另一个密钥在实际操作中是不可行的。每种网络模式提供不同层级的网络访问和安全性,选择哪种模式取决于你的具体需求,如是否需要虚拟机与外部设备通信,或者你对网络隔离和安全性的考虑。原创 2024-04-17 15:04:14 · 983 阅读 · 0 评论 -
计算机网络面试问题(一)
在Web开发中,缓存是一种重要的性能优化手段,它可以减少服务器的负载,加快页面的加载速度。缓存策略主要分为两种:强缓存(Strong Cache)和协商缓存(Negotiated Cache)。这两种缓存策略的运用,能有效地控制资源的获取方式,决定资源是从服务器重新获取还是直接从浏览器缓存中读取。强缓存强缓存不会向服务器发送请求,直接从缓存中读取资源。强缓存可以通过设置HTTP响应头中的Expires和Expires:HTTP/1.0中存在的字段,用来指定资源到期的时间。原创 2024-04-01 16:19:15 · 1004 阅读 · 0 评论 -
网络仿真3-NS2协议修改和移植
执行路径:Tcl->Otcl->C++返回路径:C++->Otcl->Tcl。原创 2024-03-22 15:10:26 · 1135 阅读 · 0 评论 -
Linux 系统是如何收发⽹络包的
在冬天这个季节,当我们要从家⾥出去玩的时候,⾃然要先穿个打底⾐服,再套上保暖外套,最后穿上帽⼦和鞋⼦才出⻔,这个过程就好像我们把 TCP 协议通信的⽹络包发出去的时候,会把应⽤层的数据按照⽹络协议栈层层封装和处理。这个过程展现了Linux内核如何高效、有序地处理网络数据包的发送,从应用层数据的准备到最终的物理传输,每一步都经过精心设计,确保数据的正确传输和系统资源的有效利用。对于使用TCP传输协议的情况,为了实现TCP的可靠传输(即支持数据的重传机制),在从传输层向网络层转发数据时,会克隆一个新的。原创 2024-03-21 10:09:18 · 410 阅读 · 0 评论 -
输入网址到网页显示全过程
对于同⼀台设备上的进程间通信,有很多种⽅式,⽐如有管道、消息队列、共享内存、信号等⽅式,⽽对于不同设备上的进程间通信,就需要⽹络通信,⽽设备是多样性的,所以要兼容多种多样的设备,就协商出了⼀套通⽤的⽹络协议。原创 2024-03-20 11:22:51 · 714 阅读 · 0 评论 -
TCP/IP ⽹络模型
对于同⼀台设备上的进程间通信,有很多种⽅式,⽐如有管道、消息队列、共享内存、信号等⽅式,⽽对于不同设备上的进程间通信,就需要⽹络通信,⽽设备是多样性的,所以要兼容多种多样的设备,就协商出了⼀套通⽤的⽹络协议。原创 2024-03-19 10:47:41 · 1610 阅读 · 0 评论 -
网络仿真(一)
网络中测量端节点的时延、丢包率等参数对于了解网络运行状态、优化网络结构、提高网络服务质量具有十分重要的作用 本项目实验的目的是通过构建网络环境,测量网络中的节点之间时延、丢包率等参数,发送一个随机产生的udp流,发一段时间,挺一段时间,发送和停止的时间各占一半,创建了每条链路上的udp流,每一条链路上都添加了link_udp_num条UDP流。探测流量:向网络中添加的额外流量,通过对这些流量进行统计分析可以获得端到端性能参数,在ns2中可以通过设置CBR、UDP、TCP等形式的流量实现。原创 2024-03-01 16:52:46 · 904 阅读 · 0 评论 -
网络仿真(二)
这包括处理时延(数据在节点处理的时间)、排队时延(数据在节点等待处理或传输的时间)、传输时延(数据在介质中传输的时间)和传播时延(信号通过物理介质传播的时间)。数据包在网络中可能因为多种原因丢失,如网络拥塞、错误的路由选择、不良的链路质量等。较高的丢包率会降低网络通信的可靠性和效率,因为丢失的数据包通常需要重新传输,这会增加额外的延迟和网络负载。AWK 是一种文本处理和模式匹配语言,通常称为数据驱动的 语言,程序语句描述需要进行匹配和处理的输入数据,而不是程序操作步骤的序列,在许多语言中都是这样的。原创 2024-03-08 16:37:35 · 380 阅读 · 0 评论