【Python网络编程】
接上一篇文章~
Python网络编程
话不多说先上大图:
一、计网知识回顾
计算机的网络分为三类:
- 广域网(WAN)
- 城域网(MAN)
- 局域网(LAN)
1、OSI体系中计算机网络的层次结构包括
① 应用层 为计算机用户提供接口和服务
② 表示层 数据处理(编码解码、加密解密)
③ 会话层 建立、维护、重连通信会话
④ 传输层 管理端到端的通信连接
⑤ 网路层 数据路由
⑥ 数据链路层 管理相邻节点之间的数据通信
⑦ 物理层 数据通信的光电物理特征
2、TCP/IP四层模型结构
① 数据链路层:数据链路层负责在物理介质上建立、维持和断开连接,它将网络层传输的数据封装成帧,确保数据在局域网或其他物理网络上的传输。
② 网络层:网络层的作用是将数据包从源设备传输到目标设备,并根据目标地址将数据包路由到正确的路径。
③ 传输层:传输层负责端到端的数据传输,确保数据可靠地从源设备传输到目的设备。
④ 应用层:应用层位于 TCP/IP 模型的最上层,直接与用户交互,提供应用程序所需的通信服务。
这两种结构的对比图附上:
3、计算机网络性能指标
- 速率
- 时延
- 往返时间RTT
子网掩码:转换成二进制后1表示的位置相同就在同一网段 注意同一网段的IP不一定在同一子网,因为子网掩码不同,子网掩码与IP做位与运算得到子网网段
4、物理层
物理层的作用是:连接不同的物理设备,传输比特流
物理层的设备包括:中继器、集线器
这里补充一下在物理层通讯中所用到的物理支持:信道
与总线类似,他有三种模式的
① 单工通信通道
② 半双工通信信道 双方不能同时发送接收
③ 全双工通信通道 双方都可以同时发送和接受
5、数据链路层
它将网络层的数据可靠的传输到相邻的节点网络层 作用包括物理地址寻址、数据的成帧、流量控制、数据的检错、重发等
① 数据链路层为网络层提供可靠的数据传输
② 基本数据单位为帧 将数据封装成帧
③ 主要的协议:以太网协议
④ 重要的设备:网桥和交换机(用于数据链路层 连接两个同构网络 不能连接不同网段)
⑤ 透明传输 帧首帧尾(控制字符)当作不存在处理
数据链路层会进行差错检验,检验方式为:
- 奇偶校验 奇校验看1的个数为奇数,校验位为0;偶校验看1的个数为偶数,校验位为0
- 海明校验 它通过在数据中插入冗余比特位来进行校验
- 循环冗余校验 将数据块视为一个多项式,并与预定的多项式进行除法运算来生成校验码(CRC)
这三种校验方式这里不做赘述,需要自己去做一个推算比较清楚。
6、网络层
实现两个端系统之间的数据透明传送
① 网络层负责对子网间的数据包进行路由选择
② 基本数据单位为IP数据报
③ 主要协议IP协议 ICMP协议 ARP协议 RARP协议
④ 重要设备路由器
7、传输层
负责将上层数据分段并提供端到端的、可靠的或不可靠的传输。
① 主要协议:TCP协议、UDP协议
② 重要设备:网关
1、用户数据报协议(UDP协议)
UDP是无连接协议、不能保证可靠的交付数据、面向报文传输、没有拥塞控制、首部开销很小;
2、传输控制协议(TCP协议)
TCP可以对应用层报文进行分段和重组,实现端到端控制,寻址,拥塞避免,差错检验;TCP可以实现端到端的可靠数据传输。
TCP标记:URG紧急位、ACK确认位、PSH推送位、RST重置位、SYN同步位、FIN终止位;
3、TCP的三次握手:
① 第一次握手 客户发送请求,此时服务器知道客户能发
② 第二次握手 服务器发送确认,此时客户知道服务器能发能收
③ 第三次握手 客户发送确认,此时服务器知道客户能收
4、TCP的四次挥手
① 客户向服务器发送释放连接报文段 客户端状态由ESTABLISHED进入FIN_WAIT_1
② 服务器向客户发送确认段 服务器状态由ESTABLISHED进入CLOSE_WAIT;客户端收到ACK后,由FIN_WAIT_1进入FIN_WAIT_2
③ 服务器向客户发送释放连接报文段,服务器状态由CLOSE_WAIT进入LAST_ACK(最后确认状态)
④ 客户向服务器发送确认段,客户端状态由FIN_WAIT_2进入TIME_WAIT,等待2MSL时间,进入CLOSED状态;服务器在收到最后一次ACK后,由LAST_ACK进入CLOSED;
8、应用层
为操作系统或网络应用程序提供访问网络服务的接口 主要协议 FTP、TeInet、DNS、SMTP、POP3、HTTP
① IP->DNS服务->便于记忆的域名
② 顶级域(com,cn,net,gov,org)、二级域(baidu、taobao、qq)、三级域(WWW)
二、DHCP 是一个局域网协议,是应用UDP协议的应用层协议。
三、HTTP协议 端口80 使用TCP连接方式
① 文件传输协议FTP 端口21
② HTTPS协议 端口号443
二、python网络编程
1、网络编程三要素:
1、IP
2、端口
3、协议
2、Python中的网络编程
在python中使用Socket套接字是一个非常方便的网络编程方式。
Socket是python网络编程的内置库,分为客户端socket 和服务端socket ,两个socket进行链接即可通信.
2.1 服务端Socket
服务端socket步骤:
- 绑定IP和端口
- 设置监听个数和其它参数.
- 处于监听状态.
- 使用监听到的socket进行通信,
- 服务器soecket一般永不关闭.
import socket
# 1. 创建服务端套接字对象
server_socket = socket.socket() # 实例化一个socket类的对象,然后起名服务端socket
# 2. 绑定端口号 注意这里的参数是一个tuple
server_socket.bind(("127.0.0.1",9999))
# 3. 设置监听
server_socket.listen(10)
# 4. 等待接受客户端的连接请求
link_socket,address_info = server_socket.accept() # 等待接收客户端的消息... (阻塞)
print(link_socket)
print(address_info)
# 5.接收浏览器的数据.
byte_info = link_socket.recv(1024)
print(byte_info.decode('utf-8'))
# 6. 发送数据
link_socket.send("你好.我服务器小马".encode('utf-8'))
# 7. 关闭套接字
link_socket.close()
2.2 客户端Socket
客户端socket任务是:
1.连接服务器socket ,
2.收发数据,
3.断开连接
# 导入socket 模块
import socket
# 1.创建socket类的对象
socket_cli = socket.socket()
# 2.通过IP和端口连接到服务器 这里的参数传递也是tuple
socket_cli.connect(("localhost",9999))
# 3.发送数据到服务器
socket_cli.send("你好,我是客户小明".encode('utf-8'))
# 4.接收数据
bytes_info = socket_cli.recv(1024)
# 5.字节转字符串
print(bytes_info.decode('utf-8'))
# 6.断开连接
socket_cli.close()
更多推荐

所有评论(0)