20230422 2.2.3 Posix API与网络协议栈的一些认知

简介: 20230422 2.2.3 Posix API与网络协议栈的一些认知

1 POSIX介绍

POSIX(Portable Operating System Interface)API是一组操作系统接口标准,旨在为不同的Unix操作系统提供一致的编程界面。它包括了许多常见的操作系统服务,如进程管理、文件管理、网络通信等。POSIX API由IEEE制定和管理,其标准编号为IEEE 1003。许多现代的操作系统都支持POSIX API,包括Linux、Mac OS X和Solaris等。从Windows 10版本开始,Microsoft已经将POSIX子系统(Subsystem for UNIX-based Applications,SUA)添加到Windows操作系统中,该子系统支持运行基于UNIX的应用程序,并提供了POSIX API的实现。

网络这一块主要用到以下8个api

1 socket
2 bind
3 listen
4 accept
5 connect
6 recv
7 send
8 close

2 网络协议栈中的一些概念

TCB

TCB是“Transmission Control Block”的缩写,是网络通信中的一种数据结构。它是用来维护TCP协议中的连接状态信息的,可以保存已建立连接的IP地址、端口号、序列号、确认号等关键信息。在TCP协议中,每个数据包都会带有一个TCB,用来标识该数据包属于哪个连接,并记录接收和发送方的状态信息。同时,TCB也用于管理TCP连接的流量控制和拥塞控制等功能。因此,TCB在TCP协议中扮演着非常重要的角色

TCB包含以下信息:

1.本端IP地址和端口号 sport

2.对端IP地址和端口号 dport

3.TCP状态(如SYN_SENT、SYN_RECEIVED、ESTABLISHED、FIN_WAIT_1等)

4.发送窗口大小、接收窗口大小

5.序列号、确认号

6.最后一次发送或接收数据的时间戳

7.计时器(如重传计时器、保活计时器等)

8.缓冲区指针等。

当TCP连接建立时,这些参数被初始化并存储在TCB中。随着数据的发送和接收,这些参数会被动态地修改和更新。例如,每次发送数据时,序列号会增加;每次接收数据时,确认号会更新。

通过TCB,TCP实现了可靠的数据传输、拥塞控制和流量控制等功能。

五元组

五元组是网络数据传输中的五个关键参数,包括:源IP地址(Source IP Address)、目标IP地址(Destination IP Address)、源端口号(Source Port)、目标端口号(Destination Port)和协议类型(Protocol),这里简写为:五元组(sip dip sport dport proto)

通过TCP可以查找到五元组,反过来也行

问:端口只有65535个,怎么做到百万级连接?
TCB的唯一性就是五元组,只要五元组不冲突,就可以建立唯一的链接
那么理论上可建立的连接的总数将是:n_sip x n_dip x n_sport x n_dport x n_proto
实际操作起来,受硬件,网络等因素影响,需要精心设计,与测试。

tcp状态迁移图

参见: https://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&dyTabStr=MCw1LDEsNiw0LDMsNyw4LDIsOQ%3D%3D&word=tcp%E7%8A%B6%E6%80%81%E8%BF%81%E7%A7%BB%E5%9B%BE

结合tcp状态迁移图 理解 Posix API

1 bind是如何实现的呢?

socket-->  插座,fd--> tcb 两个部分组成
bind:  把fd 与 tcp绑定,即把(ip, port)绑定在一起,如果不绑定,发送的端口就不确定

连接建立好后,就不分服务器与客户端,进入平等状态,就是建立了连接

2 send返回正数的意义

仅代表数据copy到了内核,进入了tcb, 什么时候发,分几次发,是协议栈决定的
mtu,最大传输端元,ifconfig就可以看到
mtu对send的大小没有限制

tcp头里面是不带长度的
我发5K,对方怎么知道我收到了5K?()
tcp发完后,它能保证顺序 (我先发3k,再发2k与一次性发5k没有区别)
应用层怎么区分呢?加 分包,分隔符

