
net
文章平均质量分 72
动态一时爽,重构火葬场
这个作者很懒,什么都没留下…
展开
-
golang http2客户端处理逻辑分析
流的状态会随着帧(Frame)的发送和接收而改变。客户端连接通过判断是否超出最大并发流限制去创建新流处理,一个请求通过是否有可复用的客户端连接来判断是否要重新创建,而流是不能被复用的。连接池中不存在已经建立的连接,或者连接不能再承载新请求了(比如已经创建的流数量+等待的请求*2已经超过了int32的最大值)客户端连接在创建之后,开启新协程,从帧处理器循环读取帧,流的缓存管道绑定响应体后,数据被添加到对应流的缓存管道中。一个客户端连接对应一个网络连接,一个客户端连接对应多个流,而一个请求对应一个流。原创 2024-05-17 14:01:25 · 1231 阅读 · 0 评论 -
golang netpoller揭秘
netpoller依托于go调度器,提供了一种看上去同步的异步网络编程模式,显著地降低了开发难度更重要的是,go主动挂起goroutine等待网络IO的完成,而不是被动让系统线程去挂起,这就将执行网络IO的goroutine掌控在Go运行时中。原创 2024-04-28 22:30:00 · 772 阅读 · 0 评论 -
connection reset是什么东西?
在实际工作中经常碰到connection reset的报错,那么这个报错是怎么来的呢?在tcp中正常情况都是通过四次挥手关闭连接,但现实并不总是正常情况。因此在异常情况就会通过rst直接关闭连接,而接收方这个时候一般会看到connection reset或connection refused那么这个时候新的问题产生了。原创 2023-09-08 15:28:53 · 2572 阅读 · 0 评论 -
syn报文什么时候会被丢弃?
tcp_tw_recycle重复利用time_wait sockets,会记录最近的连接时间戳,并丢弃远程主机(PAWS机制)所有不严格大于该时间戳的报文。这意味着如果主机在nat下,那么该nat下所有设备将会受影响。在半连接队列满了情况下,其实已经无法接受新的连接请求了,那么自然syn会被丢弃。不过如果开启syn cookies就不会被丢弃了。原创 2023-07-31 23:13:35 · 271 阅读 · 0 评论 -
tcp keepalive
tcp keepalive用于检查两者之间的链路是否正常,或防止链路断开。一旦建立了TCP连接,该连接被定义为有效,直到一方关闭它。一旦连接进入连接状态,它将无限期地保持连接状态。但实际上,这种联系不会无限期地持续下去。如果在一段时间内没有任何活动,许多防火墙或NAT系统将关闭连接。Keep Alive信号可以用来欺骗中间主机,使其不会因为不活动而关闭连接。也有可能是一台主机不再监听(例如应用程序或系统崩溃)。在这种情况下,连接被关闭,但没有发送FIN。原创 2023-07-25 17:05:24 · 505 阅读 · 0 评论 -
什么是tcp rst以及什么时候产生?
rst包是仅在header control bits设置rst的空payload包,用于强制关闭tcp连接。常在以下场景发送远程主机没有监听该端口远程主机强迫关闭了一个现有连接。比如服务端进程崩溃后重启会向之前连接发送rst相比于四次挥手的fin,rst是在异常情况下的无条件关闭,在该连接中不再发送和接收包。而fin是在四次挥手场景中,而且还是会接收连接对方发送的包。原创 2023-07-25 11:18:50 · 833 阅读 · 0 评论 -
没有accept还能建立tcp连接吗?
首先什么是accept?以下是常见的接收网络请求的伪代码以上代码中的accept通常是调用linux accept方法,以下是该方法的描述也就是说实际上是从已经建立的连接队列中取出第一个连接,并返回指向该soccer的文件描述符那么实际上accept作用在已经三次握手之后了,那么自然能建立连接。原创 2023-07-20 23:30:41 · 176 阅读 · 0 评论 -
网络线程模型
单线程模式简单,没有多线程、进程通信、竞争问题,但是也无法发挥多核CPU性能,并且在线程意外终止或者进入死循环的情况下容易导致整个故障。若非建立连接请求,直接交由sub reactor将连接加入到连接队列进行监听,并创建handler处理。若是建立连接请求事件,则由acceptor接受请求,然后创建handler处理具体业务处理。若是建立连接请求事件,则由acceptor接受请求,然后创建handler处理具体业务处理。若是建立连接请求事件,则由acceptor进行连接。原创 2023-07-15 10:54:29 · 338 阅读 · 0 评论 -
k8s网络如何连接?
eBPF 是一种革命性的技术,起源于 Linux 内核,它可以在特权上下文(如操作系统内核)中运行沙箱程序。它用于安全有效地扩展内核的功能,而不需要更改内核源代码或加载内核模块。从历史上看,操作系统一直是实现可观察性、安全性和网络功能的理想场所,因为内核具有监视和控制整个系统的特权。同时,操作系统内核由于其核心作用和对稳定性和安全性的高要求而难以发展。因此,与在操作系统之外实现的功能相比,传统上操作系统一级的创新率较低。原创 2023-05-23 23:18:50 · 2104 阅读 · 0 评论 -
VXLAN技术了解
VXLAN是使用隧道技术的封装协议,常用于在物理层之上创建overlay网络,赋能虚拟网络。同时支持数据中心网络的虚拟化,并通过提供必要的分段满足多租户的需求。优势在于。原创 2023-05-23 23:04:53 · 3185 阅读 · 0 评论 -
TCP 三次握手、四次挥手
服务端接收,发出并包含ACK=1,ack=u+1,seq=v(v是服务端最近发来的数据)包确认客户端停止发送。客户端发送FIN=1,表明将关闭发送。服务端进入CLOSE-WAIT状态,客户端接收服务端确认消息后进入FIN-WAIT-2状态。服务端发送自己的SYN给客户端,初始序列号为ISN(s),并返回ACK=ISN©+1。服务端发送FIN=1,ACK=1,seq=w,ack=u+1包表明将关闭发送。客户端确认服务端SYN,响应ACK=ISN(s)+1。原创 2023-02-24 23:32:33 · 420 阅读 · 0 评论 -
流量限制算法
令牌桶算法基于固定容量桶类比,令牌通常代表一个字节单位或者预定大小的单个数据包,以固定速率添加到桶中。为了理解这个算法,可以想象一列正在行驶的火车,然后有一堆奇奇怪怪的乘客要登上行驶中火车车厢,若车厢满了就不能上去。假设有一个时间单位为tu秒,容量为c的速率限制器,上次消费的时间为。漏桶类比于如果注入的水平均速率超过桶的泄露速率,或者如果谁超过桶的容量,那么将会漏出。在这个算法中,我们可以将时间分为固定窗口,然后将到来的事件映射到这些窗口。不像固定窗口,滑动窗口并不限制固定时间内的请求。原创 2022-10-14 12:51:37 · 163 阅读 · 0 评论 -
SSH简介
比如主机A运行a虚拟机,那么处于同一局域网下的主机B便可以通过在主机A执行以下命令达到通过主机B 1234端口。比如对于本机2121端口连接了远程SSH服务器remoteSSHHost,那么动态转发命令如下。本机与远程SSH服务器建立了加密连接,针对本机某个端口的访问都通过这个加密连接转发。删除hostname对应公钥,当然也可以手动在文件中删除。在建立本机到远程的SSH隧道后,使远程服务器访问本机。初次连接,会将远程服务器公钥hash值储存在客户端。将对本机A指定端口X的访问请求转发给主机B的Y端口。..原创 2022-08-03 16:58:55 · 1837 阅读 · 0 评论 -
Golang DNS 随便写写
golang具有内置go解析器以及基于cgo的系统解析器两种DNS解析方式其中在Linux下默认是go内置go解析器域名系统( DNS)是一种用于 TCP/IP 应用程序的分布式数据库,它提供主机名字和IP地址之间的转换及有关电子邮件的选路信息从应用的角度上看,对 DNS的访问是通过一个地址解析器( resolver )来完成的。解析器并不像 TCP/IP 协议那样是操作系统的内核。当nameResolver发出查询请求,并且返回响应中的TC(删减标准)为1时,意味着响应长度超过了512字节,而仅返回前51原创 2022-07-05 16:49:30 · 1718 阅读 · 0 评论