day28 网络协议OSI 及socket模块

时间:2022-10-28 07:43:34

反射都是操作对象中的__dict__的内容

class Student:

def study(self):
print("正在学习....")

stu = Student()

if not hasattr(stu,"name"):
setattr(stu,"name","比格")

print(stu.name)

delattr(stu,"name")

# print(stu.name)

print(stu.study)

# delattr(stu,"study")

delattr(Student,"study")

def test():
pass

stu.test = test

print(stu.__dict__)

delattr(stu,"test")
print(stu.__dict__)

# 反射操作的都是对象__dict__中的内容

异常处理的目的 是提高程序的健壮性

### 网络通讯的基本要素
1.物理介质,网线,光纤,无线网络
2.通讯协议 用于规定双方如何交换数据
网络通讯的基本要素

1.物理介质 网线 光纤 无线网络
2.通讯协议 用于规定双方如何交换数据
OSI七层模型
OSI五层
应用层
传输层
网络层
数据链路层
物理层

物理层能够传输01101二进制
00001020120 102102102101021 02102100210201021020 102102102002102 1020120102121020
单纯的二进制是没有意义的 必须得知道如何解析这些二进制 这就有了数据链路层

工作在数据链路层的协议是以太网协议
以太协议的主要功能
1.定义电信信号的分组方式 一组有几个 那个部分代表什么含义
一组电信好最大为 1518
必须包含 head 和data
[head,data]
2.每个计算机必须具备网卡 网卡具备一个全球唯一的mac地址 可以用来表示唯一的一台计算机
3.由于不知道对方的mac地址 以太网通过广播的方式来进行通讯

网络层
工作在网络层是ip协议
会给每个计算机分配一个ip地址
四位的点分十进制
0.0.0.0 - 255.255.255.255
192.168.1.2
前三位称之为网络号
最后一位称为主机号

由于c类地址是共享的 所以 单独使用网络号 是无法区分子网
所以引入了子网掩码 专门用来验证两个ip地址是否属于同一个子网
子网掩码 只是区分而已
具体如何找 得靠网络号 通过路由协议来找到对方的网关

有了ip协议之后
可以通过网络号来定位全球范围内的某个局域网
通过主机号 来定位局域网中具体的某台计算机
虽然可以定位到以太计算机 但是 无法定位到某个应用程序

传输层
工作在传输层的两个协议 TCP/UDP
传输层要求必须为每一个需要联网应用程序绑定一个端口号 用于区分是哪一个应用程序
端口号就是一个整数 最大不超过65535
端口号在同一台计算机中不能重复 0 - 1024 是系统保留的端口
注意:不要使用常见的程序已经占用的端口 比如apache 的8080 mysql的 3306 FTP 21

这一堆网络协议 其实本质的就做两个事情
1.如何找到对方
2.数据如何发送

ip用来 标识一个局域网中的一台电脑 端口用于标识某个应用程序 至此 我们就可以准确的定位到某个计算机中的某个程序

TCP 是一种可靠的传输协议
可以保证数据传输是完整的
如何保证数据传输的完整的?
TCP在传输数据前 会经过一个三次握手的过程 来验证数据传输是否可靠
在断开连接前 会经过四次挥手的过程 来保证数据完整传输了

在三次握手时 的确保证了数据传输是可靠 但是后续 有可能 由于种种原因 例如网络中断 ,,丢包等等 导致数据不完整

所以 TCP的解决方案
每次发送数据报 都需要对方返回一个确认信息
如果一段时间后 对方没有返回 就重复发送
直到重试的次数 超过某个指定的值 就判断连接已经丢失

TCP的优点: 可以保证数据完整性
由于需要接收确认信息 所以整体传输效率较低

物理层能够传输0101二进制
单纯的二进制是没有意义的,必须知道如何解析这些二进制

A类B类地址的查找需要使用网络层协议,通过ip地址确认子网和主机,在A类和B类地址下,可以创建很多c类局域网,子网掩码就使用区分在找到ip地址的情况下,确认计算机是否在其下面的同一子网使用的

TCP
三次握手
连接是虚拟的概念,不存在

数据传输的过程就是我方电脑层层封包,对方电脑层层解包的过程

### socket使用
"""
socket是什么?

socket是Python提供的一个模块 当然其他的任何语言也都有

用于处理网络传输相关的操作 其实就是封装了
底层复杂 丑陋的TCP和UDP协议
对外提高简单 优雅的使用接口

socket的作用?
减少网络编程的工作量

如何使用socket模块
"""
import socket

# 默认使用的是TCP协议
# 创建socket对象

# CS构架的程序必然有客户端程序 和 服务器端程序
# 为了统一使用方式 服务器端和客户端使用的都是socket

soc = socket.socket()

# 作为服务器放必须为socket指定 ip和端口号
soc.bind(("192.168.12.141",1988)) # 端口不能超过65535 明确饭店地址

# 开始监听端口 相当于饭店开门了 等着顾客来
soc.listen()

# 接收客户端的连接请求
client,address = soc.accept()

# 接收
data = client.recv(1024)

print(data.decode("utf-8"))

# 发送
client.send("我是你的服务器 ".encode("utf-8"))

# 要注意 在服务端 收发数据是客户端socket来完成的 服务器端的sock 只做处理连接
# 收发数据都是bytes类型

# 关闭socket 回收资源
soc.close()

#### socket客户端
import socket

# 创建socket对象
client = socket.socket()

# 连接服务器
client.connect(("192.168.12.141",1988)) # 就是在做三次握手

# 收发数据
client.send("你好".encode("utf-8"))

data = client.recv(1024)
print(data.decode("utf-8"))

