网络编程
Posted lhy979
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程相关的知识,希望对你有一定的参考价值。
一.网络基础的相关知识
1.架构
(1)C/S 架构:client客户端 和 server服务器端
优点:能充分发挥PC机(电脑)的性能
(2)B/S 架构:browser浏览器 和 server服务器端 (隶属于C/S架构)
优点:统一了应用的接口
2.通信
(1)同一台电脑上的两个py程序通信 (比如:文件操作)
(2)两个电脑如何通信:连接一个网线
(3)多个电脑通信:交换机
两个电脑通信步骤:
(1)电脑一(源主机)要找电脑二(目标主机),先发送一个请求帧(源主机的ip地址:(192.168.12.1),mac是xxx,我要找ip地址为:(192,168,12,2)的主机),交给交换机
(2)交换机以广播的形式群发,除了给电脑一(源主机)之外的所有机器
(3)电脑二(目标主机)收到消息后,以单播的形式(我的ip地址是:(192.168.2),mac是yyy),请回复给ip为(192.168.1),mac为xxx的主机)回复给交换机,交换机再回复给电脑一(源主机)
3.相关知识点:
1.网卡
mac地址(物理地址) 也就类似于人的身份证号
mac地址全球唯一(可以唯一识别某一台电脑)
mac地址是网卡制造商给的
2.ip地址
ip地址是一个四位点分十进制,它标识了计算机在网络中的位置 也就类似于学生证号
3.arp协议
通过目标ip地址获取到目标mac地址的一个协议
4.端口的概念
操作系统OS为本机上每一个运行的程序都随机分配一个端口,其它电脑上的程序可以通过端口获取到这个程序
ip地址+端口:能唯一找到某一台电脑上的某一个服务程序
5.交换机的通信方式
广播的形式:吼一嗓子(类似于大喇叭)
单播:一对一
多播:一对多
6.路由器
连接不同网段(ip地址范围) ,路由(里面有一个路由表:网段和网关)
7.网关
类似于一个局域网的出口和入口
8.网段
一个局域网内的ip地址范围
9.子网掩码
子网掩码 &(and) ip地址 得到网段
例如:
子网掩码: 255.255.255.0 ==> 1111 1111. 1111 1111. 1111 1111. 0000 0000
196. 168. 12. 0
10.osi 五层模型
osi五层模型 |
每层运行常见的协议 |
每层运行常见的物理设备 |
应用层 |
http,https,ftp |
|
传输层 |
tcp协议,udp协议 |
四层交换机,四层路由器 |
网络层 |
ip协议 |
路由器,三层交换机 |
数据链路层 |
arp协议(与mac地址相关) |
网桥,以太网交换机(二层交换机),网卡 |
物理层 |
传输电信号 |
网线,光纤,集线器 |
二.socket模块
1.socket层
2.socket的其中两种类型:
(1)AF_UNIX:
(2)AF_INET:
3.tcp协议和udp协议 :
tup协议:可靠的,面向连接的,面向字节流形式的传输方式 (SOCK_STREAM)
udp协议:不可靠的,不面向连接的,面向数据报的传输方式,但是速度快 (SOCK_DGRAM)
4.tcp协议通信:第一次通信的例子
服务器端:
import socket
import time
sk = socket.socket()# 不传参数,默认使用基于网络类型的套接字, 协议 : TCP
sk.bind((‘192.168.12.104‘,18080))# 端口的范围是0-65535 但是 0-1023 这些你别用
sk.listen()# 同时能接受的连接
print(123)
conn,addr = sk.accept()# 等待接受客户端的连接 阻塞等待
print(456)
print(‘conn:‘,conn)
print(‘addr:‘,type(addr))
time.sleep(20)
conn.close()
sk.close()
客户端:
import socket
import time
sk = socket.socket()
sk.connect((‘192.168.12.104‘,18080))# 连接
time.sleep(20)
sk.close()
5.tcp协议:第二个通信的例子
服务器端:
import socket
import time
sk = socket.socket()# 我买一个新手机
sk.bind((‘192.168.12.104‘,18080))# 我买一个手机卡
sk.listen()# 开机
print(123)
conn,addr = sk.accept()# 等待朋友给我打电话
msg_r = conn.recv(10)# 接受数据,接受10个字节
print(msg_r.decode(‘utf-8‘),addr)
conn.close()# 挂断电话
sk.close() # 关机
客户端:
import socket
import time
sk = socket.socket()
sk.connect((‘192.168.12.104‘,18080))# 连接
sk.send(‘中文‘.encode(‘utf-8‘))
sk.close()
以上是关于网络编程的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段14——Vue的axios网络请求封装
VSCode自定义代码片段14——Vue的axios网络请求封装