Linux网络编程
文章平均质量分 96
Linux网络编程
LuckyRich1
一个正在努力学习的小菜鸡
展开
-
【Linux网络编程】IO多种转接之Reactor
基于上一篇epoll的学习,现在我们也知道epoll的工作模式有两种,一种默认LT工作模式,另一种是ET模式。关于epoll的LT工作模式我们已经写过了。接下来我们写一份基于ET模式下的Reator,处理所有的IO。Reactor = 如何正确的处理IO+协议定制+业务逻辑处理下面我们写一个简洁版的Reactor,它是一个半同步半异步IO,具体它什么原理,怎么做的,有什么特征。我们在代码层面上解开它的面纱。代码写完总结就理解了。并且在这么彻底解决读,写的问题!原创 2024-05-23 09:28:40 · 1881 阅读 · 59 评论 -
【Linux网络编程】IO多路转接之epoll
无论select还是poll都只有一个接口,就叫做select和poll,而epoll要正常工作起来要三个系统调用。但无论epoll有多少系统调用,epoll核心工作只有一个,就是想办法我们进行等!IO = 等 + 数据拷贝,epoll只负责等!epoll有三个系统调用接口虽然多但是写起代码很简单,并且epoll比select和poll都高效,为什么这么说呢,我们了解epoll实现原理就知道了。原创 2024-05-21 09:42:02 · 532 阅读 · 35 评论 -
【Linux网络编程】IO多路转接之poll
poll也是一种linux中多路转接的方案。它所对应的多路转接方案主要是解决select两个问题。select的文件描述符有上限的问题,select每次都要重新设置关心的fd*。当我们把接口学习完就知道poll是如何接究select的两个问题。把poll代码写完也会发现poll比select写着更简单一些。但是poll还是有个问题。就是要遍历的问题。这个问题放到epoll中解决。原创 2024-05-15 16:25:57 · 632 阅读 · 66 评论 -
【Linux网络编程】I/O多路转接之select
我们曾经说过 IO = 等 +数据拷贝。select是多路转接的一种,它只负责等待,可以一次等待多次fd,更为重要的是select本身没有数据拷贝的能力,拷贝要read、write来完成。系统提供select函数来实现多路复用输入/输出模型。关于select接口我们有很多疑问,它怎么做到一次等待多个fd,如果关心fd的读、写、异常,然后又如何通知我们的等。接口学完,我们编写select服务器,进一步掌握它里面各种细节。原创 2024-05-11 10:00:14 · 1243 阅读 · 62 评论 -
【Linux网络编程】高级IO——五种IO模型
什么是IO呢?在冯诺依曼体系角度我们知道从外设把数据搬到内存这不就是Input吗,把数据从内存拷贝到外设中这不就是output吗。这不就是传说中的IO吗。没错,但是这种理解还不够深刻!那什么是高效IO呢?解决上面问题,我们在学习五种IO模型,五种IO模型那一种最高效?以及非阻塞IO的编写原创 2024-05-07 10:45:58 · 1726 阅读 · 85 评论 -
【Linux网络编程】DNS、ICMP、NAT技术、代理服务器+网络通信各层协议总结
前面文章已经把网络通信用到的主要协议都说过了,这篇文章是网络通信整个拓扑结构细节的的补充,其中我们重点就是在NAT技术、代理服务器,NAT在IP我们简单了解直到它在路由器上是做源IP和WAN口IP的转换,那发出现的问题解决了,服务器给响应如何返回呢?经过学习我们直到服务器给我们维护了一张NAT转换表,这个表是KV结构,IP+port一起保证了从左到右,从右到左转换的唯一性,因此就可以正确返回主机。代理服务器看着和NAT类似,其实它们不是一个东西,代理服务器分正向代理和反向代理。最后总结整个网络通信协议。原创 2024-05-01 10:07:24 · 1436 阅读 · 135 评论 -
【Linux网络编程】IP协议
本篇文章我们深刻理解I网络层IP协议的相关知识,从IP协议报头格式我们发现和TCP协议报头相似,学习一个协议首先还是先考虑如何将报头和有效载荷分开,如何向上交付。这些都可以从IP报头协议中了解,接下来学习网络划分,网络划分是什么?为什么要网络划分,网络划分怎么做?子网掩码有什么用。了解路由器功能,1.转发 、2.DHCP | 组建局域网 3、NAT。然后我们学习私有IP和公网IP。结合前面知识画一个图对网络拓扑有一个深刻的认识。接着我们学习路由器是如何路由的,最后根据IP报头剩下的字段学习IP分片和组装!原创 2024-04-23 09:40:43 · 1242 阅读 · 71 评论 -
【Linux网络编程】数据链路层
这篇文章是整个网络通信的最后一层数据链路层,我们主要学习MAC帧,虽然IP具有将数据跨网络送到目标主机的能力,但是在跨网络送之前是如何解决同一个局域网内送到下一跳路由器呢?我们要了解局域网通信的原理,以及通信的细节问题。还要站在上帝视角我们知道下一跳路由器的MAC地址,但是在网络中一台主机是如何知道路由器的MAC地址呢?所以这需要一个过程,从而引出ARP协议。学完这些我们把之前学到的所有协议结合起来拉通整个网络通信的过程!从而数据跨网络转发有非常清晰的认识!原创 2024-04-27 10:06:31 · 2251 阅读 · 113 评论 -
【Linux网络编程】TCP协议
TCP协议难学、TCP协议细节复杂,别怕学完这一篇文章保证解决你对TCP协议的所有问题!!!首先重点理解TCP报头各个字段知道是干嘛的有什么用。tcp不是可靠的吗,那客户端给服务器发信息怎么确保对方收到了呢?对方必须给我确认我才知道我发的信息对方收到了,然后我们了解tcp的工作模式。万一客户端发的信息对方真没收到怎么办也不给我响应或者响应丢了怎么办?超时重传!但tcp双方通信之前必须建立连接?如何理解连接,如何理解三次挥手,四次握手。什么是流量控制有什么用?滑动窗口是干什么的?重点学习设计特别优雅的拥塞控制原创 2024-04-15 09:32:52 · 1236 阅读 · 84 评论 -
【Linux网络编程】UDP协议
本篇文章我们首先再谈端口号,学习两个命令。然后我学习UDP协议,不管我们未来学习什么协议都必须先解决两个问题,如何封装解包,如何分用,我们带着问题请学习。重点我们放在报头到底什么,报头其实是一种协议,Linux内核是由C语言写的,协议是一个结构化的数据,所以报头其实是结构化数据对象,然后我们以伪代码角度学习解包和封装的过程,如何分用呢?是由目的端口号决定的。UDP面向数据报,TCP是面向字节流的,那到底是什么意思呢?还有缓冲区问题,最后UDP使用注意事项!原创 2024-04-12 10:00:07 · 1165 阅读 · 42 评论 -
【Linux网络编程】HTTPS协议
本文主要介绍应用层https的协议,https是在http到传输层之间加了一层加密层,http协议信息在网络中是明文传送的容易被中间人监听和篡改,所以需要https协议,因为协议有对应的端口所以双方知道对方用的什么协议,有了https信息在两端是明文,在网络中传输是密文,那https是如何实现的呢?我们先了解对称密钥,非对称密钥、数据摘要,数字签名,然后我们在依次递进学习5种方案,前四种方案每种都有问题,最后我们结合前四种方案+证书,终于解决https安全通信的问题!原创 2024-04-08 10:13:41 · 1649 阅读 · 64 评论 -
【Linux网络编程】HTTP协议
本篇文章主要是介绍http协议,首先从宏观角度认识http协议请求和响应的结构,http协议请求和响应如何拿到完整的报文呢?序列化和反序列化怎么做?我们以写代码的方式具体认识http协议的基本工作流程加深对它的理解,代码写完我们在看http协议的报头、状态码、方法等等才更容易一些,然后我们在学习长连接,和session会话保持,最后我们在介绍两个学习http的工具。原创 2024-04-06 10:04:54 · 1500 阅读 · 63 评论 -
【Linux网络编程】自定义协议+序列化+反序列化
本篇博客主要是对自定义协议、序列化、反序列化的学习,在前面我们只是从父亲儿子打电话的例子感性认识协议是一个约定。今天从网络版计算器的代码学习协议,序列化和反序列化如何编写,不过对于序列化和反序列化我们还有现成的,这里我们主要学习Json的使用,以后再也不用自己序列化和反序列化了,但是并没有说不能自定义协议。没有人规定我们网络通信的时候,只能有一种协议!!那如何让系统知道用的是那种协议呢?原创 2024-04-02 10:32:49 · 1798 阅读 · 70 评论 -
【Linux网络编程】网络编程套接字二
本篇文章,主要用于介绍TCP客户端和服务端的写法,其中我们做了一个日志函数的设计,日志函数中我们多可变参数列表进行使用并且把日志信息可以打印到文件中。TCP服务端我们写了5个版本,第一版本主要细说客户端服务端的写法但是服务器只能为单客户端服务,服务器应该有能力为多客户端服务,因此有了第二版本多进程,第三版本多进程+信号,第四版本多线程,第五版本线程池。但是真实的服务器终端推出了它也一直在运行,因此我们把服务器进程改成了守护进程,这样符合了真实服务器的写法!最后我们对TCP通信过程做一个感性的认识。原创 2024-03-29 09:52:43 · 2350 阅读 · 114 评论 -
【Linux网络编程】网络编程套接字一
本篇博客首先对IP地址、端口号、 TCP协议、UDP协议、网络字节序等网络编程中的基本概念的学习,其中着重介绍了端口号,一台主机有很多进程,如何知道从一台主机的某一进程发送的消息就是给另一台主机对应的进程的? 知道了网络通信的本质就是进程间的通信!以及为什么要有端口号?然后学习socket api的基本用法,能够实现一个简单的udp客户端/服务器,并且对udpp客户端和服务端做了三个设计,最后实现windows客户端和linux服务端之间的交汇。原创 2024-03-25 09:59:47 · 1743 阅读 · 58 评论 -
【Linux网络编程】网络基础一
本篇博文重点 : 1. 了解网络发展背景, 对局域网/广域网的概念有基本认识; 2.了解网络协议的意义, 重点理解TCP/IP五层结构模型; 3. 学习网络传输的基本流程, 理解封装和分用;原创 2024-03-20 09:39:04 · 1494 阅读 · 69 评论