网编
内容回顾
#__author : 'liuyang' #date : 2019/4/9 0009 上午 8:54 # 概念 # 架构 : BS CS # 硬件 #网卡 : 计算机中帮助我们完成网络通信 #交换机: 在局域网内多台机器之间通信 #路由器: 多个局域网之间的机器之间的通信 # 局域网:一个区域内的多台机器组成的一个内部网络 #(以前ip地址可以访问网站)ip地址是变得 域名不变 域名找Ip地址 # 域名: 和ip地址有一个对应的关系,我们访问的域名经过解析也能的到一个ip地址 # 协议类:(你是不是培训的,太系统了) #arp协议:通过ip地址获得mac地址 #ip协议 :ip地址的规范 #ipv4\ipv6 # 地址类: #ip地址 : 四位的点分十进制 #mac地址 :12位十六进制 #子网掩码:ip地址,255.255.255.0,255.255.0.0,255.0.0.0 #网关ip : ip地址,你所在的网段和网关所在的网段是一样的 (出局域网的时候用到网关ip) #保留字段: #内网 #安全 #ip地址不够用 #10.0.0.1-10.255.255.255 #172.16.0.0-172.31.255.255 #192.168.0.0 - 192.168.255.255 #本地回环地址127.0.0.1 #全网段地址 0.0.0.0
osi 协议
#__author : 'liuyang' #date : 2019/4/9 0009 上午 10:15 # TCP协议 # 面向连接\可靠\慢\对传递的数据的长短没有要求 # 两台机器之间要想传递信息必须先建立连接 # 之后在有了连接的基础上,进行信息的传递 # 可靠 : 数据不会丢失 不会重复被接收 # 慢: 每一次发送的数据还要等待结果 # 三次握手和四次握手 # UDP协议 # 无连接\不可靠\快\不能传输过长的数据 # 机器之间传递信息不需要建立连接,直接发就行 # 不可靠 :数据有可能丢失 # 优点的好带来了缺点的坏 # UDP 协议:即时通讯类的软件(不可靠):qq 微信 飞信 歪歪 # TCP 协议:发邮件\文件(QQ文件pdf...) 因为 一个错了全乱码了 走的是tcp协议 # 高清丢帧 不清楚了TCP(清楚) 在线观看 就很清楚 UDP(流畅) # 一般都是混用 #中间过程 # 发了很多条 收到了哪一条啊 # 我发 你好3730 收到发3731 再发3732 收到3733 # 没收到: 1 发过去的信息丢了 2 发回来的信息丢了 # 一直发3730 一直发3731 收到了 #初始过程 # 每次 需要两次 才能发送数据 明白 # 刚开始 每个两次=4次 建立连接从哪开始的 全双工的通信方式 #三次握手 两句通讯合并成一句 #断开 # 四次挥手 : 我断了不传了 但是,你要传 好你断了 和我没断 不能合并 # SYN 请求连接 ..seq = X # ACK 回复连接 ACK = X+1 SYN seq = y # FIN 请求断开 # osi 七层协议 #要发‘hello,world’先带tcp/udp #1010101010101断句不知 #端口 对方端口 #ip 对方ip #mac 对方mac #若tcp 还得握手 从哪条信息开始 # mac 地址 # 比如#接收 0-47 我的mac # 48-95 你的mac # tcp / udp协议 # 96- 150 我的ip #150- 200 你的ip # 端口协议 #200 - 220 你的端口 #220 - 240 我的端口 # 信息 # 弄出了个抽象层 #osi 七层协议 #应用层 #python send(b'hello,world') #表示层 #会话层 合并到应用层 #传输层 #网络层 #数据链路层 #物理层 #应用层 #程序 #python send(b'hello,world') #socket # # 以后可不用 socket 了(最底层) http协议 #传输层 #端口 tcp/udp协议 四层路由器 四层交换机 (可以理解端口tcp都行) #网络层 #ip地址相关 ip协议 路由器(有交换机的功能) 三层交换机(可理解ip和IP协议)(交换机具有路由器的功能) #数据链路层 #mac 地址相关 arp协议 网卡 二层交换机 #物理层 #从下往上走 确定mac 地址是不是对上 # U型 从上往下 从下往上 又对应地址 物 数 网 传 应 # 每一层都有协议 物理层不关心 都有设备
server
#__author : 'liuyang' #date : 2019/4/9 0009 上午 9:21 import socket sk = socket.socket() #socket对象,实际上存储了所有的操作系统提供给我们的网络资源 #硬件资源 网卡 和 内存运行的 需要操作系统支持 sk.bind(('127.0.0.1',9000)) # sk.bind(('192.168.16.13',9000))#和我在一个局域网内的所有机器都可已访问我 # #但是如果这个代码已交给其他机器执行 # #需要把ip地址修改成另一台机器的ip # sk.bind(('0.0.0.0',9000)) #所有访问我这台机器的通信还是使用我的ip地址 # #不需要改程序:ip地址 移交到运维可以运行 #9000被其它端口占用着 会报错 sk.listen() #py3.4 括号里需要加int数字,(占线)等几个人 #现在无需等了 # conn,addr = sk.accept() #等待用户来连接我 # print(conn) #像一个联通的电话线,记录server的地址,client的地址#连通了才能打电话 # print(addr) # conn.send() #str 是字符串 'alex' #byte是字节 两种不同的数据类型 b'alex' #str -编码(encode)->bytes #bytes - 解码(decode)-->str #b'娃哈哈' 报错 没有byte 类型 # '娃哈哈'.encode('utf-8') # input 输入的所有都是字符串,要进行网络传输,必须编码变成bytes # while 1: # i = input('>>>') # if i.endswith() =='q' # conn.send(i.encode('utf-8')) while 1: conn, addr = sk.accept() # 等待用户来连接我 i = input('>>>') if i.upper() == 'Q': break conn.send(i.encode('utf-8')) content = conn.recv(1024) # 102444444内存放不下 print(content.decode('utf-8')) #解码 conn.close() sk.close() # server 要面对很多个client 给他们都打电话
#__author : 'liuyang' #date : 2019/4/9 0009 上午 9:21 import socket sk = socket.socket() sk.connect(('127.0.0.1', 9000)) # 三次握手 while True: ret = sk.recv(1024).decode('utf-8') #两次拉手 if ret.upper() == 'Q': break i = input('>>>') print(ret) # sk.send(i.encode('utf-8')) sk.send(i.encode('utf-8')) if i.upper() == 'Q': break sk.close() #四次挥手 # 不需要conn 被打进来
#__author : 'liuyang' #date : 2019/4/9 0009 上午 9:21 import socket sk = socket.socket() sk.connect(('127.0.0.1', 9000)) # 三次握手 while True: ret = sk.recv(1024).decode('utf-8') #两次拉手 if ret.upper() == 'Q': break i = input('>>>') print(ret) # sk.send(i.encode('utf-8')) sk.send(i.encode('utf-8')) if i.upper() == 'Q': break sk.close() #四次挥手 # 不需要conn 被打进来
udp的server
import socket sk = socket.socket(type=socket.SOCK_DGRAM) sk.bind(('127.0.0.1',9001)) while 1: con = input('>>>') msg,client_addr = sk.recvfrom(1024) print(msg) sk.sendto(con.encode('utf-8'),client_addr) sk.close() # 登录伴整途 前端 网页。。。。
client
import socket sk = socket.socket(type=socket.SOCK_DGRAM) #udp协议 默认的是tcp协议 while 1: con = input('>>>') if con.upper() == "Q":break sk.sendto(con.encode('utf-8'),('127.0.0.1',9001)) #发送 msg = sk.recv(1024).decode('utf-8') #接受 如果关心他从哪来的 from 没有recv if msg.upper()=="Q":break print(msg) sk.close()
# 1 .tcp 协议 和udp 协议的区别总结
#2 . 默写:1) osi 五层协议+物理设备 + 协议
2)udp协议的代码
#3 基于tcp 协议完成一个登陆
#input 用户名和密码 client
#验证 server
#进阶 :hashlib 密文验证
#4 实现一个局域udp 协议的多人聊天
#一对多:每个人都有一个自己的id 或者名字
#进阶: 每一个人都是一个客户端,传给服务器,比较麻烦
#像qq一样你登录之后,就可以选一个人给他发消息