zoukankan      html  css  js  c++  java
  • 异常,网络编程

    异常 网络编程

    异常:
    异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止)
    异常分两种:逻辑错误,语法错误
    没运行时,语法错误会被python解释器检测到,
    程序运行时,会报逻辑错误
    常用语法:
    try except

    网络编程:
    C/S架构,client 客户端 server服务器
    实现服务端软件与客户端软件基于网络通信
    B/S架构,browser 浏览器,server

    实现网络编程的两大条件:
    1.物理介质:光纤,光缆,网线,无线电波
    2.互联网协议

    互联网协议:osi七层,osi五层,osi四层

    osi七层:
    应用层,表示层,会话层、
    传输层
    网络层
    数据链路层
    物理层

    osi五层:
    应用层,传输层,网络层,数据链路层,物理层

    osi四层:
    应用层,传输层,网络层,网络接口层
    物理层:发送电信号(本质发送二进制,0,1)
    数据链路层:
    单纯的发二进制没有任何意义,必须规定电信号多少位一组,每组什么意思
    数据链路层功能:定义了电信号的分组方式,根据以太网协议(ethernet)

    ethernet规定:
    ①一组电信号组成一个数据报,称为“帧”
    ②每一数据帧分成:报头head和数据data两部分

    head包含18字节:源地址6个字节,目标地址6个字节,数据类型6个字节
    data包含至少46字节最大1500字节
    故帧的长度为64字节到1518字节,超过最大限制就会分片发送

    源地址和目标地址为mac地址,以太网规定接入internet的电脑必须有网卡,每块网卡出厂时都会被烧录了一个世界上唯一的mac地址
    mac地址是用来确认局域网内一台计算机位置
    有了mac地址,以太网采取广播的方式进行通信:即拿到消息后给局域网内的每台计算机都发一份,各计算机拆包时发现mac地址是自己的才会查看信息,但是如果所有的通信都采用广播的方式的话,那么1台机器发送的包全世界都会受到,这将不仅仅是效率低的问题,这会是一场灾难,即广播风暴

    网络层:
    网络层功能:引入一套新的地址来区分不同的局域网,即网络地址

    遵循IP协议:ipv4,ipv6
    1.范围0.0.0.0 - 255.255.255.255
    2.1个ip地址通常写成四段十进制数,例如172.16.10.1
    故ipv4位四段十进制数,ipv6为6段十进制数

    在局域网呢,我们可以自己设置ip地址,故可能重复,ip并不能判定两台电脑是否在同一个局域网中
    子网掩码:表示子网络特征的一个参数
    是用来标识一个ip地址的哪些位是代表网络位,哪些位是主机位,子网掩码不能单独存在,必须结合ip地址使用
    子网掩码只有一个作用,就是将某个ip地址分成网络地址和主机地址

    子网掩码决定的是一个子网的电脑数目,计算公式是2的n次方,其中,我们可以把n看成是最后一个1后面有多少个0。如255.255.255.0转换成二进制,那就是11111111.11111111.11111111.00000000,后面有8个0,那n就是8,255.255.255.0这个子网掩码可以容纳2的8次方台pc,也就是256台,但有两个ip是不能用的,那就是最后一段不能为0和255,减去这两个,就是254台。
    我们再来看一个例子:
    255.255.248.0这个子网掩码可以最多容纳多少台电脑?
    算法:
      把将其转换为四段二进制数(每段8位,不足8位前面填0补齐)
      11111111.1111111.11111000.00000000
      然后,数数后面有几个0,一共是有11个,那就是2的11次方,等于2048,这个子网掩码最多可以容纳2048-2=2046台电脑。
    如何确认多台电脑是否处于1个局域网中:
    将ip地址和子网掩码转换为二进制,并进行按位与运算(即同为1变为1),将得到的结果转换为十进制
    如果大家的十进制相同,则处于同一局域网中

    ip地址分类:A类地址,B类地址,C类地址,D类地址,E类地址
    A:1个字节的网络地址和3个字节的主机地址组成(即子网掩码255.0.0.0)
    地址范围由1.0.0.0到126.0.0.0 A类网络有126个,每个网络能容纳1亿多主机
    B:2个字节的网络地址和2个字节的主机地址组成(即子网掩码255.255.0.0)
    地址范围由128.0.0.0到191.255.255.255,B类网络16382个,每个网络可容纳6万多个主机
    C:3个字节网络地址和1个字节主机地址组成(即子网掩码255.255.255.0)
    地址范围由192.0.0.0到233.255.255.255 c类网络209万,每个网络可容纳254个主机
    D:多点广播,Multicast
    E:备用地址

    回环地址127.0.0.1又称本机地址,将自己电脑设为服务器的时候使用

    ARP(地址解析)协议:用于获得目标主机的mac地址
    功能:广播的方式发送数据包,获取目标主机的mac地址
    前提:每台主机的ip都是已知的,即arp可以通过ip地址解析出目标主机的mac地址

    在通信之前,目标主机的ip是一定可以或得的,目标主机的mac是一定拿不到的
    拿到目标主机的ip地址后,arp会封一个包
    源mac:本机mac
    目标mac:12位都为F,FFFFFFFFFFFF
    源ip:本机ip
    目标ip:可以获得

    交换机拿到这个包,一看到12位都是FFFFFFFFFFFF就知道是广播包,
    通过子网掩码可以判断出本机ip和目标ip是否处于同一个局域网内,如果处于同一局域网呢,就广播,目标主机拆包时发现是自己的ip就将mac地址返回给源主机,交换机有mac地址学习功能,会记录下此mac地址与对应端口的联系,
    如果发现不是同一个子网,就会给该子网的网卡发送,目标网卡拿到包后在它的局域网呢广播,目的主机拆包发现是自己的ip就将mac返回给网卡,网卡返回给源主机的网卡,这样就拿到了mac地址,可以进行通信了
    通过网络层的ip协议我们可以定位到目标属于哪一个子网,通过arp协议获得目的主机mac地址,我们就可以找到我们需要通信的主机
    传输层:
    我们要完成的是应用程序到应用程序的通信,故此时找到了计算机,还需要有协议让我们找到应用程序

    TCP/UDP协议
    功能:建立端口到端口的通信
    端口范围:0-65535 其中0-1024为系统占用端口
    uploading-image-375797.png

    TCP 安全,效率低,好人协议,谁发请求都会,客户端不回应继续发请求,syn洪水攻击
    UDP不可靠传输协议,效率高

    #服务端
    import socket
    soc = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#买电话
    soc.bind(("127.0.0.1",8080))#绑卡
    soc.listen(5)#开机,监听
    conn,cliend_addr = soc.accpet()#等待电话连接,阻塞操作,三次握手
    #收发消息
    msg = conn.recv(1024)
    conn.send(msg.upper())
    conn.close()#挂电话
    soc.close()#关机
    
    #客户端
    import socket
    client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    client.connect(("127.0.0.1",8080))#拨电话,地址,三次握手
    client.send("hello".encode("utf-8"))#发信息
    client.recv(1024)#接收信息,会阻塞
    client.close()#关机
    
    
    
  • 相关阅读:
    ios 数据类型转换 UIImage转换为NSData NSData转换为NSString
    iOS UI 12 block传值
    iOS UI 11 单例
    iOS UI 08 uitableview 自定义cell
    iOS UI 07 uitableviewi3
    iOS UI 07 uitableviewi2
    iOS UI 07 uitableview
    iOS UI 05 传值
    iOS UI 04 轨道和动画
    iOS UI 03 事件和手势
  • 原文地址:https://www.cnblogs.com/robert-zhou/p/10156963.html
Copyright © 2011-2022 走看看