套接字

python-套接字编程

£可爱£侵袭症+ 提交于 2019-12-06 14:12:16
服务端和客户端。 服务端脚本: # Auther:AlphaPanda # Description:server # Version:1 # Date:Mon Dec 2 09:02:01 EST 2019 # 服务端 import socket # 1 创建一个socket对象,默认按照tcp协议创建 sk = socket.socket() # 2 绑定Ip和端口,在网络上注册该主机,让其他电脑找到这台服务器 sk.bind( ("127.0.0.1",9000) ) # 3 开启监听 sk.listen() # 4 三次握手 conn,addr = sk.accept() print(conn,addr) # 5 收发数据的逻辑 msg = conn.recv(1024) # 一次性,最多接收1024个字节 print(msg.decode("utf-8")) conn.send("diyicifasong".encode("utf-8")) # 6 四次挥手 conn.close() # 7 退还端口 sk.close() 客户端脚本: #!/usr/bin/python3 # coding:utf-8 # Auther:AlphaPanda # Description:socket tcp client # Version:1 # Date:Mon Dec 2 09:09

读书笔记_python网络编程3_(3)

北城以北 提交于 2019-12-06 13:12:47
3.TCP:传输控制协议 第一个版本在1974年定义,建立在网际层协议(IP)提供的数据包传输技术之上。TCP使程序可以使用连续的数据流进行相互通信。 除非网络原因导致连接中断/冻结,TCP都能保证将数据流完好无缺地传输至接收方,不会发生丢包、重包、乱序问题。 传输文档/文件的协议都使用TCP,包括浏览网页、文件传输、电子邮件的所有主要机制,也是人机间进行长对话的协议的基础之一,如SSH/聊天协议 经过30年的改进,现代TCP相当精良,除了协议设计专家,很少有人能再改进现代TCP栈的性能,就算是消息队列这种对性能要求很高的程序, 也会选择TCP作为传输媒介。 3.1. TCP工作原理:数据包被隐藏在协议层之下,程序只需向目标机器发送流数据,TCP会将丢失的信息重传,保证信息成功到达目标机器 经典定义来自1981年的RFC 793,如何提供可靠连接,基本原理: 3.1.1. 每个TCP数据包都有一个序列号,接收方通过该序列号将响应数据包正确排序,也可通过该序列号发现传输序列中丢失的数据包,并请求进行重传。 3.1.2. TCP不使用顺序整数作为数据包的序列号,而是通过计数器来记录发送的字节数。如,包含1024字节的数据表的序列号为7200, 下一个数据包序列号就为8224。网络栈无需记录如何将数据流分割为数据包,需要重传,可以使用另一种分割方式,将数据流分为多个新数据包(需要传输更多

读书笔记_python网络编程3_(3)

眉间皱痕 提交于 2019-12-06 13:12:25
3.TCP:传输控制协议 第一个版本在1974年定义,建立在网际层协议(IP)提供的数据包传输技术之上。TCP使程序可以使用连续的数据流进行相互通信。 除非网络原因导致连接中断/冻结,TCP都能保证将数据流完好无缺地传输至接收方,不会发生丢包、重包、乱序问题。 传输文档/文件的协议都使用TCP,包括浏览网页、文件传输、电子邮件的所有主要机制,也是人机间进行长对话的协议的基础之一,如SSH/聊天协议 经过30年的改进,现代TCP相当精良,除了协议设计专家,很少有人能再改进现代TCP栈的性能,就算是消息队列这种对性能要求很高的程序, 也会选择TCP作为传输媒介。 3.1. TCP工作原理:数据包被隐藏在协议层之下,程序只需向目标机器发送流数据,TCP会将丢失的信息重传,保证信息成功到达目标机器 经典定义来自1981年的RFC 793,如何提供可靠连接,基本原理: 3.1.1. 每个TCP数据包都有一个序列号,接收方通过该序列号将响应数据包正确排序,也可通过该序列号发现传输序列中丢失的数据包,并请求进行重传。 3.1.2. TCP不使用顺序整数作为数据包的序列号,而是通过计数器来记录发送的字节数。如,包含1024字节的数据表的序列号为7200, 下一个数据包序列号就为8224。网络栈无需记录如何将数据流分割为数据包,需要重传,可以使用另一种分割方式,将数据流分为多个新数据包(需要传输更多

带你探索网络里的那些秘密

蹲街弑〆低调 提交于 2019-12-06 10:04:41
背景 网络,网络... 虽然只是一个简单的名词,但是她的背后却掩藏着太多太多的故事以及知识。 穷其编程的一生,或许也只能探索出那冰山一角,嗨... 小时虽知,学海无涯,却毫不知意。玩乃天性,却空流时光。憾... so,矫情之余,我们来探索一下网络究竟是怎么传输的。 概述 探索网络的范围,都在上图有所展示(另存为看大图)。 正文 一. 生成HTTP请求消息 打开一个网站,都是从浏览器中输入网址开始,我们的探索也是从这里开始。 https: 是协议,告诉浏览器我们要访问的目标,而https: 代表的就是访问Web服务器,当然也有其他的协议。比如ftp:访问的就是FTP服务器等。 sexyphoenix.github.io 是Web服务器域名,可以告诉我们在哪里可以找到Web服务器。 about/ 是Web服务器里面的文件路径名,这里的about是目录名,全路径可能是about/index.md,而index.md应该被github掩藏了。 浏览器首先要做的就是对URL进行解析,知道我们要访问的是sexyphoenix.github.io这个Web服务器上文件路径为about目录下的默认文件。 知道了要访问的目标,接下来浏览器就要生成HTTP的请求信息,介绍到这,就要聊一聊HTTP协议了。 HTTP协议规定了客户端和服务器通信的内容和步骤,简单来说,就是两个部分 “对什么” 做

python实现一个简单的网络聊天程序

那年仲夏 提交于 2019-12-06 05:47:21
一、Linux Socket 1.Linux Socke基本上就是BSD Socket(伯克利套接字) 伯克利套接字的应用编程接口(API)是采用C语言的进程间通信的库,经常用在计算机网络间的通信。BSD Socket的应用编程接口已经是网络套接字的抽象标准。大多数其他程序语言使用一种相似的编程接口。由于伯克利套接字是第一个socket,大多数程序员很熟悉它们,所以大量系统把伯克利套接字作为其主要的网络API。 主要的头文件如下,不同的系统可能具体不同。 <sys/socket.h> BSD socket 核心函数和数据结构。 <netinet/in.h> AF_INET 和AF_INET6 地址家族和他们对应的协议家族PF_INET 和PF_INET6。在互联网编程中广泛使用,包括IP地址以及TCP和UDP端口号。 <sys/un.h> PF_UNIX/PF_LOCAL 地址家族。用于运行在一台计算机上的程序间的本地通信,不用在网络中。 <arpa/inet.h> 和IP地址相关的一些函数。 <netdb.h> 把协议名和主机名转化成数字的一些函数。 2.API函数 这些是伯克利套接字提供的库函数: (1)socket() 创造某种类型的套接字,分配一些系统资源,用返回的整数识别。 (2)bind() 一般是用在服务器这边,和一个套接字地址结构相连

Socket 编程

末鹿安然 提交于 2019-12-06 05:46:10
套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。 传输层 实现 端到端 的通信,因此,每一个传输层连接有两个端点。那么,传输层连接的端点是什么呢?不是 主机 ,不是主机的 IP地址 ,不是应用进程,也不是传输层的协议端口。传输层连接的端点叫做套接字(socket)。 根据RFC793的定义: 端 口号 拼接到IP地址就构成了套接字。所谓套接字,实际上是一个通信端点,每个套接字都有一个套接字序号,包括主机的IP地址与一个16位的主机端口号,即形如(主机IP地址:端口号)。例如,如果IP地址是210.37.145.1,而端口号是23,那么得到套接字就是(210.37.145.1:23)。 总之,套接字Socket=(IP地址:端口号),套接字的表示方法是点分十进制的IP地址后面写上端口号,中间用冒号或逗号隔开。每一个传输层连接唯一地被通信两端的两个端点(即两个套接字)所确定。 套接字可以看成是两个网络应用程序进行通信时,各自通信连接中的一个端点。通信时,其中的一个网络应用程序将要传输的一段信息写入它所在主机的Socket中,该Socket通过网络接口卡的传输介质将这段信息发送给另一台主机的Socket中

python-网络编程

断了今生、忘了曾经 提交于 2019-12-06 04:31:34
一:socket和套接字 1.1.什么是socket     socket 的原意是“插座”,在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。 1. 2.套接字分类 这个世界上有很多种套接字( socket ),比如 DARPA Internet 地址(Internet 套接字)、本地节点的路径名(Unix套接字)、CCITT X.25地址(X.25 套接字)等。 1.3.Internet 套接分类   Internet 套接字分成两种类型:   流格式套接字(Stream Sockets)也叫“面向连接的套接字”,在代码中使用 SOCK_STREAM 表示。   数据报格式套接字(Datagram Sockets)也叫“无连接的套接字”,在代码中使用 SOCK_DGRAM 表示。 1.4.无连接套接字 数据报格式套接字(Datagram Sockets)也叫“无连接的套接字”,在代码中使用 SOCK_DGRAM 表示。 计算机只管传输数据,不作数据校验,如果数据在传输中损坏,或者没有到达另一台计算机,是没有办法补救的。也就是说,数据错了就错了,无法重传。 因为数据报套接字所做的校验工作少,所以在传输效率方面比流格式套接字要高。 可以将

带外数据

空扰寡人 提交于 2019-12-06 03:23:59
  许多传输层有带外数据的概念,它有时也称为经加速数据。其想法是一个连接的某端发生了重要的事情,而且该端希望迅速通告其对端。这里“迅速”意味着这种通知应该在已排队等待发送的任何“普通”(有时称为“带内”)数据之前发送。也就是说,带外数据被认为具有比普通数据更高的优先级。带外数据并不需要在客户和服务器之间再使用一个连接,而是被映射到已有的连接中。   不幸的是,一旦超越普通概念光临现实世界,我们发现几乎每个传输层都各自有不同的带外数据实现。而UDP作为一个极端的例子,没有实现带外数据。 TCP带外数据   TCP并没有真正的带外数据,不过提供了我们接着要说的紧急模式。假设一个进程已经往一个TCP套接字写出N字节数据,而且TCP把这些数据排队在该套接字的发送缓冲区中,等着发送到对端。如图展示了这样的套接字发送缓冲区,并且标记了从1到N的数据字节。   该进程接着以MSG_OOB标志调用send函数写出一个含有ASCII字符a的单字节带外数据: send(fd,"a",1,MSG_OOB);   TCP把这个数据放置在该套接字发送缓冲区的下一个可用位置,并把该连接的TCP紧急指针设置成再下一个可用位置。如图展示了此时的套接字发送缓冲区,并且把带外字节标记为:“OOB”。   TCP紧急指针对应一个TCP序列号,它是使用MSG_OOB标志写出的最后一个数据字节(即带外字节)对应的序列号加1

Linux Systemd管理的12种服务单元

牧云@^-^@ 提交于 2019-12-06 02:32:26
在Linux中,systemd是排名第1的守护进程,它管理着很多服务单元(service unit),运行下面这个命令就能查询得到: # systemd --type help 显示的结果是12种业务单元: service,服务 一个或多个守护进程共同协作,向系统用户提供的一种功能,其名称后通常是.service,如firewalld.service提供的是防火墙服务,其功能包括规则的添加、修改、查询、删除,及使用netfilter来进行数据包过滤等等。这一类业务通常访问量较大,业务频繁。 而守护进程则是在后台运行的程序,一般跟着系统的关停而关停,且多以d为其名称最后一个字母,如firewalld。 systemctl --type=service socket,套接字 它负责一个进程与另一个进程的通信,即IPC - inter-process communication。进程A创建了一个套接字,等着别的进程来通信;进程B去连接那个套接字时,systemd会启动一个守护进程,将套接字提供给进程B。启动时,会有意将套接字的启动过程加以延时。通常套接字的访问不会太频繁。 target, 以.target为后缀的配置文件,负责将一组相关的服务单元组合在一起,以提供某个特定的运行环境。如multi-user.target是一个字符界面的窗口,graphical

ss,一个套接字分析工具

柔情痞子 提交于 2019-12-06 00:35:30
ss(Socket Statistics)是一个套接字的统计工具,是另一个更有名的同类工具netstat的升级版。相比较下,ss具有更强的性能,更强大的功能。 ss的主要参数如下:   -h, --help 帮助信息   -V, --version 程序版本信息   -n, --numeric 不解析服务名称   -r, --resolve 解析主机名   -a, --all 显示所有套接字   -l, --listening 显示监听状态的套接字   -o, --options 显示计时器信息   -e, --extended 显示详细的套接字信息   -m, --memory 显示套接字的内存使用情况   -p, --processes 显示使用套接字的进程   -i, --info 显示 TCP内部信息   -s, --summary 显示套接字使用概况   -4, --ipv4 仅显示IPv4的套接字   -6, --ipv6 仅显示IPv6的套接字   -0, --packet 显示 PACKET 套接字   -t, --tcp 仅显示 TCP套接字   -u, --udp 仅显示 UCP套接字   -d, --dccp 仅显示 DCCP套接字   -w, --raw 仅显示 RAW套接字   -x, --unix 仅显示 Unix套接字   -f, --family