s21day28 python笔记
s21day28 python笔记
一、内容回顾
二、tcp / udp 协议
2.1 tcp协议
- 特点:
- 可靠,慢,全双工通信
- 建立连接时:三次握手
- 断开连接时:四次挥手
- 在建立起连接之后
- 发送的每一条信息都有回执
- 为了保证数据的完整性,还有重传机制
- 长连接:会一直占用双方的端口
- IO(input,output)操作,输入和输出是相对内存来说的
- write send - output
- read recv - input
- 能够传递的数据长度几乎没有限制
- 应用场景:
- 文件的上传下载
- 发送邮件,网盘,缓存电影等
- 文件的上传下载
2.2 udp协议
- 特点:
- 无连接的,速度快
- 可能会丢消息
- 能够传递的数据长度是有限的,是根据数据传递设备的设置有关系
- 应用场景:
- 即时通信类
- qq,微信,飞秋等
- 即时通信类
三、osi七层模型/osi五层协议
3.1 osi七层模型
- 第七层:应用层
- 第六层:表示层
- 第五层:会话层
- 第四层:传输层
- 第三层:网络层
- 第二层:数据链路层
- 第一层:物理层
3.2 osi五层协议
层数 | 名称 | 内容 | 协议 | 物理设备 |
---|---|---|---|---|
第五层 | 应用层 | python代码 | http/https/ftp/smtp协议 | |
第四层 | 传输层 | port端口 | tcp/udp协议 | 四层路由器,四层交换机 |
第三层 | 网络层 | ip地址 | ipv4/ipv6协议 | (三层)路由器,三层交换机 |
第二层 | 数据链路层 | mac地址 | arp协议 | 网卡,(二层)交换机 |
第一层 | 物理层 |
四、socket(套接字)
基本知识:
- 通过python的socket模块,完成socket的功能
- 工作在应用层和传输层之间的抽象层,帮助我们完成了所有信息的组织和拼接
- sokcet对于程序员来说,已经是网络操作的底层了
- socket历史
- 早期:基于文件,同一台机器上的两个服务之间的通信
- 现在:基于网路,多台机器之间的多个服务通信
基于tcp协议的socket:
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。- tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端
# server.py 服务端 import socket sk = socket.socket() sk.bind(('127.0.0.1',8898)) # 把地址绑定到套接字 sk.listen() # 监听链接 conn,addr = sk.accept() # 接受客户端链接 ret = conn.recv(1024) # 接收客户端信息 print(ret) # 打印客户端信息 conn.send(b'hi') # 向客户端发送信息 conn.close() # 关闭客户端套接字 sk.close() # 关闭服务器套接字(可选) # client.py 客户端 import socket sk = socket.socket() # 创建客户套接字 sk.connect(('127.0.0.1',8898)) # 尝试连接服务器 sk.send(b'hello!') ret = sk.recv(1024) # 对话(发送/接收) print(ret) sk.close() # 关闭客户套接字 # 注意:运行时,先执行server.py,再执行client.py
基于udp协议的socket:
- udp是无链接的,启动服务之后可以直接接受消息,不需要提前建立链接
# server.py 服务端 import socket sk = socket.socket(type=socket.SOCK_DGRAM) # 创建一个服务器的套接字 sk.bind(('127.0.0.1',9000)) # 绑定服务器套接字 msg,addr = sk.recvfrom(1024) print(msg) sk.sendto(b'hi',addr) # 对话(接收与发送) sk.close() # 关闭服务器套接字 # client.py 客户端 import socket sk = socket.socket(type=socket.SOCK_DGRAM) sk.sendto(b'hello',('127.0.0.1',9000)) msg = sk.recv(1024) print(msg.decode('utf-8')) sk.close()

更多精彩