套接字

socket(7)

↘锁芯ラ 提交于 2019-11-28 02:54:15
SOCKET(7) NAME socket —— Linux套接字接口 SYNOPSIS #include <sys/socket.h>sockfd = socket(int socket_family, int socket_type, int protocol); DESCRIPTION 此手册描述Linux网络套接层用户接口。BSD兼容的通用接口位于用户矜持和内核的网络协议栈之间。协议模块以协议族和套接字类型分组,协议族如AF_INET,AF_IPX,AF_PACKET;套接字类型如SOCK_STREAM或SOCK_DGRAM。参见socket(2)以获取更多有关协议族和类型的信息。 套接字层函数 这些函数被用户进程用来发送或接受包以及其它套接字操作。参见它们各自的手册页以了解更多信息。 socket创建一个套接字,connect将一个套接字链接到远程套接字地址,bind将一个套接字绑定到本地套接字地址,listen告诉套接字准备接受连接请求,accept用于获取一个接入连接的套接字。socketpair返回两个互连的匿名套接字(只有少数几个本地协议族的实现像AF_UNIX)。 send,sendto和sendmsg在一个套接字上发送数据,recv,recvfrom和recvmsg从一个套接字接收数据。poll和select等待数据到达或数据发送准备就绪。此外,标准I

python之路 socket、socket server

此生再无相见时 提交于 2019-11-28 02:51:38
一、socket socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也 称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一 般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原 意那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务 2、连接原理 根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。 (1)服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。 (2)客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。 (3)连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程

TCP连接(client、server)状态转换

懵懂的女人 提交于 2019-11-28 01:41:29
客户端状态的变化: 客户端创建套接字之后会connect服务器,这时客户端会发送一个SYN到服务器,状态转换到SYN_SENT并等待服务器的回复,收到服务端的回复SYN+ACK(同一个报文)之后​​​客户端会回复ACK此时状态转换到ESTABLISHED,正常数据交互完成之后客户端会close套接字此时发送一个FIN报文,状态转换到FIN_WAIT_1,同时等待服务端的回复,此时有三种情况: (1)收到服务端的ACK但此时服务端没有关闭套接字。状态转换到了FIN_WAIT_2,然后再等待服务端关闭套接字发出的FIN,如果收到则回复ACK,状态转换到TIME_WAIT状态,等待2MSL超时之后自动转换为CLOSED状态。 ​(2)服务端同时也在关闭套接字,此时客户端会收到SYN并发出ACK,状态转换到CLOSING,之后等待服务端回复ACK,若收到ACK则转到TIME_WAIT状态。 (3)服务器在收到客户端FIN之后立马关闭套接字,此时客户端会收到一个ACK和FIN并发出ACK,状态​转换到TIME_WAIT状态。 服务器状态的变化: 服务端​创建套接字之后调用listen函数将套接字有一个未连接的主动套接字转换为被动套接字,指示内核应接受指向该套接字的连接请求,套接字状态由CLOSE转换为LISTEN,等待客户端连接。所以服务端是被动接收连接的,服务端会先收到SYN

redis的线程模型

六眼飞鱼酱① 提交于 2019-11-28 01:03:52
单进程模型 来处理客户端的请求 。 Redis 基于 Reactor 模式 开发了自己的网络事件处理器: 这个处理器被称为 文件事件处理器 (file event handler): 文件事件处理器是 单线程的 ,使用 I/O 多路复用程序 来同时监听多个套接字, 并根据套接字目前执行的任务来为套接字关联不同的事件处理器。 当被监听的套接字准备好执行连接应答(accept)、读取(read)、写入(write)、关闭(close)等操作时, 与操作相对应的文件事件就会产生, 这时文件事件处理器就会调用套接字之前关联好的事件处理器来处理这些事件。 文件事件处理器的组成部分: 套接字 I/O 多路复用程序 文件事件分派器(dispatcher) 事件处理器(连接应答处理器、命令请求处理器、命令回复处理器,等等) 来源: https://www.cnblogs.com/wjh123/p/11254658.html

TCP实现网络通讯

北慕城南 提交于 2019-11-28 00:55:52
Tcp server的流程: 1.创建套接字; 2.bind绑定ip和port 3.listen使套接字变为可以被动链接; 4.accept等待客户端的链接(返回为服务器分配的客户端的句柄和地址) 5.recive/send消息 6.通讯完成,关闭服务器分配的客户端的链接 7.关闭主服务器的链接 Tcp client的流程: 1.创建套接字; 2.链接服务器(connect) 3.收发数据; 4.关闭套接字 来源: https://www.cnblogs.com/maodoudou/p/11384530.html

xinetd超级服务器进程

雨燕双飞 提交于 2019-11-27 23:26:36
xinetd的实质和inetd差不多,只不过增加了访问控制功能,更加安全了。实际上xinetd就是一个超级服务器,是个把门的守护者,在linux 丰富的网络应用中实现单点验证,它继承了unix的传统工作方式,只提供机制,而将策略留给用户,正如unix的一个很重要的特性所说,一切都是可以配置 的。它的策略配置方式就是修改配置文件,在linux中不出意外的话,任何程序都要有一个配置文件,在这个配置文件中,用户可以自己定义该程序的行为,这 样的话,用户的技术门槛降低了,但是又不至于过低,于是管理linux的过程也就成了管理配置文件的过程,配置文件大多都是标准的文本格式,提供了最好的 兼容性,时隔几十年,只要最基本的编码体制不变,这些文件都保证是可读的,不像那些商业软件中,比如word,如果没有特定的程序,文件是无法被以可读形 式打开的。当然xinetd也有其配置文件,在/etc目录下,本文不讲xinetd的用法,需要的话,可以查阅相关手册。 xinetd的工作方式很简单,就是从其配置文件中得到它要代理的网络程序,得到该网络应用比如telnet需要监听的端口,然后代替该应用监听此端口, 当然不仅仅是例子中的telnet,任何需要它代理的网络应用都可以配置进xinetd,然后由它帮忙,今天就以telnet为例。telnet的监听端 口是23,当xinetd监听到23号端口有连接的时候

