python-网络编程
目录
.架构:
1.c/s架构(优势:能充分发挥PC机的性能)
2.b/s架构;(B/S架构 统一了应用的接口)
.网络基础:ip地址与ip协议
端口
mac地址:arp协议-查询ip地址和mac地址的关系
互联网协议与osi模型
socket模块
socket(套接字)
1.c/s架构(优势:就是能够充分发挥PC机的性能)
client与server 中文意思:客户端与服务端架构 这种架构也是从用户层面(也可以是物理层面)来划分的.
软件架构:京东,淘宝,qq,微信,暴风影音等
硬件cs架构:打印机
服务端:提供服务的 客户端:享受服务的
2.b/s架构(统一了应用的接口)
brower与server 中文意思:浏览器端与服务器端架构,这种从用户的层面来划分的.
IP地址与IP协议:
规定网络地址的协议叫ip地址,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示
范围0.0.0.0.-255.255.255.255
一个ip地址通常写成四段十进制,如:192.168.15.81
端口:标识电脑上某个应用程序,范围0-65535 0-1024内部应用的,我们一般使用的是8000以后的
通过ip地址+端口:我们就能唯一确定一台电脑上的某个应用应程序
mac地址:网卡唯一的标识,全球唯一,6位点分16进制
arp协议-查询ip地址和mac地址的对应关系
arp(address resolution protocol):地址解析协议,是根据目标ip地址获取目标物理地址的一个tcp/ip协议.
路由器:是用于连接多个逻辑上分开的网络,所谓逻辑网络是代表一个单独的网络或者是一个子网,管理局域网
局域网:是指在某一区域内由多台计算机互联成的计算机组成的.局域网是封闭行的,可以由办公室内的两台计算机组成,也可以是由一个公司的上千台计算机
子网掩码:计算目标ip地址是否和咱们是同一网段
同一网段的:广播(信息发给所有人)发送
不同网段的:发送给路由器
2.tcp与udp协议
tcp协议:
当应用程序希望通过 TCP 与另一个应用程序通信时,它会发送一个通信请求。
这个请求必须被送到一个确切的地址。在双方“握手”之后,TCP 将在两个应用程序之间建立一个全双工 (full-duplex) 的通信。
三次握手(一定是client先发起请求):
a 客户端发起请求连接服务器
b 服务器返回 : 接收到请求,并要求连接客户端
c 客户端回复 : 可以连接
四次挥手(谁先发起断开连接的请求都可以):
a 客户端发起断开连接的请求:意思是: 我想和你断开连接,我没有数据要继续发送了,但是如果你有数据需要发送,我可以继续接收
b 服务器回复 : 我接收到你的请求了
c 服务器发送 : 我已经准备好断开连接了
d 客户端回复 : 收到你的信息,断开连接
相对TCP协议而言,UDP协议 当应用程序希望通过UDP与一个应用程序通信时,传输数据之前源端和终端不建立连接。
当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。
tcp和udp的区别
tcp协议:面向连接,消息可靠,相对udp来讲,传输速度慢,消息是面向流的,无消息保护边界0
udp协议:面向无连接,消息不可靠,传输速度快,消息是面向包的,有消息保护边界.
osi模型:osi七层 tcp\ip五层 tcp\ip五层
socket(套接字)初使用:
基于tcp协议的socket
tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端
server端
import socket
sk = socket.socket()
sk.bind(('192.168.15.81',8898)) #把地址绑定到套接字
sk.listen() #监听链接
conn,addr = sk.accept() #接受客户端链接
ret = conn.recv(1024) #接收客户端信息
print(ret) #打印客户端信息
conn.send(b'hi') #向客户端发送信息
conn.close() #关闭客户端套接字
sk.close() #关闭服务器套接字(可选)
client端
import socket
sk = socket.socket() # 创建客户套接字
sk.connect(('192.168.15.81',8898)) # 尝试连接服务器
sk.send(b'hello!')
ret = sk.recv(1024) # 对话(发送/接收)
print(ret)
sk.close() # 关闭客户套接字
基于UDP协议的socket
server端
import socket
udp_server=socket.socket(type=socket.SOCK_DGRAM)
udp_server_ip_port=("192.168.15.81",8899)
udp_server.bind(udp_server_ip_port)
print("准备接受消息了....")
from_client_msg,client_addr=udp_server.recvfrom(1024)
print(1111)
print(from_client_msg)
print(client_addr)
udp_server.sento(b"guiduzi",client_addr)
udp_server.close()
client端
import socket
udp_client=socket.socket(type=socket.SOCK_DGRAM)
udp_server_ip_port=("192.168.15.81",8899)
udp_client.sendto(b"hello",udp_server_ip_port)
from_server_msg,server_addr=udp_client.recvfrom(1024)
print(from_server_msg)
print(server_addr)
udp_client.close()