send真正发送成功是: 对方回复应用层的确认值ack,才能确认收到
为什么要确认呢?是因为存在弱网的环境,比如进高铁,进隧道,电梯,需要通过应用层确认。
弱网环境下:tcb的ack不一定能够收得到, 也不一定回了ack

acknum seqnum 这连个值是在tcp头里面,单位是 字节数
我方发的seq 减去 对方回的ack 的差,是我方还没有发送成功的字节数 ===> 为什么tcp头里面不带长度字段

3 close 链接断开

fin (final)
fin 一般是和其他包在一起的,(抓fin包的时候要注意一些)

可以使用netstat命令来查看当前系统中的close wait连接数量。在命令行中输入"netstat -n | grep CLOSE_WAIT | wc -l",即可显示当前系统中的close wait连接数量。如果该数字较高,则说明系统中存在大量的close wait连接。

大量close wait的段状态,是什么原因造成的?
=> 没有及时调用close, 异步分离调用close
大量的client关掉==>雪崩

双方同时调用close,(就变成了三次挥手了),进入closing状态
双方进入time_wait状态

sysctl可以设置time_wait time_wait2的超时,然后强行退出

文章参考与<零声教育>的C/C++linux服务期高级架构系统教程学习:链接

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
分布式计算 API Linux
通义千问API:找出两篇文章的不同
本章我们将介绍如何利用大模型开发一个文档比对小工具,我们将用这个工具来给互联网上两篇内容相近但版本不同的文档找找茬,并且我们提供了一种批处理文档比对的方案
|
弹性计算 负载均衡 网络协议
这种情况可能是由于阿里云的API服务出现了短暂的故障或者网络波动导致的
【2月更文挑战第20天】这种情况可能是由于阿里云的API服务出现了短暂的故障或者网络波动导致的
315 1
|
4月前
|
JSON 监控 网络协议
干货分享“对接的 API 总是不稳定,网络分层模型” 看电商 API 故障的本质
本文从 OSI 七层网络模型出发,深入剖析电商 API 不稳定的根本原因,涵盖物理层到应用层的典型故障与解决方案,结合阿里、京东等大厂架构,详解如何构建高稳定性的电商 API 通信体系。
|
1月前
|
缓存 人工智能 API
API接口调用中的网络异常及解决方案
淘宝API是淘宝开放平台提供的接口集合,支持商品、交易、用户、营销等数据交互。开发者需注册获取App Key,通过签名认证调用API,结合沙箱测试、OAuth授权与安全策略,实现订单管理、数据监控等应用,提升电商自动化与数据分析能力。
|
12月前
|
网络协议
网络通信的基石:TCP/IP协议栈的层次结构解析
在现代网络通信中,TCP/IP协议栈是构建互联网的基础。它定义了数据如何在网络中传输,以及如何确保数据的完整性和可靠性。本文将深入探讨TCP/IP协议栈的层次结构,揭示每一层的功能和重要性。
720 5
|
网络协议 安全 Go
Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
243 13
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
1502 2
|
网络协议 网络架构 数据格式
TCP/IP基础:工作原理、协议栈与网络层
TCP/IP(传输控制协议/互联网协议)是互联网通信的基础协议,支持数据传输和网络连接。本文详细阐述了其工作原理、协议栈构成及网络层功能。TCP/IP采用客户端/服务器模型,通过四个层次——应用层、传输层、网络层和数据链路层,确保数据可靠传输。网络层负责IP寻址、路由选择、分片重组及数据包传输,是TCP/IP的核心部分。理解TCP/IP有助于深入掌握互联网底层机制。
1584 2
|
JavaScript 网络协议 API
【Azure API 管理】Azure APIM服务集成在内部虚拟网络后,在内部环境中打开APIM门户使用APIs中的TEST功能失败
【Azure API 管理】Azure APIM服务集成在内部虚拟网络后,在内部环境中打开APIM门户使用APIs中的TEST功能失败
163 3