linux网络编程backlog和somaxconn | 戒修
前言 学习过的知识只要用的机会不多,多半过段时间就会忘记.如果能反复学习或者记笔记则会记得更牢固一点.以后也可以直接查看复习. 以下内容基于Linux 2.6.18内核 listen方法传入的backlog参数#include
前言 学习过的知识只要用的机会不多,多半过段时间就会忘记.如果能反复学习或者记笔记则会记得更牢固一点.以后也可以直接查看复习. 以下内容基于Linux 2.6.18内核 listen方法传入的backlog参数#include
1、概述 首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层。 其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Data)在应用层 它们的关系是 数据帧{IP包{TCP或UDP包{Data}}} 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。 在应用程序中我们用到的Data的长度最大是多少,直接取决于底层的限制。 我们从下到上分析一下: 1.在链路层,由以太网的物理特性决定了数据帧的长度为(46+18)-(1500+...阅读全文
Why HTTP/2HTTP/1.1 是文本协议对用户友好,但对计算机不友好 (parse 不高效)TCP 连接管理TCP 慢启动,因此尽可能的复用连接 (keep-alive)一个 TCP 连接上只能有一个 request/response,可以使用 pipeline 实现并发请求,但会有头部阻塞问题,现代浏览器默认不启用 pipeline,而是通过对一个域名同时建立多个连接 workaround头部 field 重复,造成资源浪费资源没有优先级HTTP/2 特性:HTTP/2 没有改变 HTTP/1.1 的语义 (method, status code, URI, header 均保留),其改变了数据是如何传输的。多路复用: 为了更高效地利用多路复用,另外实现了 Flow Control...阅读全文
在我们日常开发中,会遇到服务端和客户端的通讯,今天我们就来比较一下HTML5新特性SSE和WebSocket的用法。 一,SSE 简介 SSE(Server-Sent Events,服务器发送事件)是围绕只读Comet 交互推出的API 或者模式。 SSE API允许网页获得来自服务器的更新(HTML5),用于创建到服务器的单向连接,服务器通过这个连接可以发送任意数量的数据。服务器响应的MIME类型必须是text/event-stream,而且是浏览器中的JavaScript API 能解析格式输出。SSE 支持短轮询、长轮询和HTTP 流,而且能在断开连接时自动确定何时重新连接。 客户端 //判断是否支持SSE if('EventSource' in window){ //初始化SSE v...阅读全文
前言 前一篇「硬不硬你说了算!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题」得到了很多读者的认可,在此特别感谢你们的认可,大家都暖暖的。 来了,今天又来图解 TCP 了,小林可能会迟到,但不会缺席。 迟到的原因,主要是 TCP 巨复杂,它为了保证可靠性,用了巨多的机制来保证,真是个「伟大」的协议,写着写着发现这水太深了。。。 本文的全部图片都是小林绘画的,非常的辛苦且累,不废话了,直接进入正文,Go! 正文 相信大家都知道 TCP 是一个可靠传输的协议,那它是如何保证可靠的呢? 为了实现可靠性传输,需要考虑很多事情,例如数据的破坏、丢包、重复以及分片顺序混乱等问题。如不能解决这些问题,也就无从谈起可靠传输。 那么,TCP 是通过序列号、确认应答、重发控制、连接管理以及窗口控...阅读全文
从上一节的内容可以看到,选项TCP_NODELAY是禁用Nagle算法,即数据包立即发送出去,而选项TCP_CORK与此相反,可以认为它是Nagle算法的进一步增强,即阻塞数据包发送,具体点说就是:TCP_CORK选项的功能类似于在发送数据管道出口处插入一个“塞子”,使得发送数据全部被阻塞,直到取消TCP_CORK选项(即拔去塞子)或被阻塞数据长度已超过MSS才将其发送出去。举个对比示例,比如收到接收端的ACK确认后,Nagle算法可以让当前待发送数据包发送出去,即便它的当前长度仍然不够一个MSS,但选项TCP_CORK则会要求继续等待,这在前面的tcp_nagle_check()函数分析时已提到这一点,即如果包数据长度小于当前MSS &&((加塞 || …)|| …),那么缓存数据而不立即...阅读全文
说明:本文是最近项目上使用tcp时遇到的问题找到的原因,参考了网络上的几篇文章整理出来,如有版权问题,请留言。 Nagle 算法用于对缓冲区内的一定数量的消息进行自动连接。该处理过程(称为Nagling),通过减少必须发送的封包的数量,提高了网络应用程序系统的效率。 **1. ** Nagle算法的规则 (可参考tcp_output.c文件里tcp_nagle_check函数注释): 1)如果包长度达到MSS(MSS是最大分段大小Maxitum Segment Size ,MTU是最大传输单元Maxitum Transmission Unit),则允许发送; 2)如果该包含有FIN,则允许发送; 3)设置了TCP_NODELAY选项,则允许发送; 4)未设置TCP_CORK选项时,若所有发出...阅读全文
ChannelPipeline ChannelPipeline不是单独存在,它肯定会和Channel、ChannelHandler、ChannelHandlerContext关联在一起,所以有关概念这里一起讲。 一、ChannelHandler 1、概念 先看图 ChannelHandler下主要是两个子接口 ChannelInboundHandler(入站): 处理输入数据和Channel状态类型改变。 适配器: ChannelInboundHandlerAdapter(适配器设计模式) 常用的: SimpleChannelInboundHandler ChannelOutboundHandler(出站): 处理输出数据 适配器: ChannelOutboundHandlerAdapter...阅读全文
1.关于MTU MTU最大传输单元,这个最大传输单元实际上和链路层协议有着密切的关系,EthernetII帧的结构DMAC+SMAC+Type+Data+CRC由于以太网传输电气方面的限制,每个以太网帧都有最小的大小64Bytes最大不能超过1518Bytes,对于小于或者大于这个限制的以太网帧我们都可以视之为错误的数据帧,一般的以太网转发设备会丢弃这些数据帧。 由于以太网EthernetII最大的数据帧是1518Bytes这样,刨去以太网帧的帧头(DMAC目的MAC地址48bits=6Bytes + SMAC源MAC地址48bits=6Bytes + Type域2Bytes)14Bytes和帧尾CRC校验部分4Bytes那么剩下承载上层协议的地方也就是Data域最大就只能有1500Byte...阅读全文
用户进程缓冲区和内核缓冲区 发表于 2017-02-01 | 分类于 操作系统 | 常常听到有程序员会跟你讨论:“我们在读写文件的时候,系统是有缓存的”。但实际上有一部分人把用户进程缓冲区和系统空间的缓冲区的概念混淆了,包括这两种缓冲区的用法和所要解决的问题,还有其它类似的概念。这篇博客就来区分一下不同的缓冲区概念。 这篇博客指针对类unix平台,windows的我并不熟悉,但我觉得应该差不多。 用户进程与操作系统的关系首先我用一张图来解释“用户进程和操作系统的关系” 这是一个计算机系统运行时的简化模型,我们把所有运行在操作系统上的进程成为用户进程,它们都运行在用户空间(可以看到用户空间有很多进程)。把操作系统运行的空间成为系统空间。 为什么将进程分为用户进程和系统进程,首先你一定听说过内核...阅读全文
登录后你可以不限量看优质回答私信答主深度交流精彩内容一键收藏登录查看全部 24 个回答程序员cxuan微信搜:程序员cxuan,个人微信 lx252279279374 人赞同了该回答哈哈哈,终于找到一篇 MQTT 协议的问题了,我写过一篇关于 MQTT 基础文章,相信你看完之后就会对 MQTT 有详细的认识了。之前有位读者给我留言说想要了解一下什么是 MQTT 协议,顺便还把我夸了一把,有点不好意思啦。那么读者的要求必须要满足啊,所以现在 @一下这位小姐姐,来听课啦!什么是 MQTT 协议MQTT 协议的全称是 Message Queuing Telemetry Transport,翻译为消息队列传输探测,它是 ISO 标准下的一种基于发布 - 订阅模式的消息协议,它是基于 TCP/IP ...阅读全文
前言在接触到MQTT之后,总是会有疑问,为什么用MQTT不用TCP长连接透传?看起来【TCP长连接+私有协议透传】和【MQTT+业务主题】似乎都能达到同样的目的,甚至用MQTT会使得设备端逻辑实现、APP端逻辑实现、云端架构实现更加复杂。那么为什么物联网还要使用MQTT协议呢?一、MQTT相比于TCP长连接的优势1、协议更标准MQTT是标准的RFC协议,相比于私有协议而言更加标准。好处在于:(1)协议非常完整,能够马上用于生产。各端实现同一套协议之后,就能进行通信;私有协议还需要进行大量的验证,看有无缺陷或欠考虑的地方等。(2)协议的标准化带来大量的开源组件,降低开发难度。随着物联网+5G生态越来越好,开源组件越来越多,可以减少重复编码量。(3)标准协议利于第三方接入。当第三方设备、平台想要...阅读全文
这个问题在前面有的部分已经涉及,这里在重新总结下。主要参考UNIX网络编程。 (1)数据报大小 IPv4的数据报最大大小是65535字节,包括IPv4首部。因为首部中说明大小的字段为16位。 IPv6的数据报最大大小是65575字节,包括40字节的IPv6首部。同样是展16位,但是IPv6首部大小不算在里面,所以总大小比IPv4大一个首部(40字节)。 (2)MTU 许多网络有一个可由硬件规定的MTU。以太网的MTU为1500字节。有一些链路的MTU的MTU可以由认为配置。IPv4要求的最小链路MTU为68字节。这允许最大的IPv4首部(包括20字节的固定长度部分和最多40字节的选项部分)拼接最小的片段(IPv4首部中片段偏移字段以8个字节为单位)IPv6要求的最小链路MTU为1280字节。...阅读全文
1.虚拟IP 在 TCP/IP 的架构下,所有想上网的电脑,不论是用何种方式连上网路,都必须要有一个唯一的 IP-address。事实上IP地址是主机硬件地址的一种抽象,简单的说,MAC地址是物理地址,IP地址是逻辑地址。 虚拟IP,就是一个未分配给真实主机的IP,也就是说对外提供服务器的主机除了有一个真实IP外还有一个虚IP,使用这两个IP中的任意一个都可以连接到这台主机。 虚拟IP一般用作达到HA(High Availability)的目的,比如让所有项目中数据库链接一项配置的都是这个虚IP,当主服务器发生故障无法对外提供服务时,动态将这个虚IP切换到备用服务器。 2.虚拟IP原理 ARP是地址解析协议,它的作用很简单,将一个IP地址转换为MAC地址,然后给传输层使用。 每台主机中都有一...阅读全文
大型互联网公司一般都会要求消息传递最大限度的不丢失,比如用户服务给代金券服务发送一个消息,如果消息丢失会造成用户未收到应得的代金券,最终用户会投诉。 为避免上面类似情况的发生,除了做好补偿措施,更应该在系设计的时候充分考虑各种异常,设计一个稳定、高可用的消息系统。 认识 Kafka 看一下维基百科的定义 Kafka 是分布式发布-订阅消息系统。它最初由 LinkedIn 公司开发,之后成为 Apache 项目的一部分。Kafka是一个分布式的、可划分的、冗余备份的持久性的日志服务。它主要用于处理活跃的流式数据。 Kafka 架构 Kafka 的整体架构非常简单,是显式分布式架构,主要由 Producer、Broker(Kafka) 和 Consumer 组成。 Kafka架构(精简版) Pr...阅读全文
大型互联网公司一般都会要求消息传递最大限度的不丢失,比如用户服务给代金券服务发送一个消息,如果消息丢失会造成用户未收到应得的代金券,最终用户会投诉。为避免上面类似情况的发生,除了做好补偿措施,更应该在系设计的时候充分考虑各种异常,设计一个稳定、高可用的消息系统。认识 Kafka看一下维基百科的定义Kafka 是分布式发布-订阅消息系统。它最初由 LinkedIn 公司开发,之后成为 Apache 项目的一部分。Kafka是一个分布式的、可划分的、冗余备份的持久性的日志服务。它主要用于处理活跃的流式数据。Kafka 架构Kafka 的整体架构非常简单,是显式分布式架构,主要由 Producer、Broker(Kafka) 和 Consumer 组成。Kafka架构(精简版)Producer(生...阅读全文
《Kafka重要知识点之消费组概念》讲到了kafka的消费组相关的概念,消费组有多个消费者,消费组在消费一个Topic的时候,kafka为了保证消息消费不重不漏,kafka将每个partition唯一性地分配给了消费者。但是如果某个消费组在消费的途中有消费者宕机或者有新的消费者加入的时候那么partition分配就是不公平的,可能导致某些消费者负载特别重,某些消费者又没有负载的情况。Kafka有一种专门的机制处理这种情况,这种机制称为Rebalance机制。当kafka遇到如下四种情况的时候,kafka会触发Rebalance机制:消费组成员发生了变更,比如有新的消费者加入了消费组组或者有消费者宕机消费者无法在指定的时间之内完成消息的消费消费组订阅的Topic发生了变化订阅的Topic的pa...阅读全文
目录1.retries参数说明 2.retries使用建议 3.retries后续发展复制1.retries参数说明参数的设置通常是一种取舍,看下retries参数在版本0.11.3说明:Setting a value greater than zero will cause the client to resend any record whose send fails with a potentially transient error. Note that this retry is no different than if the client resent the record upon receiving the error. Allowing retries without s...阅读全文
download:https://caodada.com/8045.html【资源介绍】:Web3.0入门与实战 一站式掌握4大主流区块链开发Web3.0迎来爆发式增长,技术人才紧缺,薪资涨幅可观。但Web3.0体系庞杂,很难系统掌握。因此,我们邀请以太坊、IC、Flow及XuperChain社区资深开发者精心打造更适合初学者从0到1系统学习的课程。课程将从编程语言,到四大主流链项目开发,带大家系统全面掌握Web3.0开发技术,帮助大家顺利入行,开拓新的职业机会,增长职业竞争力及副业收入。【资源目录】:├──1| └──1-1开篇Web30一场已经开启的互联网革命3725_ev.mp4 74.89M├──2| ├──2-10智能合约语言介绍下1137_ev.mp4 35.67M...阅读全文
生xhr对象 现代浏览器,最开始与服务器交换数据,都是通过XMLHttpRequest对象。它可以使用JSON、XML、HTML和text文本等格式发送和接收数据。 好处: 不重新加载页面的情况下更新网页 在页面已加载后从服务器请求/接收数据 在后台向服务器发送数据。 缺点: 使用起来也比较繁琐,需要设置很多值。 早期的IE浏览器有自己的内置对象,这样需要写兼容代码判断是否为XMLHttpRequest对象。 if (window.XMLHttpRequest) { // model browser xhr = new XMLHttpRequest() } else if (window.ActiveXObject) { // IE 6 and older xhr = new ActiveX...阅读全文
缓冲区原理简介: go字节缓冲区底层以字节切片做存储,切片存在长度len与容量cap, 缓冲区写从长度len的位置开始写,当len>cap时,会自动扩容。缓冲区读会从内置标记off位置开始读(off始终记录读的起始位置),当off==len时,表明缓冲区已全部读完 并重置缓冲区(len=off=0),此外当将要内容长度+已写的长度(即len) <= cap/2时,缓冲区前移覆盖掉已读的内容(off=0,len-=off),从避免缓冲区不断扩容。 package main import ( "bytes" "fmt" ) func main() { byteSlice := make([]byte, 20) byteSlice[0] = 1 // 将缓冲区第一个字节置1 byteBuffer ...阅读全文
一、nio 是什么? 1、Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始) 2、Java NIO提供了与标准IO不同的IO工作方式。 3、nio 主要面向于网络编程 二、nio 和 io 的区别? 1、IO基于字节流和字符流进行操作的 2、NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。 3、NIO引入了选择器的概念,选择器用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个的线程可以监听多个数据通道。 io 流实现过程 数据传递是单向的,写数据只管把数据往文件丢,读也是同理 并且 io 基本都是非直接缓冲区传递(速度慢) nio 实现过程 先...阅读全文
随着新一代信息技术与医疗健康行业深度融合,大数据、云计算和人工智能等技术手段为医疗服务水平提升、健康中国建设提供了强大助力。天翼云作为云服务国家队,在医疗领域持续深耕,以领先的技术和服务,积极赋能医疗产业数字化转型,全面服务“健康中国”战略。近日,中国电信天翼云携手合作伙伴顺利完成北京大学第一医院(简称:北大医院)大兴院区新一代智慧检验平台的系统调试,完成了国产数据库在大型三甲医院核心系统正式上线。此工程积极响应了国家卫健委对全民健康信息化安全可控的要求,同时也为北大医院信息化实现全面国产化奠定了坚实的基础。新一代智慧检验平台上线以来,天翼云TeleDB通过多样化、高性能的全栈国产化数据库服务,保障了医院数据的安全传输、实时计算与高效存储。数据显示,系统运行一周,大兴院区标本总数接近150...阅读全文
本文分享自天翼云开发者社区《组播基本概念》,作者:zzz概述:组播传输作为IP数据传输的三种方式之一 ,是指接收者的数量和位置在源端主机不知道的情况下,仅由源发出一份组播报文,向目标组播IP地址发送数据的过程。其特点有:1、组播实现点到多点的高效数据传输。(通常基于UDP)2、组播可以有效节约带宽、降低网络负载。(按需发送,不会和广播一样只会泛洪,减少了对链路带宽的浪费)3、组播广泛应用于多媒体直播、在线会议、股票金融等场景。对比三种IP网络中的传输方式:单播:采用单播方式时,网络中传输的信息量与需要该信息的用户量成正比。当需要该信息的用户数量较大时,信息源需要将多份内容相同的信息发送给不同的用户,这对信息源以及网络带宽都将造成巨大的压力。由此可以看出,该传输方式不利于信息的批量发送,只适...阅读全文
tron波场区块链智能合约交互入门到精通(基于6.x.x版本) 波场TRON以推动互联网去中心化为己任,致力于为去中心化互联网搭建基础设施。旗下的波场TRON协议是基于区块链的去中心化应用操作系统协议之一。 为协议上的去中心化应用运行提供高吞吐,高扩展,高可靠性的底层公链支持。 有限的高计算性能节点被用户选为网络维护节点。 波场的目标是通过提供一个去中心化的平台来改善互联网的体验,包括数字内容分发、娱乐和社交媒体等领域。它使用了自己的加密货币TRX(TRONix)来支持其生态系统。 波场项目的核心是其区块链技术,这使得开发者可以构建去中心化的应用程序(DApps)和智能合同,而不依赖于传统的中心化互联网架构。波场还采用了代表性的DPoS(DelegatedProof of stake)共识机...阅读全文
本文分享自天翼云开发者社区《区块链技术的基本理论》,作者:z****n2008年10月31日,“中本聪”首次提出数字加密货币的概念。2009年,第一枚加密数字货币——比特币诞生。区块链技术作为比特币的核心技术,凭借去中心化、公开透明、不可篡改的特点受到国内外各界人士的高度关注,将其应用于各个领域(如金融、医疗保健、资产注册)。区块链是一个分布式系统,它记录所有的状态更新信息,例如加密货币系统中的交易。状态更新信息被复制并在所有参与方之间共享。区块链的主要特性是,它允许不受信任的参与方以一种安全的方式相互通信和发送状态更新信息,而无需完全受信任的第三方或授权的中心方。为保证存储在区块链中的信息的安全性与完整性,区块链技术主要结合了以下三种密码学算法:1.哈希算法:利用哈希函数,可以将任何长度的...阅读全文
http 协议:http 协议是一种无状态,短链接的 通信协议,http 协议建立在 tcp 协议之上。 http 协议 分成 三个 部分 请求行,请求头,请求体 请求行: 就是访问的地址 ( 包含 ? 和后面的参数) 如: 127.0.0.1/server/add?id=1 请求头: http 的 header 部分,比如: centent-type=application/json 请求体: post 请求才有请求体,get 没有 , put 请求也有(强调幂等性),还有文件上传,数据文件也是放在 请求体里面的。 https: https 是 http 协议上面加了一个层 ssl 或者 tls 之类的安全机制。 https 请求的 大概过程: 客户端请求服务器 ——> 服务器返回 证书—...阅读全文