# 关闭连接
client.close() # 在做四次挥手操作

day28 网络协议OSI 及socket模块的更多相关文章

  1. Python网络协议(osi七层协议)

    一 互联网的本质 咱们先不说互联网是如何通信的(发送数据,文件等),先用一个经典的例子,给大家说明什么是互联网通信. 现在追溯到八九十年代,当时电话刚刚兴起,还没有手机的概念,只是有线电话,那么此时你 ...

  2. 网络知识--OSI七层网络与TCP/IP五层网络架构及二层/三层网络

    作为一个合格的运维人员,一定要熟悉掌握OSI七层网络和TCP/IP五层网络结构知识. 废话不多说!下面就逐一展开对这两个网络架构知识的说明:一.OSI七层网络协议OSI是Open System Int ...

  3. 网络协议,socket模块

    """网络通讯要素:1.物理介质2.通讯协议 osi五层模型 应用层 传输层 网络层 数据链路层 物理层 物理层能传输010101二进制单纯的二进制是没有意义的,必须得知 ...

  4. 网络编程基础:网络基础之网络协议、socket模块

    操作系统(简称OS)基础: 应用软件不能直接操作硬件,能直接操作硬件的只有操作系统:所以,应用软件可以通过操作系统来间接操作硬件 网络基础之网络协议: 网络通讯原理: 连接两台计算机之间的Intern ...

  5. 8.6 day27 网络编程 osi七层协议 Time模块补充知识 TCP协议

    Time模块补充知识 date和datetime区别是什么? date 就是年月日 datetime就是年月时时分秒 以下代码为什么会报错? import json from datetime imp ...

  6. Python网络编程(socket模块、缓冲区、http协议)

      网络的概念:主机   端口  IP  协议 服务器: localhost/127.0.0.1 客户端: 只是在本机启动客户端,用127.0.0.1访问     服务器: 0.0.0.0 客户端: ...

  7. 8.7 day28 网络编程 socket套接字 半连接池 通信循环 粘包问题 struct模块

    前置知识:不同计算机程序之间的数据传输 应用程序中的数据都是从程序所在计算机内存中读取的. 内存中的数据是从硬盘读取或者网络传输过来的 不同计算机程序数据传输需要经过七层协议物理连接介质才能到达目标程 ...

  8. 网络编程—网络基础概览、socket,TCP/UDP协议

    网络基础概览 socket概览 socket模块—TCP/UDP的实现 TCP/UDP总结 网络基础概览 osi七层协议各层主要的协议 # 物理层传输电信号1010101010 # 数据链路层,以太网 ...

  9. python 全栈开发,Day33(tcp协议和udp协议,互联网协议与osi模型,socket概念,套接字(socket)初使用)

    先来回顾一下昨天的内容 网络编程开发架构 B/S C/S架构网卡 mac地址网段 ip地址 : 表示了一台电脑在网络中的位置 子网掩码 : ip和子网掩码按位与得到网段 网关ip : 内置在路由器中的 ...

随机推荐

  1. [转]强悍的跨平台开源多媒体中心XBMC介绍

    [转]强悍的跨平台开源多媒体中心XBMC介绍 http://www.cnblogs.com/mythou/p/3220898.html 最近都在了解Android下的音视频,因为最近需要做一个多媒体中 ...

  2. 【AIX】AIX 6.1 “C compiler cc is not found”问题的解决方案

    一.问题的由来 前几天在AIX中安装部署 nginx-1.4.1,报如下错误: # cd nginx-1.4.1 # ./configure checking for OS  + AIX 1 0004 ...

  3. 异步tcp通信——APM.Core 服务端概述

    为什么使用异步 异步线程是由线程池负责管理,而多线程,我们可以自己控制,当然在多线程中我们也可以使用线程池.就拿网络扒虫而言,如果使用异步模式去实现,它使用线程池进行管理.异步操作执行时,会将操作丢给 ...

  4. 第13天 JSTL标签、MVC设计模式、BeanUtils工具类

    第13天 JSTL标签.MVC设计模式.BeanUtils工具类 目录 1.    JSTL的核心标签库使用必须会使用    1 1.1.    c:if标签    1 1.2.    c:choos ...

  5. 【USACO】奶牛* 树状数组+dp

    题目描述 约翰家的 N 头奶牛正在排队游行*.一些奶牛情绪激动,约翰测算下来,排在第 i 位的奶牛 的理智度为 A i ,数字可正可负. 约翰希望奶牛在*时保持理性,为此,他打算将这条队伍分割成几 ...

  6. thymeleaf:局部变量 th:with

    当th:with被处理,firstPer变量创建一个局部变量和变量添加到map自上下文,以便它是用于评估和其他上下文中声明的变量从开始,但只有包含< div >标记的范围内. <di ...

  7. Example11&lpar;June 9&comma;2015&rpar;

    %--------------sort------------------------------- >> A=[ ; ; ] A = >> B=sort(A,)%A(:,)& ...

  8. Java并发(零)教程目录

    上网看博客的时候无意中发现了有一个Java并发的教程还不错,有20多篇讲并发的,一天翻译1篇似乎也不太难.Let's go! 原文地址:http://tutorials.jenkov.com/java ...

  9. jmeter之JDBC的使用

     一.配置JDBC Request 1.添加需要的驱动jar包 使用不同的数据库,我们需要引入不同的jar包. 方式1:直接将jar包复制到jmeter的lib目录 mysql数据库:下载mysql- ...

  10. linux 学习第九天

    一.磁盘 (FHS:Filesystem Hierarchy Standard(文件系统层次化标准)的缩写) 1.常用目录 /var  主要存放经常变化的文件,如日志 /usr/local  用户自行 ...