
Linux网络编程
程序员子涵
交个朋友 wx: CXYzihan (注明来意)
分享编程中的遇到的坑,成长爬坑记录,这里有三板斧,王婆本人切瓜,包甜,让你在编程路上不迷路!
一个专注于鸿蒙OpenHarmony c/c++/Linux程序员情怀 走向全栈 最终归属于架构.
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
为什么需要序列化总结
此处大纲: 1、什么叫序列化 2、为什么需要序列化 3、序列化过程 4、序列化的实现 5、JavaBean被序列化的内容 ...转载 2020-02-16 14:48:08 · 934 阅读 · 0 评论 -
序列化和反序列化的底层实现原理是什么?
序列化和反序列化作为Java里一个较为基础的知识点,大家心里也有那么几句要说的,但我相信很多小伙伴掌握的也就是那么几句而已,如果再深究...转载 2020-02-16 14:46:16 · 376 阅读 · 0 评论 -
tcp长连接、心跳包
长连接TCP经过三次握手建立连接,长连接是指不管有无数据包的发送都长期保持建立的连接;有长连接自然也有短连接,短连接是指双方有数据发送时,就建立连接,发送几次请求后,就主动或者被动断开连接。心跳心跳是用来检测一个系统是否存活或者网络链路是否通畅的一种方式,做法是定时向被检测系统发送心跳包,被检测系统收到心跳包进行回复,收到回复说明对方存活。心跳能够给长连接提供保活功能,能够检测长连接是否正...转载 2020-02-11 04:41:02 · 1542 阅读 · 0 评论 -
心跳包
如何发送TCP空帧的心跳包,它的格式是什么?最好用c语言实现,因为我是在ARM上实现tcp协议。一字节对齐struct heartbeat_req{short reqNum;}struct heartbeat_rcv{short reqNum;}你所有的包都有一个公用的报文头吧,报文头里面定义一个字段记录请求类型,一个字段记录数据部分长度,要空帧的心跳包就发一个没数据部分的报文头...翻译 2020-02-11 04:39:41 · 347 阅读 · 0 评论 -
网络传输数据格式的选择
1.什么是序列化和反序列化?(1)序列化就是把Java对象转化为字节流序列(二进制串)的过程(2)反序列化就是把字节流(二进制串)恢复为Java/C++ 对象的过程2.为什么要进行序列化我们知道,当两个进程需要通信的时候,可以发送各种类型的数据,包括文字、图片、音频和视频,但是这些数据都是以二进制的形式在网络上传输。所以当两个Java进程进行通信的时候,如何实现进程间对象的传送呢。这就需要...转载 2020-02-10 10:56:47 · 2367 阅读 · 0 评论 -
我读过的最好的epoll讲解--转自”知乎“
首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象。不管是文件,还是套接字,还是管道,我们都可以把他们看作流。之后我们来讨论I/O的操作,通过read,我们可以从流中读入数据;通过write,我们可以往流写入数据。现在假定一个情形,我们需要从流中读数据,但是流中还没有数据,(典型的例子为,客户端要从socket读如数据,但是服务器还没有把数据传回...转载 2020-02-10 09:02:18 · 164 阅读 · 0 评论 -
网络编程释疑之:同步,异步,阻塞,非阻塞
一讲到网络编程的I/O模型,总会涉及到这几个概念。问了很多人,没几个能清晰地讲出他们之间的区别联系,甚至在网络上也有很多不同的观点,也不知是中国文字释义的博大精深,还是本来这几个概念就是绕人不倦。今天我也来给大家讲解一下我对这几个概念的理解。既然网络上众说纷纭,不如找个权威参考一下,这个权威就是《UNIX网络编程:卷一》第六章——I/O复用。书中向我们提及了5种类UNIX下可用的I/O模型:...转载 2020-02-10 07:43:15 · 155 阅读 · 0 评论 -
嵌入式Linux系统:基础知识_网络通信原理
2.1 互联网的本质就是一系列的网络协议一台硬设有了操作系统,然后装上软件你就可以正常使用了,然而你也只能自己使用像这样,每个人都拥有一台自己的机器,然而彼此孤立。如何能大家一起玩耍然而internet为何物?其实两台计算机之间通信与两个人打电话之间通信的原理是一样的(中国有很多地区,不同的地区...转载 2020-02-01 17:14:37 · 917 阅读 · 0 评论 -
七层协议和四层协议
OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最主要的功能就是帮助不同类型的主机实现数据传输 。完成中继功能的节点通常称为中继系统。一个设备工作在哪一层,关键看它工作时利用哪一层的数据头部信息。网桥工作时,是以MAC头部来决定转发端口的,因此显然它是数据链路层的设备。具体说:物理层:网卡,网线,...转载 2020-01-30 15:42:04 · 765 阅读 · 0 评论 -
传输层协议(TCP, UDP)
简介传输层定义了主机应用程序之间端到端的连通性。传输层中最为常见的两个协议分别是传输控制协议TCP(Transmission Control Protocol)和用户数据报协议UDP(User Datagram Protocol)。为了简化问题说明,本课程以Telnet为例描述相关技术。设备支持通过Telnet协议和Stelnet协议登录。使用Telnet,Stelnet v1协议存在安全风险...转载 2020-01-30 15:34:35 · 1565 阅读 · 0 评论 -
UDP中一个包的大小最大能多大
点评因为UDP数据传输的无连接特性,最简单的UDP数据传输就是一次数据交互一个UDP包搞定,这样就不用管分包问题(因为不像TCP,UDP传输时如果分包则是不能保证顺序的,这会带来很多问题)。所以你一次交互的数据如果太多的话,用UDP实现就很可能并不优雅。(移动端即时通讯/IM 学习和讨论QQ群:http://www.52im.net/portal.php?mod=topic&top...转载 2020-01-30 14:55:42 · 3188 阅读 · 0 评论 -
常见限流方法总结
前言限流的原因就不多说了,一句话,为了防止服务被高QPS打垮。在听组内分享A服务的时候,看到大家讨论限流的策略,其中说到令牌桶,又说到了漏桶,之前只了解令牌桶的思想,漏桶没有怎么了解过,趁着这次把限流方法总结下,并且把实现细节一并了解,算是一个小的学习。本次主要说的限流方法包括简单限流、漏桶、令牌桶。简单限流说下我们限流的思路,请求的速度我们这里主要是以每秒处理请求数量QPS为准,所谓限流就是我的...转载 2020-01-29 23:16:04 · 1782 阅读 · 0 评论 -
Linux IO模式及 select、poll、epoll详解
注:本文是对众多博客的学习和总结,可能存在理解错误。请带着怀疑的眼光,同时如果有错误希望能指出。同步 IO 和异步 IO,阻塞 IO 和非阻塞 IO 分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的。所以先限定一下本文的上下文。本文讨论的背景是 Linux 环境下的 network IO。一 概念说明在进行解释之前,首先要说明几个概念:用户空间和内核空间...转载 2020-01-29 22:47:17 · 317 阅读 · 0 评论 -
Linux高性能服务器设计
C10K和C10M计算机领域的很多技术都是需求推动的,上世纪90年代,由于互联网的飞速发展,网络服务器无法支撑快速增长的用户规模。1999年,Dan Kegel提出了著名的C10问题:一台服务器上同时处理10000个客户网络连接。10000个网络连接并不会发送请求到服务器,有些连接并不活跃,同一时刻,只有极少的部分连接发送请求。不同的服务类型,每个连接发送请求的频率也不相同,游戏服务器的连接会频繁...转载 2020-01-29 20:08:53 · 497 阅读 · 0 评论 -
不为人知的UDP:深入地理解UDP协议并用好它
UDP的疑难杂症UDP的传输方式:面向报文面向报文的传输方式决定了 UDP 的数据发送方式是一份一份的,也就是应用层交给 UDP 多长的报文,UDP 就照样发送,即一次发送一个报文。那么UDP的报文大小由哪些影响因素呢? UDP 数据包的理论长度是多少,合适的 UDP 数据包应该是多少呢?(1) UDP 报文大小的影响因素,主要有以下3个:[1] UDP协议本身,UDP协议中有16位...转载 2020-01-29 20:03:10 · 683 阅读 · 0 评论 -
高性能IO设计的Reactor和Proactor模式
在高性能的I/O设计中,有两个比较著名的模式Reactor和Proactor模式,其中Reactor模式用于同步I/O,而Proactor运用于异步I/O操作。 ...转载 2020-01-25 08:25:32 · 217 阅读 · 0 评论 -
TCP和UDP的区别(Socket)
TCP和UDP的区别(Socket) TCP和UDP区别TCP和UDP编程区别TCP编程的服务器端一般步骤是: 1、创建一个socket,用函数socket(); 2、设置socket属性,用函数setsockopt(); * 可选 3...转载 2020-01-21 09:40:17 · 2068 阅读 · 0 评论 -
TCP流量控制和拥塞控制
流量控制和拥塞控制的针对对象不同流量控制是TCP连接的两端通过协商窗口值来控制,是网络中两个链接的点对点通信的对象,拥塞控制是是控制数据流量过多导致网络拥塞,控制的对象是整个网络的通信,拥塞控制的算法为:即慢开始(Slow-start),拥塞避免(Congestion Avoidance)快重传(Fast Restrangsmit)和快回复(Fast Recovery)接收端窗口(Reciv...转载 2020-01-22 02:28:09 · 326 阅读 · 0 评论 -
reactor和proactor模式
首先就第一篇《Reactor模式,或者叫反应器模式》做一下笔记:刚开店做生意,老板为了给顾客一个美好的印象,给顾客最好的服务,一对一:随着经营的生意越来越好,顾客多了,不能服务员也多吧,那样得支出的成本也太大了,要是一下子来个1000个顾客,难道老板还得养活1000个服务员,没办法,得改变这种服务模式,但又不能让顾客感到这里的服务下降了,怎么办呢?改革以后,有没有觉得和我们平时去大...转载 2020-01-22 02:35:34 · 3489 阅读 · 4 评论 -
io复用技术
同步和异步:同步和异步的主要却别在于用户线程和内核的交互方式同步:用户线程发起IO请求,会一直等待或者不断的轮询内核IO操作,指导IO操作完成,用户线程才可以继续执行异步:用户线程发起IO请求后会立即返回,转而去执行其他的操作,当内核完成IO操作后,会通过回调的方式通知用户,用户线程此时在回来继续执行接下来的操作阻塞和非阻塞:阻塞和非阻塞的区别在于用户线程对内核IO操作的方式阻塞:IO操作必须完成...转载 2020-01-22 02:36:24 · 517 阅读 · 0 评论 -
高效并发模式,半同步半异步和领导者追随者
半同步半异步其实半同步半异步的一种变体,其中一个异步线程,充当主线程,用来监听IO事件或者链接请求,当有链接请求到来或者IO事件到来时,可以该异步线程负责将该就绪socket放入到请求队列中,根据算法或者事件来选择一个工作线程来处理该socket事件半同步半反应堆:其和半同步和半异步的唯一却别就是,工作线程的选择,半同步半异步是根据算法和时间来选择由那个工作线程负责处理到达请求队列的socket事...转载 2020-01-22 02:29:18 · 188 阅读 · 0 评论 -
Rector模式和同步IO模拟Reactor模式,proactor模式和异步IO模拟proactor模式
Reactor模式本身就是一种同步IO模式Reactor模式的流程如下:1、应用程序注册socket的读写就绪事件,和事件处理器2、事件分类器等待读写就绪事件3、当事件分离器监听到读写就绪事件后。会调用注册的事件处理器。4、事件处理器首先会执行IO读写操作,然后将数据根据读取的内容进行进一步的处理使用同步IO来模拟Reactor模式的流程如下:1、主线程首先将socket的读就绪事件注册到epol...转载 2020-01-22 02:22:11 · 1700 阅读 · 2 评论 -
Reactor模式,或者叫反应器模式
阅读更多 Reactor这个词译成汉语还真没有什么合适的,很多地方叫反应器模式,但更多好像就直接叫reactor模式了,其实我觉着叫应答者模式更好理解一些。通过了解,这个模式更像一个侍卫,一直在等待你的召唤,或者叫召唤兽。 并发系统常使用reactor模式,代替常用的多线程的处理方式,节省系统的资源,提高系统的吞吐量。 先用比较...转载 2020-01-22 02:22:59 · 176 阅读 · 0 评论 -
reactor和proactor模式
首先分享一下,我在网上看到的两篇不错的文章:正是这两篇文章才理解了reactor和proactor模式; Reactor模式,或者叫反应器模式高性能IO设计的Reactor和Proactor模式 首先就第一篇《Reactor模式,或者叫反应器模式》做一下笔记: 刚开店做生意,老板为了给顾客一个美好的印象,给顾客最好的服务,一对一: 随着...转载 2020-01-25 08:16:12 · 197 阅读 · 0 评论 -
reactor和proactor模式
首先分享一下,我在网上看到的两篇不错的文章:正是这两篇文章才理解了reactor和proactor模式; Reactor模式,或者叫反应器模式高性能IO设计的Reactor和Proactor模式 首先就第一篇《Reactor模式,或者叫反应器模式》做一下笔记: 刚开店做生意,老板为了给顾客一个美好的印象,给顾客最好的服务,一对一: 随着...转载 2020-01-25 08:16:30 · 253 阅读 · 0 评论 -
Linux I/O复用 —— epoll 部分源码剖析
epoll 相关的系统调用有以下三个,这里简述下当调用对应函数后,内核的具体实现epoll_creat( )1. 在内核注册文件系统 eventpollfs,挂载此文件系统(linux一切皆文件,便于处理)若返回指针,指针如果出错则无法判断,而 fd 可以通过 current -> files -> fd_array[] 找到其真伪epoll_creat 为什么返回一个 fd...转载 2020-01-25 08:33:30 · 185 阅读 · 0 评论 -
Cookie 原理说明
在这篇文章中:什么是 Cookie?Cookie 的工作原理Cookie 的生命周期Cookie 管理服务器端创建 Cookie客户端读取 Cookie什么是 Cookie?HTTP 协议是无状态的,也就是说客户端和服务器端不需要建立持久的连接。由于客户端和服务器端的连接是基于一种请求应答模式,即客户端和服务器建立一个连接-客户端提交一个请求-服务器端收到请求后返回一个响应,然...转载 2020-01-25 08:30:59 · 223 阅读 · 0 评论 -
Epoll在LT和ET模式下的读写方式
在一个非阻塞的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK)从字面上看, 意思是:EAGAIN: 再试一次,EWOULDBLOCK: 如果这是一个阻塞socket, 操作将被block,perror输出: Resource temporarily unavailable总结:这个错误表示资源暂时不够,能...转载 2020-01-22 02:33:49 · 100 阅读 · 0 评论 -
两种IO模式:Proactor与Reactor模式
在高性能的I/O设计中,有两个比较著名的模式Reactor和Proactor模式,其中Reactor模式用于同步I/O,而Proactor运用于异步I/O操作。在比较这两个模式之前,我们首先的搞明白几个概念,什么是阻塞和非阻塞,什么是同步和异步同步和异步是针对应用程序和内核的交互而言的,同步指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪,而异步是指用户进程触发IO操作以...转载 2020-01-22 02:24:21 · 243 阅读 · 0 评论 -
多线程处理的几种模式—Proactor和Reactor
多线程处理的几种模式—Proactor和ReactorProactor和Reactor都是并发编程中的设计模式。他们都是用于派发/分离IO操作事件的。所谓的IO事件也就是诸如read/write的IO操作。"派发/分离"就是将单独的IO事件通知到上层模块。两个模式不同的地方在于,Proactor用于异步IO,而Reactor用于同步IO。Two patterns that involve e...转载 2020-01-22 02:25:41 · 315 阅读 · 0 评论 -
Linux I/O复用 --- epoll部分源码剖析
epoll_creat( )在内核注册文件系统eventpollfs,挂载此文件系统/*linux一切皆文件,便于处理若返回指针,指针如果出错则无法判断,而fd可以通过current -> files -> fd_array[ ]找到其真伪epoll_creat为什么返回一个fd?因为它对应的就是这个文件系统中创建的新文件*/创建两个内核cache(频繁分配小块内...转载 2020-01-22 14:12:40 · 204 阅读 · 0 评论 -
漫画:什么是协程?
————— 第二天 —————————————————什么是进程和线程有一定基础的小伙伴们肯定都知道进程和线程。 进程是什么呢?直白地讲,进程就是应用程序的启动实例。比如我们运行一个游戏,打开一个软件,就是开启了一个进程。进程拥有代码和打开的文件资源、数据资源、独立的内存空间。 线程又是什么呢?线程从属于进程,是程序的实际执行者。一个进程至少包含一个主线程,...转载 2020-01-25 08:29:40 · 236 阅读 · 1 评论