
Linux
文章平均质量分 93
Linux系统编程到网络编程
初次见面我叫泰隆
这个作者很懒,什么都没留下…
展开
-
NAT、代理服务、内网穿透
对原始报文中的源IP地址进行替换,替换成途径路由器的WAN口IP的过程,我们称之为NAT(Network Address Translation)网络地址转换。只要发出去消息,出入口路由器NAPT一旦构建,就相当于在各自的路由器打了一个洞,可以让外部通过这个洞口进来,这就叫做内网打洞。很显然,服务器端打印的IP地址和我们的内网IP地址是不一样的。学校里的主机就好像远程访问到了家里的这台主机,这种技术我们称为内网穿透。你的主机访问云服务器,服务器上打印出来的IP地址并不是你的内网IP。原创 2025-04-17 08:48:18 · 509 阅读 · 0 评论 -
数据链路层
现在发送数据,在网络层通过目标IP进行路由,查找路由表,找到下一跳或者缺省路由,获取下一跳IP地址,而下一跳和当前主机一定在同一个子网中,当前主机发起ARP请求获取下一跳的MAC地址,然后就向下交付给数据链路层封装MAC帧,转发给下一个主机。上面的图中就是转发给路由器,然后路由器网卡向上交付给数据链路层,进行解包分用,交付给网络层,根据目的IP继续查找路由表,同样找到下一跳IP地址然后发起ARP获取MAC地址,向下封装就可以继续转发。当数据丢包了,或者某个路由器挂掉了,那么发送方长时间得不到应答,传输层TC原创 2025-04-16 17:21:56 · 440 阅读 · 0 评论 -
网络层IP协议
现在如果陕西省内的一台主机192.168.1.201想要访问www.google.com网站,假设目标IP地址为1.2.3.4,并且假设不存在墙。那么当前主机首先会将目标IP地址与自己的子网掩码255.255.255.0进行按位与,然后跟自己所在的目标网络进行比较,发现不是当前所在的目标网络,该主机也不知道这个IP地址是谁,但是可以肯定的是绝对不在当前子网,所以转发给家用路由器。家用路由器和运营商的出入口路由器在同一个子网中,家用路由器拿着目标IP地址再与WAN口IP的子网掩码进行按位与操作,得到1.2.3原创 2025-04-16 10:14:52 · 729 阅读 · 0 评论 -
HTTPS协议原理
加密就是把明文(要传输的信息)进行一系列变换,生成密文。解密就是把密文再进行一系列变换,还原成明文。在这个加密和解密的过程中,往往需要一个或者多个中间的数据,辅助进行这个过程,这样的数据称为密钥。如图,今天我的明文数据是123456,经过密钥加密后就变成XXXXYYYY的密文。然后密文经过密钥解密同样也可以还原出明文。数字指纹(数据摘要),其基本原理是利用单向散列函数(Hash函数)对信息进行运算,生成一串固定长度的数字摘要。数字指纹并不是一种加密机制,但可以用来判断数据有没有被篡改。原创 2025-04-15 17:38:32 · 919 阅读 · 0 评论 -
应用层协议HTTP
虽然说,应用层协议是程序员自己定的,但是已经有大神定义了一些现成的,可供我们直接使用。HTTP协议——超文本传输协议就是其中之一。在互联网世界中, HTTP(HyperText Transfer Protocol,超文本传输协议)是一个至关重要的协议。它定义了客户端(如浏览器)与服务器之间如何通信,以交换或传输超文本(如 HTML 文档)。HTTP 协议是客户端与服务器之间通信的基础。客户端通过 HTTP 协议向服务器发送请求,服务器收到请求后处理并返回响应。 HTTP 协议是一个无连接、无状态的协议,即每原创 2025-04-15 11:35:32 · 934 阅读 · 0 评论 -
应用层自定义协议与序列化
应用层自定义协议与序列化反序列化。原创 2025-04-06 08:45:53 · 776 阅读 · 0 评论 -
Socket编程TCP
如果不关闭文件,那么fd的值就会一直增加,而fd属于有用的、有限的资源,如果不关闭就会导致fd泄漏问题。另外如果客户端很多的话那fd不是会一直增加吗,如果fd只有32、64那不就不够用了吗?确实如此,Linux是支持对文件描述符个数进行扩展的,默认云服务器的fd数量是比较多的。原创 2025-04-05 09:09:31 · 1138 阅读 · 0 评论 -
Socket编程UDP
首先给出EchoServer目录结构:服务器的类我们实现在UdpServer.hpp中,然后在UdpServerMain.cc中启动服务器。客户端相关代码我们就直接在UdpClientMain.cc中实现了,如果有兴趣后续你可以自己在UdpClient.hpp中封装,常用的部分我们放在Common.hpp中,然后将直接写的策略模式日志拿过来方便测试,最后使用make/makefile来自动化构建项目。1、创建套接字:使用socket创建套接字,第一个参数domain表示域或协议家族,AF_INET表示网原创 2025-04-02 14:30:38 · 878 阅读 · 0 评论 -
网络基础概念
传输层网络层都是对所有协议的统称,传输层有很多协议比如:TCP、UDP,网络层也有很多,那么这么多协议操作系统要不要管理呢?当然要管理,如何管理?——先描述,再组织。所以协议就是结构体。操作系统使用C语言写的,而网络属于操作系统,因此TCP/IP网络也是用C写的。而Windows和Linux操作系统的源代码是不一样的,但是它们网络部分的代码必须是一样的。那么今天windows上有一个协议struct protocol,里面三个整形变量a,b,c。主机A定义了一个数据data赋值10、20、30。原创 2025-03-31 20:14:55 · 926 阅读 · 0 评论 -
Linux线程同步与互斥
线程互斥与同步,以及线程安全问题。原创 2025-03-30 15:06:25 · 374 阅读 · 0 评论 -
Linux线程概念与控制
线程是进程内部的一个执行分支。线程的执行粒度比进程要细。原创 2025-03-27 14:16:09 · 840 阅读 · 0 评论 -
Linux进程信号
信号的发送本质就是给进程的PCB发送,因此进程PCB内部必定要有结构来保存信号。为什么要保存信号?因为进程收到信号之后可能不会立即处理这个信号。那么信号从发送给进程到开始被处理就会存在一个时间窗口,所以需要保存信号。也就是说task_struct里面会有保存信号的结构,实际上这个结构是个位图,如下图:通过位图来管理信号,上图的第一个位置为1,表示的就是进程收到了1号信号。1、比特位的内容是0还是1,表明进程是否收到了信号。2、比特位的位置(第几个),表示信号的编号。原创 2025-03-25 16:17:56 · 612 阅读 · 0 评论 -
Linux进程间通信
介绍进程间通信的方式:管道、共享内存、消息队列、信号量。原创 2025-03-23 12:04:32 · 813 阅读 · 0 评论 -
Linux基础IO(终)——动静态库和进程地址空间
介绍动静态库的制作和使用,如何解决动态库加载问题,进程地址空间。原创 2025-03-21 11:25:47 · 1028 阅读 · 0 评论 -
Linux基础IO(三)——文件系统和软硬链接
介绍磁盘、文件系统、软硬链接的概念。原创 2025-03-19 19:27:56 · 471 阅读 · 0 评论 -
Linux基础IO(二)——重定向和缓冲区
介绍重定向原理和用户级缓冲区。原创 2025-03-19 08:35:14 · 893 阅读 · 0 评论 -
Linux基础IO(一)——接口使用和文件描述符
介绍C语言文件接口和Linux下的系统调用接口,引入文件描述符的概念。原创 2025-03-17 13:50:52 · 815 阅读 · 0 评论 -
Linux进程控制
介绍Linux如何创建进程、终止进程、等待进程、进程程序替换。并基于上述知识实现简易的shell。原创 2025-03-16 19:42:36 · 694 阅读 · 0 评论 -
Linux进程概念
冯诺依曼体系结构,Linux进程的概念、进程状态、进程、进程地址空间介绍。原创 2025-03-15 09:06:24 · 926 阅读 · 0 评论 -
Linux环境基础开发工具使用
介绍linux下基础开发工具的使用,软件包管理器apt,文本编辑器vim,编译器gcc/g++,调试器gdb、make/makefile、进度条小程序。原创 2025-03-11 14:04:56 · 972 阅读 · 0 评论 -
Linux权限理解
Linux权限理解以及如何修改权限,粘滞位介绍。原创 2025-03-09 08:11:49 · 785 阅读 · 0 评论 -
Linux总目录
这里是Linux教学总目录,建议按照顺序观看。原创 2025-03-08 18:00:06 · 335 阅读 · 0 评论 -
Linux常见指令
介绍linux下常见指令的使用。原创 2025-03-08 17:34:34 · 2428 阅读 · 0 评论