计算机网络
文章平均质量分 76
数据库内核
这个作者很懒,什么都没留下…
展开
-
tcpdump、wireshark 抓包分析(小白快速上手)
网络世界中的数据包一般都是不可见的,导致在学习计算机网络的时候会觉得其非常抽象,加大了学习的难度。自从有了网络包分析工具:tcpdump 和 Wireshark,使不可见的数据包得以可视化。问题:tcpdump 和 wireshark 有什么区别?tcpdump 和 wireshark 是最常用的网络抓包和分析工具,更是分析网络性能必不可少的利器。1)tcpdump 仅支持命令行格式使用,常在 Linux 服务器中抓取和分析网络包;原创 2024-01-23 22:06:33 · 1941 阅读 · 1 评论 -
make 和 makefile 的使用 ###通俗易懂
人们通常利用 make 工具来自动完成编译工作。这些工作包括:如果仅修改了某几个源文件,则只重新编译这几个源文件;如果某个头文件被修改了,则重新编译所有包含该头文件的源文件。利用这种自动编译可大大简化开发工作,避免不必要的重新编译。make 工具通过一个称为 makefile 的文件来完成并自动维护编译工作。makefile 需要按照某种语法进行编写,其中说明了如何编译各个源文件并连接生成可执行文件,并定义了源文件之间的依赖关系。当修改了其中某个源文件时,如果其他源文件依赖于该文件,则也要重新编译所有依赖该原创 2023-10-23 22:26:41 · 516 阅读 · 0 评论 -
常见IO模型(非常详细)
阻塞IO、⾮阻塞IO、IO多路复⽤、信号驱动IO的主要区别在于对阶段1(等待数据准备好)的处理;对于阶段2(内核拷⻉数据到进程)的处理⽅式是⼀致的,都是同步等待数据拷⻉完成;因⽽这4种IO模型均属于同步IO模型;⽽异步IO模型,针对阶段1、阶段2都会进⾏处理,在⽤户进程看来,所进⾏的IO操作的2个阶段都不会block 进程的运⾏;原创 2023-09-10 13:35:25 · 506 阅读 · 0 评论 -
Gcc 与 G++的区别(通俗易懂)
误区一: gcc只能编译c代码, g++只能编译c++代码;两者都可以;(1)后缀为.c的, gcc 把它当作是 c程序,而g++当作是 c++程序;(2)后缀为.cpp 的,两者都会认为是C++程序,c++的语法规则更加严谨一些编译阶段, g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和c++程序使用的库联接,所以通常用g++来完成链接, 为了统一起见,干脆编译/链接统统用g++ 了,这就给人―种错觉,好像cpp程序只能用g++似的;误区二: gcc不会定义__cplusp原创 2022-07-07 10:39:42 · 8711 阅读 · 1 评论 -
Linux 静态库/动态库的制作与使用(通俗易懂)
1、库文件是计算机上的一类文件,可以简单的把库文件看成一种代码仓库,它提供给使用者一些可以直接拿来用的变量、函数或类;2、库是特殊的一种程序,编写库的程序和编写一般的程序区别不大,只是库不能单独运行;3、库文件有两种,静态库和动态库(共享库),区别是︰静态库在程序的链接阶段被复制到不程序中;动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用;4、库的好处: (1)代码保密;(2)方便部署和分发;gcc 获得.o 文件,将.o 文件打包,使用ar工具(arghive)说原创 2022-07-07 11:09:37 · 939 阅读 · 0 评论 -
Linux 虚拟地址空间(通俗易懂)
该文章主要是真对面试做大致的了解,不做详细介绍!!! 下面由高地址到低地址依次介绍:内核空间为内核保留,不允许应用程序读写该区域的内容或直接调用内核代码定义的函数。可以通过对Linux系统进行系统调用。栈是由高地址向低地址扩展的连续内存,栈的大小一般为 2M 或者 10M。栈内存是由系统分配,系统释放的,以函数为单位进行栈内存分配,函数栈帧,局部变量,形参变量等都存放在栈内存上。栈的内存分配释放速度快效率高,内存都是连续的。堆是由低地址向高地址扩展的非连续内存,堆的大小影响的因素比较多,和系统虚拟内存的大原创 2022-07-08 14:43:42 · 1677 阅读 · 0 评论 -
文件描述符(通俗易懂)
该文章主要是针对面试做大致的了解,不做详细介绍!!!一、具体结构说明:1、一个进程能够同时打开多个文件,对应需要多个文件描述符,所以需要用一个文件描述符表对文件描述符进行管理;通常默认大小为1024,也即能容纳1024个文件描述符;2、文件描述符表中0、1、2三个位置对应的文件描述符固定不变,标准输入、标准输出、标准错误;3、当打开一个文件时,内核会自动在文件描述符表中寻找一个空闲且最小的文件描述符;4、同一个文件可以被多次打开,但是每打开一次都需要一个新的文件描述符;5、已经被占用的文件描述符在被释放后,原创 2022-07-08 15:27:41 · 15301 阅读 · 2 评论 -
Linux 的父进程和子进程的执行情况(附有案例代码)
该文章主要是针对面试做大致的了解,通俗易懂!!!指已创建一个或多个子进程的进程。在Linux里,除了进程0以外的所有进程都是由其他进程使用系统调用fork()函数创建的,这里调用fork()函数创建新进程的进程即为父进程,而相对应的为其创建出的进程则为子进程,因而除了进程0以外的进程都只有一个父进程,但一个进程可以有多个子进程。指的是由另一进程(对应称之为父进程)所创建的进程。子进程继承了对应的父进程的大部分属性,如文件描述符。在Unix中,子进程通常为系统调用fork()函数的产物。在此情况下,子进程一开原创 2022-07-09 17:35:39 · 7355 阅读 · 1 评论 -
孤儿进程、僵尸进程和进程退出(通俗易懂)
该文章主要是针对面试做大致的了解,通俗易懂!!!一、孤儿进程 父进程运行结束,但子进程还在运行(未运行结束),这样的子进程就称为孤儿进程(orphan Process)。每当出现一个孤儿进程的时候,内核就把孤儿进程的父进程设置为 init ,而 init 进程会循环地wait () 它的已经退出的子进程。这样,当一个孤儿进程凄凉地结束了其生命周期的时候,init进程就会代表党和政府出面处理它的一切善后工作。因此孤儿进程并不会有什么危害。 当出现孤儿进程的时候,内核会自动把它的父进程设原创 2022-07-10 15:09:23 · 754 阅读 · 0 评论 -
wait 和 waitpid 的区别(附有案例代码)
功能:等待任意一个子进程结束,如果任意一个子进程结束了,该函数会回收子进程的资源。参数:int *wstatus 进程退出时的状态信息,传入的是一个int类型的地址(用于接收进程退出时的状态信息),传出参数。返回值: - 成功:返回被回收的子进程的id - 失败:-1 (所有的子进程都结束,调用函数失败) 调用wait函数的进程会被挂起(阻塞),直到它的一个子进程退出或者收到一个不能被忽略的信号时才被唤醒(相当于继续往下执行);如果没有子进程了,函数立原创 2022-07-11 09:46:08 · 223 阅读 · 0 评论 -
进程间通信(非常实用)
进程是一个独立的资源分配单元,不同进程(这里所说的进程通常指的是用户进程)之间的资源是独立的,没有关联,不能在一个进程中直接访问另一个进程的资源。 但是,进程不是孤立的,不同的进程需要进行信息的交互和状态的传递等,因此需要进程间通信(IPC: Inter Processes Communication )。进程间通信的目的: 数据传输:一个进程需要将它的数据发送给另一个进程。 通知事件:一个进程需要向另一个或一组进程发送消息,通知它它们)发生了某种事件(如进程终止时要通知原创 2022-07-11 14:43:25 · 481 阅读 · 0 评论 -
进程间通信——匿名管道原理及详解(附有案例代码)
管道也叫无名(匿名)管道,它是是UNIX系统IPC(进程间通信)的最古老形式,所有的UNIX系统都支持这种通信机制。 统计一个目录中文件的数目命令: ls | wc -l,为了执行该命令,shell 创建了两个进程来分别执行ls 和wc;通常情况下,进程 ls 的输出直接通过 stdout 输出到控制台,但是为了两个进程能够进行通信,系统会建立一个管道,然后把进程 ls 发的内容输出到管道,进程 wc 从管道中读取进程 ls 输出的内容,从而实现进程间的通信。A.管道其实是一个在内核内存中维护原创 2022-07-13 09:49:57 · 2927 阅读 · 0 评论 -
进程间通信——有名管道原理及详解(附有案例代码)
有名管道(FIFO)不同于匿名管道之处在于它提供了一个路径名与之关联,以 FIFO的文件形式(特殊文件形式)存在于文件系统中,并且其打开方式与打开一个普通文件是一样的,这样即使与FIFO的创建进程不存在亲缘关系的进程,只要可以访问该路径就能够彼此通过 FIFO相互通信,因此,通过FIFO不相关的进程也能交换数据。 一旦打开了 FIFO,就能在它上面使用与操作匿名管道和其他文件的系统调用一样的I/O系统调用了 (如read ( ). write()和close())。与管道一样, FIFO也有一个原创 2022-07-13 10:01:33 · 1797 阅读 · 0 评论 -
进程间通信——内存映射原理及详解(附有案例代码)
内存映射(Memory-mapped I/0)是将磁盘文件的数据映射到内存,用户通过修改内存就能修改磁盘文件。3、使用内存映射进行进程通信1.有关系的进程(父子进程) - 还没有子进程的时候 - 通过唯一的父进程,先创建内存映射区 - 有了内存映射区以后,创建子进程 - 父子进程共享创建的内存映射区2.没有关系的进程间通信,单独创建两个进程 - 准备一个大小不是0的磁盘文件 - 进程1 通过磁盘文件创建内存原创 2022-07-13 14:28:42 · 835 阅读 · 0 评论 -
进程间通信——信号原理及详解(附有案例代码)
(1)信号是 Linux进程间通信的最古老的方式之一,是事件发生时对进程的通知机制,有时也称之为软件中断.它是在软件层次上对中断机制的一种模拟,是一种异步通信的方式。信号可以导致一个正在运行的进程被另一个正在运行的异步进程中断,转而处理某一个突发事件。(2)发往进程的诸多信号,通常都是源于内核。引发内核为进程产生信号的各类事件如下: 对于前台进程,用户可以通过输入特殊的终端字符来给它发送信号。比如输入Ctrl+C通常会给进程发送一个中断信号。 硬件发生异常,即硬件检测到一个错误原创 2022-07-14 15:02:27 · 1520 阅读 · 0 评论 -
进程间通信——共享内存原理及详解(通俗易懂)
共享内存允许两个或者多个进程共享物理内存的同一块区域(通常被称为段)。由于一个共享内存段会称为一个进程用户空间的一部分,因此这种IPC机制无需内核介入。所有需要做的就是让一个进程将数据复制进共享内存中,并且这部分数据会对其他所有共享同一个段的进程可用。与管道等要求发送进程将数据从用户空间的缓冲区复制进内核内存和接收进程将数据从内核内存复制进用户空间的缓冲区的做法相比,这种IPC技术的速度更快。............原创 2022-07-15 08:55:50 · 2823 阅读 · 2 评论 -
Linux 多线程开发(附有案例代码)
同一个程序中的所有线程均会独立执行相同程序,且共享同一份全局内存区域,其中包括初始化数据段、未初始化数据段,以及堆内存段。(传统意义上的UNIX进程只是多线程程序的一个特例,该进程只包含一个线程)调用fork()来创建进程的代价相对较高,即便利用写时复制技术,仍热需要复制诸如内存页表和文件描述符表之类的多种进程属性,这意味着fork()调用在时间上的开销依然不菲。进程间的信息难以共享。由于除去只读代码段外,父子进程并未共享内存,因此必须采用一些进程间通信方式,在进程间进行信息交换。进程ID和父进程工D。..原创 2022-07-15 17:40:18 · 5628 阅读 · 0 评论 -
Linux 守护进程(附有案例代码)
守护进程(DaemonProcess),也就是通常说的Daemon进程(精灵进程),是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。一般采用以d结尾的名字。...............原创 2022-07-15 13:09:44 · 907 阅读 · 0 评论 -
Linux 端口复用详解(附有案例代码)
这个时间段内,主动断开方在等待,并没有及时释放,所以其他设备无法及时的与主动段开放进行再次连接;2、端口复用API。原创 2022-07-21 23:04:14 · 2866 阅读 · 0 评论 -
计算机网络基础知识(非常详细)
TCP建链时,携带的连接控制参数。TCP_MAXSEG:设置MSS(Max Segment Size),发送SYN时,告知对端可以接受的最⼤分节⼤⼩;即在当前连接中每个TCP分节中可以接受的最⼤数据量,接收SYN的⼀端会据此设置发送分节的 最⼤⼤⼩。通过TCP_MAXSEG设置;SO_RCVBUF:设置接收缓冲区⼤⼩,据此告知对端通告窗⼝的⼤⼩;SO_SNDBUF:设置发送缓冲区⼤⼩;原创 2023-09-09 17:30:08 · 69719 阅读 · 122 评论 -
TCP 通信流程详解(附有案例代码)
4)阻塞等待,当有客户端发起连接,解除阻塞,接受客户端的连接,会得到一个和客户端通信的套接字(fd)(2)将这个监听文件描述符和本地的IP和端口绑定(IP和端口就是服务器的地址信息)UDP用户数据报协议,面向无连接,可以单播,多播,广播,面向数据报,不可靠。TCP传输控制协议,面向连接的,可靠的,基于字节流,仅支持单播传输。-客户端连接服务器的时候使用的就是这个IP和端口。(2)连接服务器,需要指定连接的服务器的IP和端口。(1)创建一个用于通信的套接字(fd).........原创 2022-07-20 08:53:30 · 11421 阅读 · 0 评论 -
TCP 滑动窗口详解(非常实用)
滑动窗口(Slidingwindow)是一种流量控制技术。早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。由于大家不知道网络拥塞状况,同时发送数据,导致中间节点阻塞掉包,谁也发不了数据,所以就有了滑动窗口机制来解决此问题。滑动窗口协议是用来改善吞吐量的一种技术,即容许发送方在接收任何应答之前传送附加的包。接收方告诉发送方在某一时刻能送多少包(称窗口尺寸)。TCP中采用滑动窗口来进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。服务器。............原创 2022-07-20 13:30:59 · 14538 阅读 · 2 评论 -
TCP 通信并发服务器详解(附有案例代码)
代码】TCP通信并发详解(附有案例代码)原创 2022-07-20 16:48:47 · 2535 阅读 · 0 评论 -
TCP可靠性保证总结(非常实用)
二、序列号/确认应答TCP主要提供了检验和、序列号/确认应答、超时重传、最大消息长度、拥塞控制等方法实现了数据的可靠性传输!一、检验和TCP在计算检验和时,会在TCP首部加上一个12字节的伪首部。检验和总共计算3 部分:TCP首部、TCP数据、TCP伪首部;二、序列号/确认应答发送端每次发送数据时,TCP就给每个数据包分配一个序列号并且在一个特定的时间内等待接收端对分配的这个序列号进行确认,如果发送端在一个特定时间内没有收到接收端的确认,则发送端会重传此数据包。原创 2022-11-08 21:56:16 · 1851 阅读 · 1 评论