深入理解Linux网络——TCP连接建立过程(三次握手源码详解)
一、相关实际问题
1. 为什么服务端程序都需要先listen一下
2. 半连接队列和全连接队列长度如何确定
3. “Cannot assign requested address”这个报错是怎么回事
4. 一个客户端端口可以同时用在两条连接上吗
5. 服务端半/全连接队列满了会怎么样
6. 新连接的soket内核对象是什么时候建立的
7. 建立一条TCP连接需要消耗多长时间
8. 服务器负载很正常,但是CPU被打到底了时怎么回事
深入理解Linux网络——TCP协议三次握手和四次挥手详细流程
• 找到套接字:创建内核对象的时候,fd会跟file对象做通过fd_install关联起来,通过进程的fd_table就可以找到对应的file,而file的private指针就指向了socket对象,所以根据fd即可找到套接字
• 判断当前套接字的状态:只有SS_UNCONNECTED状态(刚创建的套接字就是该状态)才会继续,其他状态都会报错
1. 注意此处是socket的状态,而不是sock的状态
2. 会将socket状态更改为SS_CONNECTING
• 更改sock状态为TCP_SYN_SENT
使用函数计算,数禾如何实现高效的数据处理?
通过基于函数计算异步调用放宽消息体大小,可以以最少的触发器资源,达到函数计算的大并发处理。通过 NAS/OSS 原生支持文件锁的能力,可以减少文件的数量,同时也减少业务层代码在这方面的处理复杂度。
深入理解Linux网络——内核是如何发送网络包的
一、相关实际问题
1. 查看内核发送数据消耗的CPU时应该看sy还是si
2. 在服务器上查看/proc/softirqs,为什么NET_RX要比NET_TX大得多
3. 发送网络数据的时候都涉及那些内存拷贝操作
4. 零拷贝到底是怎么回事
5. 为什么Kafka的网络性能很突出
k8s 中externalTrafficPolicy应用场景和实践
在Kubernetes(K8s)中,`externalTrafficPolicy` 是一个用于控制服务的外部流量的策略。这个字段可以在 `Service` 的定义中设置,其主要作用是决定服务对外部请求的负载均衡行为。具体来说,`externalTrafficPolicy` 有两个可选值:
1. `Cluster`: 默认值。当设置为 `Cluster` 时,服务将负载均衡流量到所有的 Pod,无论这些 Pod 是否在同一节点上。这意味着即使请求来自于同一节点的多个 Pod,流量也可能被负载均衡到不同的节点上。
```yaml
apiVersion: v1
kind: Se