注:本分类下文章大多整理自《深入分析linux内核源代码》一书,另有参考其他一些资料如《linux内核完全剖析》、《linux c 编程一站式学习》等,只是为了更好地理清系统编程和网络编程中的一些概
ss命令是用于在Linux系统上显示与网络套接字相关的信息的工具。 该工具显示netstat命令的更多详细信息,该命令用于显示活动的套接字连接。
在Linux网络编程中,常常使用select和poll来做事件触发,监听socket的读写状态,然后进行读写操作。现在新的linux内核中,增加了epoll事件触发机制,具有更高的性能和更好的设计理念,可以用它来完全代替select和poll。相比于select,epoll最大的好处在于它不会随监听fd数目的增长而降低效率。因为在内核总的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件中有这样的声明: [cpp] view pl
这是在windows下面的定义。在linux下面的定义只是将SOCKET改成int,那么在linux下面的原型是这样:
版权声明:本文为博主原创文章,转载请注明博客地址: https://blog.csdn.net/zy010101/article/details/88673990
socket 的原意是“插座”,在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。 我们把插头插到插座上就能从电网获得电力供应,同样,为了与远程计算机进行数据传输,需要连接到因特网,而 socket 就是用来连接到因特网的工具。
以前都只是在网上搜的能用的例子,对一些参数不是很清楚,这次汇总。而且网络通信还是很常用的通信手段。
netstat命令显示各种网络相关信息,例如网络连接、路由表、接口统计信息、伪装连接、多播成员身份等。
accept(2): accept connection on socket - Linux man page (die.net)
MySQL -uroot ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
原文链接:http://scotdoyle.com/python-epoll-howto.html
计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
套接字是一种通信机制,凭借这种机制,客户/服务器系统的开发工作既可以在本地单机上进行,也可以跨网络进行。 套接字的特性有三个属性确定,它们是:域(domain),类型(type),和协议(protocol)。套接字还用地址作为它的名字。地址的格式随域(又被称为协议族,protocol family)的不同而不同。每个协议族又可以使用一个或多个地址族定义地址格式。
与客户端代码不同(客户端代码请看我的上一篇博客),服务端需要绑定端口号,设置监听服务,多了两个特殊的步骤,需要两行新的代码实现 准备:windows作为客户端,windows上安装网络调试助手,linux作为服务端并且写好如下代码,并且查出自己服务端(linux虚拟机)上的ip地址为:
第一个隐患很明显,但它是开发新手最容易犯的一个错误。如果您忽略函数的返回状态,当它们失败或部分成功的时候,您也许会迷失。反过来,这可能传播错误,使定位问题的源头变得困难。
SeLinux全称为安全增强式 Security-Enhanced Linux(SeLinux),是一个在内核的强制存取控制(MAC)安全性机制。SeLinux的整体架构和原理都比较简单,使用也不复杂,其复杂的地方在于规则非常复杂,每个进程都要有规则策略;
TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的。
既然要学习 K8S,相信各位读者都已经使用过 Docker 了,Docker 的入门是比较容易的,但 Docker 的网络和存储、虚拟化是相当复杂的,Docker 的技术点比较多,在本章中将会深入介绍 Docker 的各方面,期待能够帮助读者加深对 Docker 的理解。
后台业务一般都是通过TCP协议提供服务。服务难免需要版本升级,需要经历旧进程的退出和新进程的启动。为保证用户链接不异常中断,需要旧进程继续运行,直至处理完用户请求后再退出。这样才不会打断用户请求,这就是所谓的Graceful Shutdown:优雅退出。如果不做优雅退出,用户交互过程中任何一个步骤可能被升级打断,往小了有些不重要的业务,中断一下可以忍受,但如支付的基础服务,升级服务如果不支持优雅退出,造成大量用户掉线,进而造成恶劣的影响。所以对服务实现,不论对什么业务来说都是很有必要的。这也是为什么Go从1.8版本开始,标准库net/http对HTTPServer就添加了一个新的方法GracefulShutdown,使得进程可以把现有请求都处理完了再退出。
Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同。前者对Unix早期的进程间通信手段进行了系统的改进和扩充,形成了“system V IPC”,通信进程局限在单个计算机内;后者则跳过了该限制,形成了基于套接口(socket)的进程间通信机制。Linux则把两者继承了下来,如图示:
我们知道,像 Nginx、Workerman 都是单 Master 多 Worker 的进程模型。
说了网络通信,大家肯定都不会陌生,比如各种分布式系统、大数据框架等等都要涉及到网络通信,由于大多数通信都是基于TCP协议来的,因此本文就以TCP为例,结合socket api来分析Linux下的网络通信流程。
Unix/Linux 基本哲学之一就是"一切皆文件",即一切都可以用 "open -> read/write -> close" 来操作,socket 也可以理解成是一种特殊的文件。
Socket套接字由远景研究规划局(Advanced Research Projects Agency, ARPA)资助加里福尼亚大学伯克利分校的一个研究组研发。其目的是将TCP/IP协议相关软件移植到UNIX类系统中。设计者开发了一个接口,以便应用程序能简单地调用该接口通信。这个接口不断完善,最终形成了Socket套接字。Linux系统采用了Socket套接字,因此,Socket接口就被广泛使用,到现在已经成为事实上的标准。与套接字相关的函数被包含在头文件sys/socket.h中。
ss是Socket Statistics的缩写,负责统计主机上网络连接信息,在ss之前使用最多的是netstat。从本质上来说ss在性能上可以完爆netstat,之所以快,主要原因是因为:netstat是直接cat /proc/net/tcp,然后对网络连接信息进行统计,ss使用TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以直接获得Linux 内核信息,从而保证了ss的高性能
每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷到内核缓冲区,进程B再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信。
Unix域协议不是一个真正意义上的协议族,只是一个利用socket api在单个主机上进行进程间通信的方法。它不需要走传统网络协议栈,也就不需要计算校验和、维护序列号以及应答等操作。
socket(套接字)是网络编程编程的一种技巧。通过socket不仅可以实现跨进程通信,还可以实现跨主机的网络通信。使用这种技术,就可以实现全国各地的通讯。例如:深圳的一台电脑接收来自北京一台电脑发来的信息。 本篇不涉及太底层的网络原理,仅说明socket的基本使用方法。主要参考《Linux网络编程》。本篇源码获取方式见文底小字。
把多方链接在一起,进行数据传递; 网络编程就是,让不同电脑上的软件进行数据传递,即进程间通信;
周日有空,zouyee带各位看看11月末CVE-2020–15257的安全漏洞。Containerd是基于OCI规范实现的一款工业级标准的容器运行时。Containerd在宿主机中管理容器生命周期,如容器镜像的传输和存储、容器的执行和管理、存储和网络等。containerd-shim是用作容器运行的载体,实现容器生命周期管理, 其API以抽象命名空间Unix域套接字方式暴露,该套接字可通过根网络名称空间访问。因此,一旦普通用户获得主机网络访问权限(通过启动主机网络模式的容器),则可以访问任一容器的API,并以此提权。例如生命周期管理,高级网络,资源绑定,状态抽象以及这些抽象概念多年来的变化。
原文链接:https://rumenz.com/rumenbiji/linux-ss.html
Redis是单线程,主要是指Redis的网络IO和键值对读写是由一个线程来完成的,这也是Redis对外提供键值存储服务的主要流程。但Redis的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。
端口是Linux系统上特定进程之间逻辑连接的标识,包括物理端口和软件端口。由于 Linux 操作系统是一个软件。软件端口始终与主机的IP地址和相关的通信协议相关联,因此端口常用于区分应用程序。大部分涉及到网络的服务都必须打开一个套接字来监听传入的网络请求,而每个服务都使用一个独立的套接字。套接字是和IP地址、软件端口和协议结合起来使用的,而端口号对传输控制协议(TCP)和用户数据报协议(UDP)协议都适用,TCP和UDP都可以使用0到65535之间的端口号进行通信。
ss是Socket Statistics的缩写。顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。 当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。可能你不会有切身的感受,但请相信我,当服务器维持的连接达到上万个的时候,使用netstat等于浪费 生命,而用ss才是节省时间。 天下武功
一、用select实现的并发服务器,能达到的并发数,受两方面限制 1、一个进程能打开的最大文件描述符限制。这可以通过调整内核参数。可以通过ulimit -n来调整或者使用setrlimit函数设置,
由于系统将CAN设备作为网络设备进行管理,因此在CAN总线应用开发方面,Linux提供了SocketCAN接口,使得CAN总线通信近似于和以太网的通信,应用程序开发接口更加通用,也更加灵活。
当开发者深陷 Java 8 版本之际,这边下一版本 Java 16 有了最新的消息,与 Java 15 一样,作为短期版本,Oracle 仅提供 6 个月的支持。
作者:huangguisu 原文出处:http://blog.csdn.net/hguisu/article/details/7453390
进程通信: 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷到内核缓冲区,进程B再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信。
socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。Socket就是该模式的一个实现, socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)。 说白了Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。 注意: 其实socket也没有层的概念,它只是一个facade设计模式的应用,让编程变的更简单。是一个软件抽象层。在网络编程中,我们大量用的都是通过socket实现的。
在 “了不起的 Deno 入门教程” 这篇文章中,我们介绍了如何使用 Deno 搭建一个简单的 TCP echo server,本文将使用该示例来探究 TCP echo server 是怎么运行的?前方高能,请小伙伴们深吸一口气做好准备。
1 套接字是一种具有通讯端点概念的计算机网络数据结构,网络化的应用程序在开始任何通讯之前都必须要建立套接字。
有时候我们要控制套接字的行为(如修改缓冲区的大小),这个时候我们就要控制套接字的选项了. 以下资料均从网上收集得到 getsockopt 和 setsockopt 获得套接口选项:
本文将从上层介绍Linux上的TCP/IP栈是如何工作的,特别是socket系统调用和内核数据结构的交互、内核和实际网络的交互。写这篇文章的部分原因是解释监听队列溢出(listen queue overflow)是如何工作的,因为它与我工作中一直在研究的一个问题相关。
领取专属 10元无门槛券
手把手带您无忧上云