
Linux/网络/操作系统
文章平均质量分 91
Linux网络、操作系统相关知识
It‘s so simple
这个作者很懒,什么都没留下…
展开
-
深入理解HTTP协议(三)
目录1. http 0.9 ~ http 2.0 的发展历程2. ssl 三次握手1. http 0.9 ~ http 2.0 的发展历程http 0.9:是最早的http版本,确定了http是基于TCP协议的,并且只能使用一个GET方法,在数据的传输格式中,只支持html格式的数据。http 1.0:可以传输图像、视频的格式,并且增加了许多新的请求方法,如Head、Put方法,但是一次只能接收一个TCP连接,并且当双方发送完数据之后,就断开这条TCP连接,换而言之就是只支持短连接。http1.原创 2021-10-09 15:46:45 · 411 阅读 · 0 评论 -
项目——网络对战五子棋(Web-Gobang)
目录项目开发背景项目需求 & 开发环境项目设计 & 项目难点功能实现 & 难点解决1. 用户登录 / 注册2. 项目难点解决项目源码:https://github.com/mxzw/Project/tree/main/webgobang-project/src项目开发背景小时候,闲来无事最喜欢和别人玩的游戏之一就是五子棋了,它规则简单,但却玩法多变,直到现在我还时不时的在手机上和别人在线对战。最近自己学习Linux方面的相关知识,学习了多线程和Socket编程,并对网络这块原创 2021-08-15 17:13:04 · 2911 阅读 · 1 评论 -
五种高阶IO模型以及多路转接技术(select、poll和epoll)及其代码验证
目录1. 五种高阶IO模型1.1 阻塞IO1.2 非阻塞IO1.3 信号驱动IO1.4 多路转接IO1.5 异步IO2. 多路转接技术(select、poll、epoll)2.1 select函数2.1.1 select 函数详解2.1.2 select函数优缺点2.2 poll函数2.3 epoll函数3. select、poll、epoll的代码验证3.1 select代码验证3.1.1 select 简单验证3.1.2 使用select函数解决TCP单进程下的单进程阻塞问题3.1.3 在多线程下调用s原创 2021-08-10 16:50:19 · 1026 阅读 · 6 评论 -
多线程下的fork问题(模拟与解决)
目录前言1. 浅谈在多线程下的fork的问题2. 死锁问题的模拟实现3. 解决办法前言有关进程、多线程、fork的概念,请看我之前写的这两篇文章。Linux:进程控制(进程创建、进程终止、进程等待、进程程序替换)Linux:详解多线程(线程概念、线程控制—线程创建、线程终止、线程等待)(一)1. 浅谈在多线程下的fork的问题当fork函数创建出一个子进程的时候,子进程会拷贝父进程的进程虚拟地址空间,并且也会从父进程中拷贝一份相应的内存数据到子进程中,这是我们所知道的在单进程的情况下它是这样的,原创 2021-07-29 20:03:39 · 1071 阅读 · 0 评论 -
以太网协议、ARP协议、NAT协议、DNS协议
目录1. 数据链路层的以太网协议2. ARP协议1. 数据链路层的以太网协议数据链路层的以太网协议本质上其实就是相邻设备之间的数据转发。以太网协议格式:MAC地址:每一个网卡设备在出厂的时候都会拥有一个全球独一无二的MAC地址,MAC地址也被称为硬件的地址。本质上是:6字节的整数,即uint8_t addr[6]。可以在ifconfig(LINUX)中查看到对应的MAC地址。Windows中可以使用ipconfig -all进行查看以太网格式中的类型(2位):表示的是上层原创 2021-07-07 16:02:42 · 4698 阅读 · 11 评论 -
IP协议详解(IP协议格式、IP地址管理、路由转发)
目录1. IP协议格式1. IP协议格式原创 2021-07-07 10:02:46 · 2809 阅读 · 4 评论 -
TCP协议详解(图解TCP协议格式、TCP的各种可靠传输机制)(二)
目录1. TCP协议格式2. TCP的可靠传输机制2.1 确认应答(ACK)机制2.2 超时重传机制2.3 滑动窗口机制2.4 流量控制机制2.5 拥塞控制1. TCP协议格式如图:① 32位序号:该条TCP数据所携带的起始序号。② 32位确认序号:期望对方发送数据从哪一个序号开始发送。③ 4位首部长度:最大是0xF(15),指的是TCP头部的长度。首部长度 = 4位首部长度(DEC) * 4 ,单位为Byte。注:DEC:表示十进制的数字。④ 6个标志位:(6个比特位)U原创 2021-07-02 17:21:53 · 6277 阅读 · 2 评论 -
TCP协议详解(图解三次握手、四次挥手)(一)
目录1. 三次握手1. 三次握手TCP协议是面向连接、可靠传输、面向字节流的。那么TCP是如何保持可靠且有序的连接的呢?答案是三次握手+四次挥手。那么TCP的三次握手到底是如何进行的呢?如图所示:...原创 2021-07-02 10:46:58 · 1692 阅读 · 0 评论 -
UDP协议详解(UDP协议特点,UDP协议格式、UDP的应用)
目录前言1.UDP协议的特点2. UDP协议的特点3. UDP的应用前言TCP和UDP协议都是传输层的协议,其中传输层是负责端对端之间的连接,端是指端点。端口的划分和知名端口0~1023:知名端口3306:Mysql数据库1521:Oracle数据库22:ssh服务器21:ftp服务器23:telnet服务器80:http服务器443:https服务器可以使用cat /etc/services查看知名端口① 一个进程是否可以bind多个端口号?可以的,一个进程可以绑定原创 2021-06-30 18:57:47 · 10151 阅读 · 3 评论 -
深入理解HTTP协议(二)
目录1. HTTP请求方法1.1 GET:获取资源1.2 POST:传输实体主体1.3 PUT方法:传输文件1.4 HEAD:获得报文首部1.5 DELETE:删除文件1.6 OPTIONS:询问支持的方法1.7 HTTP请求方法的总结2. HTTP响应状态码及其解释2.1 状态码类别2.2 2XX:成功状态码2.2.1 200:OK2.2.2 204:NO Content2.2.3 206:Partial Content2.3 3XX:重定向状态码2.3.1 301:Moved Permanent原创 2021-06-27 12:38:11 · 862 阅读 · 1 评论 -
深入理解HTTP协议(一)
目录1. HTTP概述2. 对HTTP中URL的解释3. HTTP协议中的数据流4. HTTP协议的格式5. HTTP的协议版本6. HTTP请求方法6.1 GET:获取资源6.2 POST:传输实体主体6.3 PUT方法:传输文件6.4 HEAD:获得报文首部6.5 DELETE:删除文件6.6 OPTIONS:询问支持的方法6.7 HTTP请求方法的总结7. HTTP响应状态码及其解释1. HTTP概述HTTP:超文本传输协议HTTP协议是无连接、无状态。工作在应用层的协议。对无连接的原创 2021-06-27 12:37:42 · 555 阅读 · 2 评论 -
Linux:TCP粘包问题的模拟实现以及解决方法
目录1. TCP粘包问题的模拟实现1.1 何谓TCP粘包1.2 TCP粘包问题的模拟实现2. TCP粘包问题的解决办法1. TCP粘包问题的模拟实现1.1 何谓TCP粘包因为TCP协议是有连接,可靠有序,面向字节流的协议,也正是它面向字节流这个特性,导致存放在接收缓冲区的数据没有明显的界限,TCP的recv函数在接收数据的时候不会识别数据是第一条还是第二条,而是直接根据规定的大小进行读取数据,而我们每次都不知道发送数据方发送的数据大小,因此再读取数据的时候,极有可能读取到不完整的数据,或者说是粘连的原创 2021-06-26 14:41:29 · 937 阅读 · 3 评论 -
Linux:TCP Socket编程(代码实战)
目录1. TCP的Socket编程1.1 TCP的编程流程1.2 TCP Socket的接口1.2.1 服务端监听连接接口1.2.2 服务端获取新连接接口1.2.3 客户端发起连接接口1.2.4 发送数据接口1.2.5 接收数据接口2. 代码实战2.1 单进程版本的TCP代码1. TCP的Socket编程1.1 TCP的编程流程和UDP编程一样,我们在考虑TCP的时候也要考虑到接收方和发送方,也就是是说要考虑接收方和发送方的,但是由于TCP是有连接,可靠有序且面向字节流的传输层协议,因此,TCP的编原创 2021-06-26 12:54:43 · 3784 阅读 · 4 评论 -
Linux:UDP Socket编程(代码实战)
文章目录1. 网络字节序2. TCP、UDP的简单了解2.1 UDP协议2.2 TCP协议3. UDP的Socket编程3.1 编程的流程3.2 Socket的接口3.2.1 创建套接字1. 网络字节序① 首先我们需要知道什么是字节序?字节序就是CPU对内存数据的存取顺序② 其次,字节序中又分为大端字节序和小端字节序。大端字节序就是数据的低位保存在高地址,高位保存在低地址。小端字节序就是数据的低位保存在低地址,高位保存在高地址。举个例子来看一下,现在有一个数据0x12345678。原创 2021-06-02 19:22:14 · 2945 阅读 · 6 评论 -
Linux:详解多线程(线程池、读写锁和CAS无锁编程)(四)
文章目录1. 线程池1.1 相关概念1.2 线程池的实现1. 线程池1.1 相关概念概念:一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。线程池它本质上是包含了一个线程安全的队列和一大堆的线程线程池当中的线程都是从线程原创 2021-05-25 17:45:15 · 581 阅读 · 9 评论 -
Linux:网络基础(协议、数据的封装与分用)(一)
文章目录1. 协议1.1 协议的概念1.2 协议的分层1.2.1 OSI 七层模型1.2.2 TCP/IP四层(五层)模型2. 数据的封装与分用2.1 数据的流向2.2 ip,端口的本质和作用2.3 数据的封装和分用2.4 常见的问题1. 协议1.1 协议的概念协议的概念协议是双方约定同一种语言,从而可以进行沟通。网络协议那么网络协议就是通信双方在约定通信时使用的一种数据格式,从而进行网络通信。碎片知识:网络是按照区域进行划分的,可以划分为局域网、城域网和广域网。1.2 协议的分层原创 2021-05-24 15:31:59 · 415 阅读 · 4 评论 -
Linux:详解多线程(线程同步、信号量和生产者与消费者模型的实现)(三)
目录原创 2021-05-21 18:10:39 · 1302 阅读 · 11 评论 -
Linux:详解多线程(线程安全、互斥和死锁)(二)
目录1. 线程安全(面试热点)1.1 线程安全的定义1.2 对正常变量进行操作的原理1.3 描述线程不安全的现象(重点)1.4 线程不安全的代码模拟2. 互斥2.1 互斥锁的原理2.2 互斥锁的接口2.2.1 初始化互斥锁变量1. 线程安全(面试热点)1.1 线程安全的定义在多个执行流访问同一临界资源的时候,不会导致程序结果产生二义性,即就是线程安全。在这里,我们首先需要知道以下几个名词的含义:执行流:这里的执行流可以理解为线程,即一个执行流就是一个线程的运行。访问:指的是对临界资源的原创 2021-05-13 10:54:56 · 1013 阅读 · 9 评论 -
Linux:详解多线程(线程概念、线程控制—线程创建、线程终止、线程等待)(一)
目录1. 线程1.1 线程概念1.2 线程的共享与独有1.3 线程的优缺点1.3.1 线程的优点1.3.2 线程的缺点1.4 线程与进程的对比2. 线程控制2.1 创建线程1. 线程1.1 线程概念在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程(主线程)线程在进程内部运行,本质是在进程地址空间内运行在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化透过进程虚拟地址空间,可以看到进程的原创 2021-05-08 21:59:54 · 1666 阅读 · 2 评论 -
Linux:详解进程信号(信号的捕捉流程,信号的阻塞、volatile关键字)(二)
文章目录1. 信号的捕捉流程1.1 捕捉流程前言:阅读的时候如有不懂的的地方,可以看我之前写的详解进程信号(信号的种类、产生、注册、注销以及信号的各种处理方式)(一)1. 信号的捕捉流程在讲信号的捕捉流程的时候,我们需要首先明确的一个问题是:信号的注册,是否与操作系统所维护的进程PCB有关?在上一篇文章中也讲了,信号的注册实质是将tast_struct(PCB)结构体中的struct sigpending结构体变量,它所包含的sigset_t signal位图中所对应的那个信号的比特位置为1,然后原创 2021-05-02 15:31:22 · 1655 阅读 · 5 评论 -
Linux:详解进程信号(信号的种类、产生、注册、注销以及信号的各种处理方式)(一)(图文并茂)
目录1. 信号的概念2. 信号的种类3. 信号的产生3.1 硬件产生3.2 软件产生4. 信号的注册4.1 信号在内核中的存储表示4.2 非可靠信号的注册4.3 可靠信号的注册5. 信号的注销5.1 非可靠信号的注销1. 信号的概念信号是一个软件中断,相当于是一个口头的约束,对你的限制力比较低,举个例子来说就是当你买的快递到了需要你去取的时候,而你正在打游戏,你并没有下去去取快递,但是你是知道有快递到来了。也就是取快递的行为并不是一定要立即执行,可以理解成“在合适的时候去取。在这个过程中,你获得了一原创 2021-04-27 11:06:27 · 1672 阅读 · 9 评论 -
Linux:详解进程间通信——共享内存和消息队列相关接口及其代码验证(图文并茂)(二)
目录原创 2021-04-25 17:47:13 · 458 阅读 · 7 评论 -
Linux:详解进程间通信——管道(匿名管道和命名管道)(图文并茂)(一)
文章目录前言1. 匿名管道1.1 从命令去感受管道前言进程间通信的作用由于进程独立性的存在,两个过程想要直接交换数据是非常困难的,所以引入进程间通信来解决进程与进程之间交换数据的问题。目前,最大的进程间通信的方式是网络。进程间通信的方式:实现进程进程间通信的方式主要有三种:管道(匿名管道和命名管道)共享内存消息队列和信号量本节,我们就深入探讨一下管道是如何实现进程间通信的。1. 匿名管道在说匿名管道之前,我们有必要来提一下,什么是管道管道是Unix中最古老的进程间原创 2021-04-24 16:12:44 · 865 阅读 · 2 评论 -
Linux:详解基础IO(重定向、静态库和动态库、ext2文件系统、软硬连接)(二)
目录1.重定向1.1 前言1.2 重定向的命令符号1.3 重定向的原理1.4 重定向的代码实现1.重定向1.1 前言重定向是什么呢?举个例子来看一下我们首先创建一个不包含任何内容的文件1.txt然后我们将ls -l的命令重定向到1.txt查看1.txt中的内容1.2 重定向的命令符号>:清空重定向,将文件清空之后,再进行重定向>>:追加重定向,直接将重定向的内容放在该文件的尾部相当于C语言fopen函数中的 w、w+ 属性。1.3 重定向的原理原创 2021-04-17 11:38:19 · 352 阅读 · 0 评论 -
Linux: 详解基础IO(C库文件操作函数、系统调用文件接口、文件描述符和文件流指针)(图文并茂)(一)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录#=提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。...原创 2021-04-13 21:41:28 · 468 阅读 · 0 评论 -
Linux:实现一个简单的miniShell(进程程序替换实战)
目录1. miniShell2. 代码实现3. 代码运行结果1. miniShell我们本次要实现的是一个命令行解释器,就是Linux中在终端上输入相应的命令程序,然后输出相应的内容一样,类似:它的本质是当你输入一个命令,然后Bash会创建一个子进程,然后对子进程进行进程程序替换,那么该子进程就会运行你刚刚输入的命令,然后一直循环。如图:总结一下,实现一个miniShell大概需要5步。创建子进程获取命令行解析命令行在子进程中进行进程程序替换父进程等待子进程退出(wai原创 2021-04-12 17:44:32 · 480 阅读 · 0 评论 -
Linux:进程控制(进程创建、进程终止、进程等待、进程程序替换)
文章目录1.进程创建1.1 fork函数1.2 vfork函数2. 进程终止2.1 进程终止的场景2.2 进程终止的方法1.进程创建1.1 fork函数在Linux中,fork函数是一个比较重要的函数,它能从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。函数头文件和原型#include<unistd.h>pid_t fork(void)其中,pid_t 是一个整型,若是创建子进程失败,则返回-1,若是创建成功,对于父进程而言,返回 子进程的PID号,对于子进程而原创 2021-04-12 00:19:32 · 943 阅读 · 1 评论 -
详解进程虚拟空间,分页式、分段式和段页式存储
文章目录1. 进程虚拟空间1.1 探索进程虚拟空间1.2 疑惑验证2.分页式、分段式和段页式存储2.1 分页式存储2.2 分段式存储2.3 段页式存储1. 进程虚拟空间在32位的操作系统下,总共有32根地址线(32字节),而每根地址线只能表示两种电信号,即0:低电频,1:高电频,因此对应到内存中,每个程序在运行时会分配4G的空间(1G = 210MB = 220KB=230B)。可画出对应的程序虚拟空间如下图:数据段中存的是初始化的数据、未初始化的数据和一些静态的数据虽说,从刚学C开始,老师原创 2021-03-28 22:21:44 · 1207 阅读 · 1 评论 -
Linux-环境变量的设置、查看和测试
文章目录1.基本概念2.查看环境变量3.设置环境变量4. 环境变量的代码验证5.通过代码获取环境变量1.基本概念环境变量:一般是指在操作系统中用来指定操作系统运行环境的一些参数例如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。常见的环境变量PATH:保存了可执行程序的搜索路径(其中各个路径之间采用:符号来分隔)SHELL:保存了命令行解释器的名称(Linux中为B原创 2021-03-28 20:32:54 · 2785 阅读 · 4 评论 -
详解进程的相关概念(冯诺依曼体系,操作系统,PCB,进程状态,进程创建)--超详细讲解(图文并茂)
文章目录1.冯诺依曼体系结构1.冯诺依曼体系结构我们日常生活中常见的计算机(笔记本)和不常见的计算机(服务器),大多都遵循冯诺依曼体系结构。特点计算机处理的数据和指令一律用二进制数表示顺序执行程序计算机硬件由运算器、控制器、存储器、输入设备和输出设备五大部分组成。下面我再根据自己的理解,再来解释一下冯诺伊曼体系结构中的各个部分有...原创 2021-03-21 21:21:25 · 1924 阅读 · 2 评论 -
Linux-调试器(gdb)、make&&makefile、git操作(图文并茂)
调试器(gdb)我们在Windows操作系统对自己所写代码进行检查时,大多都有专门的平台(如:VS)对其进行调试,那么在Linux操作系统中,也有对应的调试器gdb。但是需要注意的是在Linux下调试程序,需要在编译的时候,将程序编译为debug版本。因为Linux操作系统下默认在编译时生成的是realse版本,若想生成debug,则在编译的时候需要增加-g的参数...原创 2021-03-08 19:58:18 · 388 阅读 · 0 评论 -
Linux-Vim的使用(超详细)
Vim的使用基本上vim分为三种模式,分别是普通模式(Normal mode),输入模式(Insert mode),和命令行模式(Command line mode)。他们的关系如图所示:Vim的七字口诀:移删复替撤更跳移:指光标的移动键盘的 “↑、↓、←、→”键盘的 ”k、j、h、l“w ->光标跳转到下一个词的词首b ->光标跳到上一个词的词首,包含光标所在词H:光标移到当前屏幕的上方M:光标移到当前屏幕的中间L:光标移到当前屏幕的下方删:删除光标处内容原创 2021-03-07 21:29:05 · 352 阅读 · 0 评论 -
Linux-权限理解和yum工具的使用
权限权限的种类r :可读权限w :可写权限x :可执行权限举个例子,在你的Linux操作系统下输入ls -l,对显示出来的文件状态进行观察,如下图。下面对上图中标号①~⑥逐一进行分析。①代表当前文件的类型。②代表权限区域,其中前三个代表着当前文件所属用户,中间三个代表着当前组用户的权限,最后三个代表着其他用户对此的权限。③代表目前所属区域,前两个代表着文件所属的用户,后两个代表着当前用户所属的用户组④代表着文件的大小,单位为Byte⑤代表着最后修改文件的时间⑥代表文件原创 2021-03-07 20:30:08 · 385 阅读 · 0 评论 -
Linux-常用指令(超详细)(二)
Linux常用指令本文紧接Linux-常用指令(超详细)(一)1.find:查找文件find [path] -name [文件名称]2.grep:用来查找文件中的字符串grep "字符串" -r [path]作用①:查找字符串作用②:配合管道符号 (‘|’)过滤其他命令的输出结果例:ls -l | grep "xxxxx"解释:加上管道符号之后是将 l l(ls -l)的结果通过管道传递给grep,作为grep命令的输出参数,让grep命令进行过滤3. data:查看当前日期4.切原创 2021-03-06 15:52:12 · 135 阅读 · 0 评论 -
Linux-常用指令(超详细)(一)
Linux常用指令Linux的命令格式为:command [-options] [parameter 1] …… 命令 选项 参数11. ls:罗列文件夹下的文件或文件夹ls [命令行参数] [path]ls -a:显示出隐藏文件ls -l:罗列出当前文件或文件夹的详细信息 (可以直接写成 ll )ls -al:上面两条指令的综合,罗列出包括隐藏文件的详细信息ls -lrt:按照修改时间进行一个排序 (r ->逆序,t->时间)ls -h原创 2021-03-06 15:41:25 · 201 阅读 · 0 评论