Linux网络编程
文章平均质量分 65
alpha_2017
这个作者很懒,什么都没留下…
展开
-
拆解 Linux 网络包发送过程
在开始今天的文章之前,我先来请大家思考几个小问题。问1:我们在查看内核发送数据消耗的 CPU 时,是应该看 sy 还是 si ? 问2:为什么你服务器上的 /proc/softirqs 里 NET_RX 要比 NET_TX 大的多的多? 问3:发送网络数据的时候都涉及到哪些内存拷贝操作?这些问题虽然在线上经常看到,但我们似乎很少去深究。如果真的能透彻地把这些问题理解到位,我们对性能的掌控能力将会变得更强。带着这三个问题,我们开始今天对 Linux 内核网络发送过程的深度剖析。还是按照我们之前的转载 2021-06-08 07:24:20 · 465 阅读 · 0 评论 -
高并发系统的限流算法
分布式环境下应对高并发保证服务稳定几招,按照个人理解,优先级从高到低分别为缓存、限流、降级、熔断,每招都有它的作用,本文重点就讲讲限流这部分。坦白讲,其实上面的说法也不准确,因为服务降级、熔断本身也是限流的一种,因为它们本质上也是阻断了流量进来,但是本文希望大家可以把限流当做一个单纯的名词来理解,看一下对请求做流控的几种算法及具体实现方式。其实很好理解的一个问题,为什么要限流,自然就流量过大了呗,一个对外服务有很多场景都会流量增大:注意这个"大",1000QPS大吗?5000QPS大吗?10000QP原创 2021-03-09 22:46:30 · 296 阅读 · 0 评论 -
高并发消息队列常用通知机制
常用的通知机制中比较典型的有以下几种:1、signal — zeromq这种机制下,我们向被通知进程发送一个特殊的signal(比如SIGUSR1),这样正在睡眠的读进程就会被信号中断,然后醒来。该方法的优点是:读进程不需要监听一个额外的eventfd,适合一些不方便使用eventfd的场景;另外,用户可以选择是使用实时信号(SIGRTMIN+1),还是使用非实时信号(SIGUSR1)。该方法的缺点是:通知不实时。因为信号的检查只有在中断返回的时候才会进行,这个时间跟操作系统的HZ、jiffie原创 2021-02-17 22:56:04 · 853 阅读 · 0 评论 -
linux创建n个进程的方法 --- fork
服务端通常使用多进程或多线程处理任务1.创建n个进程的方法2.创建n个线程的方法原创 2021-02-10 11:52:09 · 333 阅读 · 1 评论 -
服务端测试工具和性能指标
服务端测试工具和性能指标原创 2021-02-09 17:45:22 · 169 阅读 · 0 评论 -
在libevent中服务模型
1、muduo:one loop per thread,主线程注册listen事件,通过某种负载均衡机制(round robin)将连接的事件注册到子线程的Reactor上muduo还提到了一个runInLoop()的功能:如果用户在当前线程调用,则回调functor会同步进行,如果在其他线程调用,则IO线程会被唤醒执行这个functor。这种跨线程调用是如何实现的?因为其他线程很可能阻塞在Reactor上。传统方法是用pipe , 在muduo里面是 event_fd,将回调放入线程的任务队列,并发送一原创 2021-02-06 21:57:36 · 322 阅读 · 0 评论 -
单台服务器最大支持多少连接数
在性能测试过程中,经常会接触到链接数相关的问题,有一个问题曾经困扰我好长时间,那就是一台服务器最多能支持多少链接数呢?有的朋友可能会说是65535,因为操作系统有65535个端口,那么这个答案准确吗?首先先了解下如何标识一个链接(记住下面的概念,文章后面要用到),操作系统是通过一个四元组来标识一个TCP链接:{本地ip,本地port,远程ip,远程port}这四个要素唯一确定一个TCP链接,任意一个要素不相同,就认为是一个不同的链接。在Linux系统中,一切皆文件,每一个TCP链接都要占转载 2020-09-01 21:50:25 · 5335 阅读 · 0 评论 -
结构化数据传输协议xml、json、protobuf比较
数据交互xml、json、protobuf格式比较1、json: 一般的web项目中,最流行的主要还是json。因为浏览器对于json数据支持非常好,有很多内建的函数支持。2、xml: 在webservice中应用最为广泛,但是相比于json,它的数据更加冗余,因为需要成对的闭合标签。json使用了键值对的方式,不仅压缩了一定的数据空间,同时也具有可读性。3、protobuf:是后起之秀,是谷歌开源的一种数据格式,适合高性能,对响应速度有要求的数据传输场景。因为profobuf是二进制数据...原创 2020-08-26 22:10:50 · 960 阅读 · 0 评论 -
TCP三次握手和四次挥手详解 --- 转载
转载地址:https://blog.csdn.net/qq_43412060/article/details/107140216?utm_source=app文章目录1、三次握手 1.1connect()、listen()和accept()三者之间的关系 1.1三次握手的过程 1.2三次握手的状态转换和安全问题 1.3三次握手的问题汇总 2、四次挥手 2.1四次挥手的过程 1.2四次挥手的问题汇总 3.1TCP编程中三次握手和四次挥手的全过程 3.2TCP状态..转载 2020-08-09 20:20:30 · 2219 阅读 · 0 评论 -
SSL/TLS协议的运行原理浅析—https通信过程及CA证书诠释
互联网是开放环境,通信双方都是未知身份,这为协议的设计带来了很大的难度。而且,协议还必须能够经受所有匪夷所思的攻击,这使得SSL TLS协议变得异常复杂。理清https原理与CA证书体系互联网的通信安全,建立在SSL/TLS协议之上。本文简要介绍SSL/TLS协议的运行机制。文章的重点是设计思想和运行过程,不涉及具体的实现细节。如果想了解这方面的内容,请参阅RFC文档。为什么需要采用https加通信不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文传播,带来了三大风险。(转载 2020-08-09 16:54:07 · 2115 阅读 · 0 评论 -
细说OSI七层协议模型及OSI参考模型中的数据封装过程?
今天我将用大家都能理解的比喻形式把以太网的协议层的概念讲解清楚。大家应该会接触网络基础这门课程,在那里边会提到以太网的7层协议,技术人员很少会对此深究,只是作为基础掌握一些知道有哪几层就可以了OSI模型,即开放式通信系统互联参考模型(Open System Interconnection,OSI/RM,Open Systems InterconnectionReference Model),是国际标准化组织(ISO)提出的一个试图使各种计算机在世界范围内互连为网络的标准框架,简称OSI。0.转载 2020-08-09 10:58:36 · 4211 阅读 · 0 评论 -
IP数据包的传输全过程详解—数据是如何在tcp/ip各层封装?
我们知道现在的互联网中使用的TCP IP协议是基于,OSI(开放系统互联)的七层参考模型的,(虽然不是完全符合)从上到下分别为 应用层 表我们知道现在的互联网中使用的TCP/IP协议是基于,OSI(开放系统互联)的七层参考模型的,(虽然不是完全符合)从上到下分别为: 应用层 表示层 会话层 传输层 网络层 数据链路层和物理层。具体参看:https://www.zhoulujun.cn/html/theory/network/2016_0316_7709.html其中数据链路层又可是分为两个子层.转载 2020-08-09 10:55:25 · 7385 阅读 · 0 评论 -
从网卡发送数据再谈TCP/IP协议—网络传输速度计算-网卡构造
在《在深谈TCP/IP三步握手&四步挥手原理及衍生问题—长文解剖IP》里面提到 单个TCP包每次打包1448字节的数据进行发送(以太网Ethernet最大的数据帧是1518字节,以太网帧的帧头14字节和帧尾CRC校验4字节 seq编码,在RFC793中,建议ISN和一个假的时钟绑在一起,这个时钟会在每4微秒对ISN做加一操作,直到超过2^32 据此推算,貌似单一线路,网络传输速度也就1.5*(1/4*10^6) = 375M/bs对此的论据是:segments packet.转载 2020-08-09 10:54:31 · 2356 阅读 · 0 评论 -
再谈UDP协议—浅入理解深度记忆
如果对网络模型没有一个基础准,比如TCP,OSI七层协议,请先阅读《在深谈TCP/IP三步握手&四步挥手原理及衍生问题—长文解剖IP》,本文基于《不为人知的网络编程》UDP的传输方式:面向报文面向报文的传输方式决定了 UDP 的数据发送方式是一份一份的,也就是应用层交给 UDP 多长的报文,UDP 就照样发送,即一次发送一个报文。 那么UDP的报文大小由哪些影响因素呢? UDP协议本身,UDP协议中有16位的UDP报文长度,那么UDP报文长度不能超过2^16=6553..转载 2020-08-09 10:52:18 · 677 阅读 · 0 评论 -
再深谈TCP/IP三步握手&四步挥手原理及衍生问题—长文解剖IP
转载地址:https://www.zhoulujun.cn/html/theory/ComputerScienceTechnology/network/2015_0708_65.html如果对网络工程基础不牢,建议通读《细说OSI七层协议模型及OSI参考模型中的数据封装过程?》下面就是TCP/IP(Transmission Control Protoco/Internet Protocol )协议头部的格式,是理解其它内容的基础,就关键字段做一些说明 Source Port和Des..转载 2020-08-09 10:51:03 · 377 阅读 · 0 评论 -
服务器 --- 开发框架
1. 服务器开发常见开发框架以及问题原创 2020-08-08 00:16:06 · 228 阅读 · 0 评论 -
网络编程----心得体会
网络编程:1.首先要对一些名字有些认识,发现他们之间的关系。文件描述符:在我看来,就是操作文件的时候,内核给了一个指针而已,但是这个指针在判断的时候对指针进行非空进行判断,进而判断语句是否成功,所以把它搞成数字这样在打开文件的时候就变成了数字判断(但实质上是操作那个指针指向的起始地址)。套接字描述符:这个更高大上了,在你创建的时候,它是没有初始化的。而且在创建的时原创 2017-03-17 11:56:22 · 4631 阅读 · 0 评论 -
Http第三方接口实现/异步Http请求
1. 同步与异步的区别?阻塞非阻塞2. 如何设计?3.部分代码 -- 使用epoll来管理IO原创 2020-05-21 22:25:21 · 2081 阅读 · 0 评论 -
Linux网络子系统中旧的报文接收接口netif_rx
linux旧的收包方式提供给驱动的接口netif_rx()intnetif_rx(struct sk_buff *skb){ struct softnet_data *queue; unsigned long flags; /*如果接收skb的时间戳没设定,设定接收时间戳*/ if (!skb->tstamp.tv64) { ...转载 2020-02-29 19:47:27 · 559 阅读 · 0 评论 -
Linux网络子系统中报文的接收及NAPI的实现
报文的接收是整个协议栈的入口,负责从网卡中把报文接收并送往内核协议栈相应协议处理模块处理。一种是网卡产生中断,通知内核进行接收报文。一次中断接收一个报文。在中断处理程序中把报文从硬件缓存中拷贝到内存中,并把报文加入到协议栈中对应的入口队列中,中断退出时调用收包软中断来从相应队列来读取报文进行处理。这种方式优点是内核对报文响应较快,在网卡上 有少量报文时效果较好。这样如果网卡有大量报文的话,会产生...转载 2020-02-29 19:42:17 · 1494 阅读 · 0 评论 -
IP地址,子网掩码,默认网关,DNS服务器是什么意思?
为了更深入的学习TCP/IP协议,最近看了不少有关资料,收集整理记录如下,以备后面的使用和方便各位学习: IP地址,子网掩码,默认网关,DNS服务器是什么意思? (一) 问题解析001. 问: IP地址,子网掩码,默认网关,DNS服务器,有什么区别呀?我知道没有IP地址就不能上网,我也知道没设DNS就不能上外网,可它们都有什么功能,有什么区别呢?还有真奇怪转载 2017-08-05 16:15:16 · 1623 阅读 · 0 评论 -
以太网交换机工作原理
共享式以太网与交换以太网的区别在早期的共享式的以太网中,各个主机之间用的是同轴电缆进行通信,并且是共用一条同轴电缆,共用一条同轴电缆也就意味着这些主机都处在同一个冲突域中,何为冲突域?现在把同轴电缆比作一条车道,把终端比作车辆,但这条车道同时只能允许一台车辆通过,两台车辆同时上路是不是会撞车?是不是只能等这台车辆通过了才让下一辆车辆通过,上路的车辆越多通行的速度越慢,这就是为什么在冲突域网络中转载 2017-08-05 16:15:48 · 1303 阅读 · 0 评论 -
长连接和端连接 心跳包机制
TCP连接简介当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的经典的三次握手示意图:经典的四次握手关闭图: 转载 2017-08-15 22:45:29 · 7108 阅读 · 0 评论 -
Linux网络编程——tcp并发服务器(poll实现)
想详细彻底地了解poll或看懂下面的代码请参考《Linux网络编程——I/O复用之poll函数》代码:[csharp] view plain copy#include #include #include #include #include #include #include #i转载 2017-03-17 12:09:36 · 987 阅读 · 0 评论 -
linux高级网络编程教程
一、网络应用层编程1、Linux网络编程01——网络协议入门2、Linux网络编程02——无连接和面向连接的区别3、Linux网络编程03——字节序和地址转换4、Linux网络编程04——套接字5、Linux网络编程05——C/S与B/S架构的区别6、Linux网络编程06——UDP协议编程7、Linux网络编转载 2017-03-16 17:03:30 · 543 阅读 · 0 评论 -
路由器和交换机的区别,太经典了
路由谋短,交换求快。交换机工作于数据链路层,用来隔离冲突域,连接的所有设备同属于一个广播域(子网),负责子网内部通信。路由器工作于网络层,用来隔离广播域(子网),连接的设备分属不同子网,工作范围是多个子网之间,负责网络与网络之间通信。工作层次不同:交换机主要工作在数据链路层(第二层)路由器工作在网络层(第三层)。转发依据不同:交换机转发所依据的对象时:MAC转载 2017-08-05 16:14:35 · 11894 阅读 · 0 评论 -
Linux 网络编程 —— TCP编程之客户端 向服务器发送数据 接收服务器发来的数据
一、TCP概述TCP(Transmission Control Protocol传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP 具有以下特点:1)电话系统服务模式的抽象2)每一次完整的数据传输都要经过建立连接、使用连接、终止连接的过程3)可靠、出错重传、且每收到一个数据都要给出相应的确认,保证数据传输的可靠性 ...原创 2017-03-17 09:05:38 · 2360 阅读 · 0 评论 -
Linux网络编程——多播
转自:http://blog.csdn.net/tennysonsky/article/details/44493407一、概述单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信。单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信。实际情况下,经常需要对一组特定的主机进行通信,而不是整个局域网上的所有主机,这就是多播转载 2017-03-17 09:05:06 · 188 阅读 · 0 评论 -
Linux网络编程——广播
概述在生活中广播无处不在,像平时在大街上卖物品的商人,在进行推广产品的时候往往都是使用一个喇叭来进行吆喝:“十块钱买不了吃亏,十块钱买不了上当,走过路过千万不要错过”,这就是广播。那么在网络中的广播又是什么样子的呢?网络上的广播指:由一台主机向该主机所在子网内(同一个局域网)的所有主机发送数据的方式。如下图的 1 号主机广播给 2、3、4、5转载 2017-03-17 09:04:34 · 192 阅读 · 0 评论 -
浅谈 C/S 和 B/S 架构
一、概述在这个信息急剧膨胀的社会,我们不得不说人类正进入一个崭新的时代,那就是信息时代。信息时代的一个主要而显著的特征就是计算机网络的应用。计算机网络从最初的集中式计算,经过了Client/Server阶段(有两层C/S和三层C/S),已发展到目前最流行的 Browser/Server计算模式。其中颇具争论和影响力的是C/S以及B/S架构,C/S是一种历史悠久且技术非常成熟的架构,转载 2017-03-16 19:11:10 · 850 阅读 · 0 评论 -
Linux 网络编程 —— 套接字的介绍
一、套接字概述套接字是一种通信机制(通信的两方的一种约定),凭借这种机制,不同主机之间的进程可以进行通信。我们可以用套接字中的相关函数来完成通信过程。套接字的特性有三个属性确定,它们是:域(domain),类型(type),和协议(protocol)。二、套接字的域域指定套接字通信中使用的网络介质。最常见的套接字域是 AF_INET(IPv4)或者AF_INET6(IPV...转载 2017-03-16 19:09:27 · 310 阅读 · 0 评论 -
Linux网络编程——无连接和面向连接协议的区别
网络编程中最基本的概念就是面向连接(connection-oriented)和无连接(connectionless)协议。尽管本质上来说,两者之间的区别并不难理解,但对那些刚刚开始进行网络编程的人来说,却是个很容易混淆的问题。这个问题与上下文有些关联:很显然,如果两台计算机要进行通信,就必须以某种形式“连接”起来,那“无连接通信”又是什么意思呢?答案是:面向连接和无连接指的都是转载 2017-03-16 19:05:03 · 199 阅读 · 0 评论 -
TCP网络编程中connect()、listen()和accept()三者之间的关系
一、tcp编程的核心步骤二、connect()函数分析对于客户端的 connect() 函数,该函数的功能为客户端主动连接服务器,建立连接是通过三次握手,而这个连接的过程是由内核完成,不是这个函数完成的,这个函数的作用仅仅是通知 Linux 内核,让 Linux 内核自动完成 TCP 三次握手连接(三次握手详情,请看《浅谈 TCP 三次握手》转载 2017-03-15 16:04:13 · 251 阅读 · 0 评论 -
TCP通信过程中各步骤的状态---(简单解释)
状态图 1状态图 2对于上面的图 N 多人都知道,它排除和定位网络或系统故障时大有帮助,但是怎样牢牢地将这张图刻在脑中呢?那么你就一定要对这张图的每一个状态,及转换的过程有深刻的认识,不能只停留在一知半解之中。下面对这张图的11种状态详细解析一下,以便加强记忆!不过在这之前,先回顾一下 TCP 建立连接的三次握手过程,以及关闭连接的四次握手过程。转载 2017-03-15 09:44:20 · 410 阅读 · 0 评论 -
linux 网络编程 ------------TCP多进程并发服务器
一、TCP并发服务器概述一个好的服务器,一般都是并发服务器(同一时刻可以响应多个客户端的请求)。并发服务器设计技术一般有:多进程服务器、多线程服务器、I/O复用服务器等。二、多进程并发服务器在Linux环境下多进程的应用很多,其中最主要的就是网络/客户服务器。多进程服务器是当客户有请求时,服务器用一个子进程来处理客户请求。父进程继续等待其它客户的请求。这种方法的优点是当客户有...转载 2017-03-14 23:11:21 · 2647 阅读 · 0 评论 -
关于监听套接字的形象解释
在做网络编程的时候,碰到一个监听套接字的问题,在这里大概描述一下:比如我的程序开了一个监听端口,与客户端建立连接之后,生成了一个新套接字。这时我执行了只关闭监听端口的语句,结果却发现监听端口和已建立的连接仍然存在。我都已经关闭了监听套接字,为什么客户端还可以继续往监听端口发信息?这到底是因为什么呢?新套接字和监听套接字有什么关系呢?比如,你开了80监听端口,有一个客户连接你accept了,这时转载 2017-03-14 22:27:50 · 1258 阅读 · 1 评论 -
Linux网络编程 --------- Socket编程---最浅显易懂的介绍
我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket的基本函数,这些都是本文想介绍的。本文的主要内容如下:1、网络中进程之间如何通信? 2、Socket是什么...转载 2017-03-14 14:42:57 · 16011 阅读 · 3 评论 -
Linux网络编程--tcp服务器
一、做为 TCP 服务器需要具备的条件呢?1.具备一个可以确知的地址( bind() ):相当于我们要明确知道移动客服的号码,才能给他们电话;2.让操作系统知道是一个服务器,而不是客户端( listen() ):相当于移动的客服,他们主要的职责是被动接听用户电话,而不是主动打电话骚扰用户;3.等待连接的到来( accept() ):移动客服时刻等待着,来一个客户接听一个。转载 2017-03-17 09:06:12 · 244 阅读 · 0 评论 -
网路协议入门
我们每天使用互联网,你是否想过,它是如何实现的?全世界几十亿台电脑,连接在一起,两两通信。北京的某一块网卡送出信号,深圳的另一块网卡居然就收到了,两者实际上根本不知道对方的物理位置,你不觉得这是很神奇的事情吗?为了使各种不同的计算机之间可以互联,ARPANet指定了一套计算机通信协议,即TCP/IP协议( 族 ),它们对电脑如何连接和组网,做出了详尽的规定。理解转载 2017-03-16 19:00:06 · 226 阅读 · 0 评论 -
Linux网络编程——端口复用(多个套接字绑定同一个端口----避免服务器重启时,端口绑定不上)
在《绑定( bind )端口需要注意的问题》提到:一个网络应用程序只能绑定一个端口( 一个套接字只能绑定一个端口 )。 实际上,默认的情况下,如果一个网络应用程序的一个套接字 绑定了一个端口( 占用了 8000 ),这时候,别的套接字就无法使用这个端口( 8000 ), 验证例子如下:#include <stdio.h> #incl...转载 2017-07-16 19:18:04 · 708 阅读 · 0 评论