![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux 网络
文章平均质量分 92
linux 网络
王燕龙hope
linux
展开
-
阻塞、非阻塞、同步、异步
异步机制,在实际工作中,往往是用户向异步实现模块注册回调,线程发送请求并注册回调之后,就交给底层的异步模块来负责,线程就不用关心了,有事件到来之后,异步调度模块会自动调用用户注册的回调。领导给你下发任务之后,并不是只盯着你的工作,其它什么工作都不做了。而是给你安排任务之后,就去做其它工作了,但是领导过一会就来问你,工作完成了没有,直到你工作完成,就不来问你了。领导给你下发了任务,下发之后,领导什么事都不做了,而是坐在你的工位旁边,一直监督着你来工作,直到你完成工作,领导才回去做其它的工作,这就是阻塞模式。原创 2024-06-01 22:04:51 · 600 阅读 · 0 评论 -
napi —— linux 网卡驱动收包机制
linux 操作系统一般指 linux 内核。在 linux 上开发应用的时候,可以使用 linux 提供的系统调用。linux 内核管理着机器上的硬件资源:内存,磁盘,网卡等。开发应用的时候不能直接操作这些硬件,而只能通过系统调用来使用这些资源。linux 系统调用可以说是 linux 内核提供给上层的一些接口。这种内核和用户隔离的机制保证了安全性的同时,也简化了应用的开发。linux 内核除了给上层应用提供了接口之外,给底层的硬件驱动也提供了框架和机制。原创 2024-04-20 16:10:12 · 953 阅读 · 0 评论 -
linux 中 unix socket 常见使用场景
unix socket 又称本地套接字,用于系统内的进程间通信,不能用于跨系统的网络通信(跨系统网络通信可以使用 tcp, udp)。unix socket 分为 3 类:socketpair, fs unix socket, abstract unix socket。原创 2024-01-13 12:03:13 · 1229 阅读 · 0 评论 -
带着 6 个问题深入理解 epoll
epoll 是一种多路复用技术。多路复用技术即一个线程可以监听多个文件句柄的的事件,多路指的是多个句柄,复用是指多个句柄复用一个线程资源。可想而知,和多路复用技术相对的就是一个文件句柄使用一个线程来监听。多路复用技术适用于高并发的场景。除了 epoll, linux 中的多路复用技术还有 poll 和 select。nginx, libevent, golang net 库中均使用了 epoll。原创 2024-01-13 16:09:11 · 907 阅读 · 0 评论 -
使用 tcp 时常见注意事项
本文中使用的代码参考如下:tcp server: tcp client:“Address already in use” 是一个错误,经常出现在服务端,比如当一个服务端退出之后立即又起来,这个时候服务端 bind 的时候很可能返回这个错误。当 tcp 连接断开的时候,主动断开连接的一方,最后一个状态是 time wait,这个定时器的时间是 60s,所以当服务端退出的时候,time wait 状态还没有结束。在 linux 中,我们常常说进程是资源管理的单位,进程的资源包括内存,打开的文件,信号原创 2024-01-23 20:53:23 · 1119 阅读 · 1 评论 -
linux tcp 主要数据结构
当讨论 tcp 的时候, 我们能想到很多概念:传输层协议,面向连接,可靠,字节流,状态机,三次握手,四次挥手,端口号,连接队列,mss,rtt,定时器,ack,流控,拥塞控制,重传机制,窗口,慢启动,序列号,保序,发送缓冲区,接收缓冲区,nagle,minshall,autocrok,fastopen,慢路径和快路径,延迟 ack,NODELAY, linear, SO_REUASEADDR,SO_REUSEPORT,tso,time-wait, address already in use,性能,吞吐量,原创 2024-01-28 19:50:00 · 1030 阅读 · 1 评论 -
[linux][tcp] tcp 中使用的定时器
定时器的使用场景主要有两种。(1)周期性任务这是定时器最常用的一种场景,比如 tcp 中的 keepalive 定时器,起到 tcp 连接的两端保活的作用,周期性发送数据包,如果对端回复报文,说明对端还活着;如果对端不回复数据包,就会判定对端已经不存在了;再比如分布式系统中,各个组件之间的心跳报文也是定时发送来维护组件之间的状态。(2)兜底功能一些不立即执行的任务的时间底线。原创 2024-02-12 19:54:44 · 1457 阅读 · 1 评论 -
[linux][tcp] 从可靠性的角度理解 tcp
可靠性是 tcp 最大的特点。常见的用户层协议,比如 http, ftp, ssh, telnet 均是使用的 tcp 协议。可靠性,即从用户的角度来看是可靠的,只要用户调用系统调用返回成功之后,tcp 协议栈保证将报文发送到对端。引起不可靠的表现主要有两个方面,丢包和乱序。对于 tcp 来说,即使报文在传输过程中出现了丢包或者乱序,tcp 协议也能通过重传、排序等方式解决这些问题。(1)丢包丢包的原因,比如链路上有一个节点(比如路由器, 交换机或服务器)的网卡接收缓冲区满,会导致丢包;原创 2024-02-19 13:50:07 · 1135 阅读 · 1 评论 -
netfilter
iptables,ip 说明这个工具工作在 ip 层,tables 说明这个工具的工作方式,通过多个表来工作。iptables 基于 netfilter 来实现,常常被用来做防火墙,通过 iptables 可以对报文进行过滤,修改或者 NAT。iptables 包括的概念比较多,功能很丰富,当然也很复杂,本文中只对一些基本的概念和操作做梳理。原创 2024-02-19 14:28:00 · 964 阅读 · 0 评论 -
使用 kprobe 观察 tcp 拥塞窗口的变化
tcp 中拥塞窗口用来做拥塞控制。在发送侧,要发送数据的时候会基于拥塞窗口进行判断,当前这个包还能不能发送出去。tcp 发包函数是 tcp_write_xmit(),在这个函数中调用 tcp_cwnd_test() 来判断当前拥塞窗口让不让发包。从 tcp_cwnd_test() 函数能看出来,in_flight 是已经发送出去,但是还没有被确认的包,如果这个数大于拥塞窗口,那么就返回 0,不能发包了,因为没有确认的包太多了,再发送可能加重网络拥塞,所以就返回 0。原创 2024-03-04 09:22:27 · 1520 阅读 · 0 评论 -
[linux] socket 非阻塞模式使用注意事项
在使用 socket 的一些 api 的时候,默认情况下都是阻塞模式。比如使用 tcp socket 时,客户端调用 connect() 创建连接,connect() 返回的时候要么是创建连接成功了,要么是出现了错误,反正 connect() 返回的时候结果是确定的;tcp 服务端使用 accept() 接收连接的时候,accept() 返回的时候一般就是接收到了新的连接;使用 recv() 接收数据的时候,直到接收到数据之后,才会返回;原创 2024-03-12 21:09:48 · 1049 阅读 · 0 评论