Python网络编程与并发(2)

1.TCP与UDP协议

在TCP/IP网络体系结构中,TCP(传输控制协议)、UDP(用户数据报协议)是传输层最重要的两种协议,为上层用户提供通信可靠性。

传输控制协议(TCP):定义了两台计算机之间进行可靠的传输而交换的数据和信息的格式以及计算机为了确保数据的正确到达而采取的措施。TCP提供的是面向连接、可靠的字节流服务。

用户数据包协议(UDP):是一个简单的面向数据报的传输层协议,提供的是非面向连接的、不可靠的数据流传输。UDP不提供可靠性,也不提供报文到达确认、排序以及流量控制等功能。它只是把应用程序传给IP层的数据发送出来,不能保证它们能到达目的地,因此报文可能丢失、重复以及乱序等。但由于UDP在传输前不在客户和服务器之间建立一个连接,且没有超时重发等机制,因此传输速度很快。

2.通道建立---三次握手

①在建立通道时,客户端首先要向服务器端发送一个SYN同步信号;

②服务端在接收到这个信号之后会向客户端发送SYN同步信号和ACK确认信号;

③当服务端的ACK和SYN到达客户端,客户端与服务端之间的这个通道就会被建立起来。

通道关闭---四次挥手

①在数据传输完毕之后,客户端会向服务端发出一个FIN终止信号;

②服务端在收到这个信号之后会向客户端发出一个ACK确认信号;

③如果服务端此后也没有数据发给客服端时,服务端会向客户端发送一个FIN终止信号;

④客户端收到这个信号之后会回复一个确认信号,在服务端收到这个信号后,服务端与客户端的通道也就关闭。

先发送数据的是客户端另一个是服务端。

3.HTTP协议

HTTP协议是简单的请求-响应协议,通常运行在TCP之上,是一个应用层协议。它指明了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。

HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程:

①客户与服务器建立连接;

②客户向服务器提出请求;

③服务器接受请求,并根据请求返回相应的文件作为应答;

④客户与服务器关闭连接。

客户与服务器之间的连接是一种一次性连接,它限制每次连接只处理一个请求,当服务器返回应答后,连接就会关闭。辎重一次性连接主要考虑到www服务器面向的是internet中有成千上万的用户,且只能提供有限个连接,故服务器不会让一个连接处于等待状态。

HTTP是一种无状态的协议,即服务器布保留与客户交易时的任何状态。HTTP时一种面向对象的协议,允许传送任意类型的数据对象。它通过数据类型和长度来标识所传送的数据内容和大小,并允许对数据进行压缩传送。

4.端口

端口指设备与外界网络进行通讯交流的出口,为了统一管理端口,给端口进行编号即端口号。

专用端口(范围是0~1023):80端口分配给HTTP服务;21端口分配给FTP服务。当某个程序需要使用专用端口时,需要有root权限。

动态端口:一般不固定分配某种服务而是动态分配,范围是1024~65535。

5.BS/CS架构

C/S是Client/Server的缩写。服务端常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或SQL Server。客户端需要安装专用的客户端软件。

B/S是Browser/Server的缩写,客户机上只需要安装一个浏览器,服务端安装Oracle、Sybase、Informix或SQL Server等数据库。用户完全通过浏览器实现,浏览器通过Web Server同数据库进行数据交互。

6.Socket套接字

Socket抽象层处在传输层与应用层之间,套接字相当于应用程序访问下层网络服务的接口。

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。它将复杂的TCP/IP协议隐藏在接口后面。

7.Socket编程

①一台机器上不同进程之间的通信方式:队列、同步(互斥锁、条件变量等)

网络中进程之间的通信:

网络层的IP地址可以唯一标识网络中的主机,而传输层的协议+端口可以唯一标识主机中的进程。

Socket是进程间的通信方式,能实现不同主机之间的进程间通信。

②Socket编程通过Python中的socket模块的函数socket实现。

socket.socket(AddressFamily,Type)

第一个参数指明网络通信还是本地通信,AF_INET用于网络进程间的通信,AF_UNIX用于同一台机器进程间的通信。

第二个参数是套接字类型,SOCK_STREAM基于字节流的套接字,主要用于TCP协议;SOCK_DGRAM数据报套接字,主要用于UDP协议。

③Socket发送数据实例

from socket import *
#1.创建一个UDP协议的套接字,然后发送一条数据到网络上的另一个进程
#创建套接字
client_socket = socket(AF_INET,SOCK_DGRAM)
#2.定义一个接受消息的目标
#8080是目标服务器的端口,127.0.0.1是目标服务器地址
server_host_port = ('127.0.0.1',8080)
#3.准备数据,encode将数据变为字节数组
datas = input("请输入要传输的数据:").encode('utf-8')
#4.发送数据
client_socket.sendto(datas,server_host_port)
print('发送完成')
#5.发送结束后关闭套接字,释放系统资源
client_socket.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长得丑就要多读书

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值