linux操作系统和网络
文章平均质量分 92
linux操作系统和网络
老汉忒cpp
重生之双非学cpp励志进大厂
展开
-
手动部署并测试内网穿透(ssh 和 nginx)
首先需要一台连接了公网的云服务器,然后我们要访问的内网穿透对象最好是Linux服务器,比如虚拟机,然后我们通过向云服务器发送指令,云服务器再将指定发送给指定对象,让其能够执行命令。总结就是:假设家里的机器就是我们的目标服务器,它首先会跟我们的云服务器进行通信,然后建立NAT转化表,这样我们的云服务器就能和家里的服务器进行通信了,这样我们在外边就可以直接跟我们的云服务器通信,然后在云服务器上通过特定的软件,将我们的请求转发到内网中的机器,这就是内网穿透。原创 2024-09-19 14:42:42 · 1437 阅读 · 0 评论 -
DNS和ICMP
主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称比如:www.baidu.com ,其中com: 这个是一级域名。.com表示这是一个企业域名,同级的还有 .org (非盈利组织) ,.net(网络运营商),或者 .edu(教育组织)baidu:这是二级域名。一般是公司名www:这只是一个习惯用法。原创 2024-09-18 14:50:13 · 850 阅读 · 0 评论 -
TCP全连接队列和tcpdump抓包
服务器在调用listen的时候,listen的第二个参数 + 1,就是TCP全连接队列的长度。当客户端的连接进入established 状态后,如果服务器没有调用accept将连接取走,那么该连接就会待在TCP全连接队列中,直到上层调用accept将其取走。在全连接队列中的连接可以维持很长一段时间,除非上层调用accep取走,或者被上层主动关闭了;原创 2024-09-12 21:40:05 · 697 阅读 · 0 评论 -
HTTP Cookie 和 session
(也称为Web Cookie、浏览器Cookie或简称Cookie)是服务器发送到用户浏览器并保存在浏览器上的一小块数据,它会在浏览器之后向同一服务器再次发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态、记录用户偏好等。是服务器用来跟踪用户与服务器交互期间用户状态的机制。由于HTTP协议是无状态的(每个请求都是独立的),因此服务器需要通过Session来记住用户的信息。原创 2024-09-05 20:55:04 · 969 阅读 · 0 评论 -
简单实现能够断线重连的TCP客户端
主要是借助了状态机来实现断线重连。原创 2024-09-04 22:01:40 · 196 阅读 · 0 评论 -
Linux--网络指令UDP,TCPwindows连接服务器
用来检测网络连通性的。比如ping 百度的官网这个指令执行后默认是不会停下来的,我们可以加入 -c + 数字选项,表示要ping几次比如ping两次。原创 2024-09-02 21:19:30 · 1381 阅读 · 0 评论 -
多路转接-epoll/Reactor(2)
上次说到了poll,它存在效率问题,因此出现了改进的poll----epoll。目前epoll是公认的效率最高的多路转接的方案。原创 2024-04-06 01:08:44 · 1027 阅读 · 0 评论 -
网络编程-序列化和反序列化/应用层协议/
今天我们自定义的协议只能处理整形,而现实生活中还有浮点数的计算,或者超大数字的运算,那么此时一份协议肯定就不够用了,这里也可以设计三份协议,然后在报头中添加该计算要使用哪种协议。虽然今后我们在工作中,很少会自己自定义协议,设计序列化和反序列化,大多数都用现成的,但是我们必须要做过一次,心里有底才行。原创 2024-02-05 00:49:59 · 1030 阅读 · 0 评论 -
传输层/UDP/TCP协议
TCP/IP协议用“源IP”,“源端口号”,“目的IP”,“目的端口号”,“协议号”,这样一个五元组来标识一个通信(可以用netstat -n来查看)。原创 2024-03-16 20:07:19 · 1686 阅读 · 0 评论 -
高级IO/多路转接-select/poll(1)
1.阻塞IO:也是最常见的IO模型,在内核数据准备好之前,系统调用一直会阻塞式的等待。所有的套接字,默认都是阻塞方式。2.非阻塞IO:如果内核数据尚未准备好,那么系统调用会直接返回,返回错误码。非阻塞IO往往需要程序猿通过轮询的方式不断尝试读写文件描述符,对CPU来说是比较大的浪费。3.信号驱动IO:内核数据准备好的时候,使用SIGIO的信号通知应用程序进行IO操作。4.多路转接/复用IO:以阻塞等待的方式,同时等待多个文件描述符的就绪状态。以上的IO都是同步IO。原创 2024-04-03 20:36:21 · 1241 阅读 · 0 评论 -
网络层/数据链路层/其他协议/ARP/NAT
我们之前详谈过TCP协议,TCP协议主要是提供一种可靠的传输策略,但是并不能直接将报文发送给对方主机,而IP协议的本质就是提供一种将数据跨网络从A主机送到B主机的能力,而用户需要的是一种将数据 可靠的 跨网络从A主机送到B主机的能力。网络是划分了很多很多的子网的,子网之间通过路由器连接。将数据跨网络从C主机发送到D主机,首先得先找到目标主机的子网,然后才能找到目标主机。因此ip地址 = 目标网络 + 目标主机这样设计的方式可以大幅提高查找目标主机时排除其他主机的效率。原创 2024-03-28 19:42:29 · 723 阅读 · 0 评论 -
进程间通信
3.这个资源一般是由操作系统提供的,如果是由其中一个进程提供的,那么就会破坏进程之间的独立性。1.首先进程间通信的本质就是,必须让不同的进程看到同一份“资源”。进程间通信是有标准的, systeam V和posix。4.我们访问这个空间,本质就是访问操作系统。2.这个 资源 是有特定形式的内存空间。原创 2023-11-14 12:50:51 · 73 阅读 · 0 评论 -
动态库和静态库
静态库的后缀是a,动态库的后缀是so。原创 2023-11-09 14:42:35 · 72 阅读 · 0 评论 -
Linux进程信号
signal()第一个参数就是我们需要修改的几号信号,第一个参数的类型是一个函数指针,我们需要传我们要替换的函数。比如,之前那个死循环的进程,我们想让它收到2号信号后,不终止自己,我们可以对这个进程对于2号信号的动作进行自定义。// exit(1);int main()//进行自定义操作while(1)\n");sleep(1);这样当这个进程再死循环时,我们无法再使用ctrl+c(2号信号)的方式来终止这个进程了。我们可以用ctrl+z的方式来终止这个进程(19号信号)。原创 2023-11-24 20:44:12 · 76 阅读 · 0 评论 -
linux网络编程套接字编程基础,tcp和udp
这里对两种协议只是一个简单的直观的认识,后续还会有细节。其中需要注意的是这个可靠传输,这其实是一个中性词,不分褒贬。就如同化学里的惰性气体一样,虽然叫做惰性,但是并不是贬义而是它的特性。这里的可靠传输也是如此。可靠传输就是对传入的数据不仅传过去了,还要根据接收方的反馈来检测这个数据是否在传输的过程中出现丢包,乱序等错误,并且在等待反馈的过程中,这个报头的信息就一直维护在传输层。而不可靠传输就是直接把数据丢过去,是死是活都不管了,没有了检测,速度自然也就快很多。原创 2024-02-02 00:33:15 · 958 阅读 · 0 评论 -
Https协议
数字指纹(数据摘要),其基本原理是利⽤单向散列函数(Hash函数)对信息进⾏运算,⽣成⼀串固定⻓度 的数字摘要。数字指纹并不是⼀种加密机制,但可以⽤来判断数据有没有被窜改。摘要常⻅算法:有MD5、SHA1、SHA256、SHA512等,算法把⽆限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率⾮常低)摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常⽤来进⾏数据对⽐。原创 2024-03-02 17:21:11 · 947 阅读 · 0 评论 -
计算机网络基础1
经历过操作系统部分的拷打后,终于来到了计算机网络部分。网络虽然我们每天都在用,但是或许是因为太过于常见,而导致使用起来觉得很理所当然,深究其原理却又摸不着头脑,笔者从今天开始记录在学习计算机网络的过程中,一些重要的知识笔记和代码。尽可能有条理的分享我学到的知识。原创 2024-01-25 03:57:05 · 871 阅读 · 0 评论 -
进程间通信2(共享内存)
共享内存区是最快的IPC形式。相比管道,进程之间用共享内存进行通信的速度非常快,因为这样通信是没有拷贝的。原创 2023-11-21 20:21:23 · 73 阅读 · 0 评论 -
计算机网络基础2/http协议
是一个在Linux中使用的命令,它利用netstat工具来显示网络状态信息。-n-l-t-p综合起来,命令会显示系统上所有正在监听TCP端口的数字地址,以及与这些端口相关联的进程ID和进程名。这个命令在诊断网络问题、查看系统开放的端口以及确定哪些进程正在使用这些端口时非常有用。原创 2024-02-28 14:49:51 · 923 阅读 · 0 评论 -
Linux线程/同步与互斥/锁/悲观锁/乐观锁/读写锁/简单线程池/生产者消费者模型/单例模式饿汉方式懒汉方式
1.进程是资源分配的基本单位。2.线程是调度的基本单位。3.线程也有自己的一部分数据:线程ID,栈,一组寄存器(线程的上下文),errno,信号屏蔽字,调度优先级。其中最重要的就是线程有独立的栈和上下文。除了数据和代码,线程还共享以下进程资源和环境:文件描述符表,每种信号的处理方式,当前工作目录,用户id和组id。原创 2023-12-05 01:40:11 · 1020 阅读 · 0 评论 -
进程创建与控制
当我们父进程创建完子进程后,页表中的内容会全部拷贝一份,但是父进程的页表中的物理地址的权限无论是读还是写,当拷贝进子进程的页表中后,都会变成只读权限。一般来说,当我们进行不被允许的权限操作时,操作系统会直接拦截,但是对于子进程要修改时,操作系统会先判断,然后再新分配一块内存空间给子进程进行重新映射,然后权限改为可读可写,这就是写时拷贝。当我们执行fork()后,就会在内核空间帮我们申请内存,来创建子进程。我们知道fork()可以用来创建子进程。原创 2023-10-20 19:42:11 · 104 阅读 · 0 评论 -
文件的软硬链接
所以软链接其实就是一个快捷方式,它也是一个独立的文件,它有自己的inode属性和数据块,只是数据块里面存的是指向这个文件的路径。而硬链接它是一个文件的别名,它没有自己的inode,所以它不是一个独立的文件,每取一次别名,它inode里面的引用计数就会++,当减少到0时,这个文件才会被删除。原创 2023-11-07 20:03:23 · 45 阅读 · 0 评论 -
linux磁盘和文件系统
理解文件系统,首先要了解硬件,这里说的是磁盘。磁盘属于外设,跟内存不同,磁盘是永久性储存介质,即便它断电后,数据任然存在。虽然近几年我们的电脑在硬盘上已经固态革新了,因为固态硬盘访问速度快,而且不像磁盘那样容易出现故障,所以现在我们的电脑上几乎都是固态硬盘。那么磁盘也就是机械硬盘会被淘汰吗?答案是并不会,或者说很难会被淘汰。虽然我们现在都是用固态硬盘,但是磁盘相同成本下容量大的这一优点非常适合用来做企业的服务器段的存储设备。原创 2023-11-06 11:06:34 · 84 阅读 · 0 评论 -
进程地址空间
我们知道一个进程=内核数据结构+代码和数据。以前我们对内核数据结构了解不是很多,但是这个内核数据结构其实就是task_struct+mm_struct+页表组成的。其中task_struct就是我们熟知的PCB结构,但这次我们要说的是它里面还有一个指针,指向了mm_struct,这个就是内存地址空间。以32位机器来说,它的内存最大值为4GB, 操作系统会对每一个进程画“大饼”,说这4GB都可以用,每次进程需要内存的时候,操作系统也会给与之对应的内存大小,但是操作系统也会根据情况而驳回申请内存的请求。原创 2023-10-20 16:46:53 · 45 阅读 · 0 评论 -
Linux文件fd
文件都是由进程打开的。在Linux下,一切皆为文件。原创 2023-10-31 14:44:02 · 77 阅读 · 0 评论 -
Linux的进程和环境变量简单梳理
首先要描述进程,当我们写的代码经过编译成为二进制文件在内存成为进程前,首先cpu会生成一个进程控制块——PCB来描述这个进程的信息,它里面包含了进程编号,进程状态,优先级等很多信息,它还会有一个指针来指向我们写的二进制文件,方便执行的时候能找到它。这是两个独立二点进程,但是子进程是由父进程创建的。注意的是,父进程和子进程相互独立,分别有各自的PCB,它们共享代码,但是父进程的数据不会共享,子进程则采用写时拷贝的方式拷贝数据,以此来达到两个进程互不影响。原创 2023-08-29 16:14:29 · 121 阅读 · 1 评论 -
新手在linux下写代码(vim,gcc和git)
在linux下gcc和g++用起来几乎一样,所以会gcc也就会g++了。原创 2023-08-30 02:41:05 · 700 阅读 · 1 评论