网络编程

会有一股神秘感。 提交于 2019-11-27 22:10:06
1.基本概念 网络通信目的: IP地址 目的:用来标记网络通信中的一台计算机 window查看ip地址: CMD窗口输入命令 ipconfig IP地址的分类: ip v4: 每一个ip地址包括两部分:网络地址和主机地址 常用ip地址:192:168:1~254.1~254 ip v6(正在发展) 单播:一对一 多播:一对多 端口:就是一个数字,标记进程,好比就是一个房子的门,是出入这间房子的必经之路 端口分类:知名端口 动态端口 端口是通过端口号来标记的,端口号只有整数,范围是从0到65535 知名端口:是众所周知的端口号,范围从0到1023,不能随便用 80端口分配给HTTP服务 21端口分配给FTP服务 动态端口:范围1023~65535,一般不固定分配某种服务,而是动态分配的,可以随便用 进程:是运行起来的程序。 socket(套接字,类似于插口,插排) socket是网络通信必备的,如常见的网络通信工具,qq,微信 1.创建一个tcp sokect(tcp套接字) import socket s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.close() 2.创建一个udp socket(udp套接字) s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) s

python 29 Socket - 套接字

可紊 提交于 2019-11-27 21:49:36
目录 Socket - 套接字 Socket - 套接字 应用层与TCP/IP协议族通信层(或传输层)之间的抽象层,是一组接口()接收数据;当接口接收数据之后,交由操作系统; 如果数据与操作系统直接交互,会非常麻烦,而socket会将数据进行高度封装/简化在传给操作系统。 socket在python中是一个模块。 # 导入套接字 import socket tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #获取TCP/ip套接字 # socket.AF_INET:网络socket, 基于TCP协议的socket通信 udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #获取UDP/ip套接字 # 服务端套接字函数 s.bind() # 绑定(IP地址,端口号)到套接字 s.listen() # 开机,开始TCP监听 # s.listen(2) 只允许2个客户端链接增加到半链接池,超出会报错。再加上已连接上的一个客户,因此总共有3个客户端。 s.accept() # 被动接受TCP客户端的连接,(阻塞式)等待连接的到来 # conn, addr = s.accpet() # conn:管道 , addr:客户端的IP、端口 # 公共用途的套接字函数

基于TCP和UDP的socket

匆匆过客 提交于 2019-11-27 21:25:04
为什么学习socket   你自己现在完全可以写一些小程序了,但是前面的学习和练习,我们写的代码都是在自己的电脑上运行的,虽然我们学过了模块引入,文件引入import等等,我可以在程序中获取到另一个文件的内容,对吧,但是那么突然有一天,你的朋友和你说:"把你电脑上的一个文件通过你自己写的程序发送到我的电脑上",这时候怎么办?你是不是会想,what?这怎么搞?就在此时,突然灵感来了,我可以通过qq、云盘、微信等发送给他啊,可是人家说了,让你用自己写的程序啊,嗯,这是个问题,此时又来一个灵感,我给他发送文件肯定是通过网络啊,这就产生了网络,对吧,那我怎么让我的程序能够通过网络来联系到我的朋友呢,并且把文件发送给他呢,那么查了一下,发现网络通信通过socket可以搞,但是怎么搞呢?首先,查询结果是对的,socket就是网络通信的工具,也叫套接字,任何一门语言都有socket,他不是任何一个语言的专有名词,而是大家通过自己的程序与其他电脑进行网络通信的时候都用它。知道为什么要学习socket了吧朋友们而你使用自己的电脑和别人的电脑进行联系并发送消息或者文件等操作就叫做网络通信。 三 C/S架构,B/S架构 客户端英文名称:Client, 浏览器英文名称:Browser. 服务端英文名称:Server,C\S架构就是说的Client\Server架构,B\S架构就是说的Browser

【网络编程】

时光总嘲笑我的痴心妄想 提交于 2019-11-27 20:43:38
" 目录 1.socket层 2.理解socket 3.套接字的发展史 4.网络基础 5.socket基本操作 6.socket进阶 7.黏包 8.解决黏包 8.socket的更多方法 1.socket层 2.理解socket socket是应用层与TCP/IP协议族的中间软件抽象层,它是一组接口。在设计模式中,socket其实就是一个面膜,它把复杂的TCP/IP协议族隐藏在socket接口后面,对于用户来说,一组简单的接口就是全部,让socket去组织数据,以符合指定的协议。 3.套接字的发展史 套接字起源于20世纪70年代 加利福尼亚 大学伯克利分校版本的Unix,即人们所说的BSD Unix。因此,有时人们也把套接字称为“伯克利套接字”或“BSD套接字”。一开始,套接字被设计用在同一台主机上多个应用程序之间的通讯,这也被称为进程间通讯或IPC。套接字有两种(或者称为有两个种族),分别是基于文件型的和基于网络型的。 基于文件类型的套接字家族:AF_UNIX unix下一切皆文件,基于文件的套接字调用的就是底层的文件系统来获取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信 基于网络类型的套接字家族:AF_INET 还有AF_INET6被用于ipv6,以及一些其他的地址家族,他们要么是只用于某个平台,要么就是已经被废弃,或者是很少被使用