zoukankan      html  css  js  c++  java
  • 课后练习 第一阶段:Python开发基础 day31 网络编程基础之基础知识小练习

    day31课后作业


    1.上课讲的网络协议5层模型,每层的内容整理出来

    物理层

    物理层功能:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0。网络数据就是通过这些电信号组成01010101100101的格式进行传输的。

    数据链路层

    把物理层的电信号分组,一组电信号构成一个数据报,叫做'帧',每一数据帧分成:报头head和数据data两部分。

    • head包含:(固定18个字节)
      • 发送者/源地址,6个字节
      • 接收者/目标地址,6个字节
      • 数据类型,6个字节
    • data包含:(最短46字节,最长1500字节)

    mac地址: 数据报中的发送者地址和接收者地址,就是mac地址。每一块网卡都有一个唯一的mac地址:12位16进制数表示(前6位是厂商编号,后6位是流水线号)

    广播:同一个局域网内通信,全靠吼,向局域网中的某一台电脑发数据,就需要向所有的电脑发请求,然后我们要接收的那台电脑获得数据。(群发)

    网络层

    • ip :ipv4:32位2进制表示:点分十进制表示 从0.0.0.0到255.255.255.255,范围是有限的,不能表示出所有的网络设备,于是出现了ipv6
    • 子网掩码:通过子网掩码和ip判断两个ip是否处于同一个网段,通过ip地址和子网掩码做按位与运算
    • ip跟mac有转换关系
      • 主机172.16.10.10/24访问172.16.10.11/24
        • ARP协议:广播的方式发送数据包,获取目标主机的mac地址
        • mac地址学习:mac地址和ip地址的映射表
        • 第一次接收到就会在ip/mac映射表中添加一条数据{’172.16.10.1’:‘localhost’}
        • 任何一种协议都有头和内容

    传输层

    • tcp协议:
      • 三次握手,四次挥手(重点,看图),连接如何建立,发数据如何保证可靠,断开如何断开,在建立连接过程中有状态
      • 服务的如果看到大量的syn_rcvd状态
      • dos和ddos攻击:拒绝服务攻击,分布式的拒绝服务攻击
      • 端口号:端口范围0-65535,0-1023为系统占用端口
    • udp协议:
      • 发送,不需要要响应,所以数据不可以靠,(看视频)
    • 端口
      • 通过ip+子网掩码唯一确定一台设备
      • 通过ip+子网掩码唯+端口号唯一确定一个软件
    • 半连接池

    应用层

    应用层由来:用户使用的都是应用程序,均工作于应用层,互联网是开发的,大家都可以开发自己的应用程序,数据多种多样,必须规定好数据的组织形式

    应用层功能:规定应用程序的数据格式。

    • 例:TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了”应用层”。

    2.画图描述三次握手、四次挥手,及c端和s端的状态

    三次握手:

    • 客户端向服务端发送连接请求。
    • 服务端回应同意用户端的请求,并向客户端发送连接请求。
    • 客户端回应服务端,同意连接。

    四次挥手:

    • 客户端向服务端发送断开请求。
    • 服务端回应同意客户端断开的请求。
    • 服务端向客户端发送断开请求。
    • 客户端回应同意服务端断开的请求。

    3.写一个客户端,实现给服务端发送hello world字符串,写一个服务端,将客户端发送的数据变成大写后返回

    服务端代码:

    import socket
    
    soc = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    
    soc.bind(('127.0.0.1',8081))
    soc.listen(5)
    conn,addr = soc.accept()
    print(addr)
    data = conn.recv(1024)
    
    conn.send(data.upper())
    conn.close()
    
    

    客户端代码:

    import socket
    soc = socket.socket()
    
    soc.connect(('127.0.0.1',8081))
    
    soc.send(b'hello world')
    
    data = soc.recv(1024)
    
    print(f'我收到了服务端回的消息:{data.decode("utf8")}')
    
    soc.close()
    

    运行结果:

    我收到了服务端回的消息:HELLO WORLD

    博客地址

    https://www.cnblogs.com/foreversun92/

  • 相关阅读:
    【记中关村.西北食府.兰州拉面】诗一首
    【新发地寻柑桔收购商】 诗一首
    【糖葫芦】诗一首
    【板栗饼】诗一首
    【白云观寻道】诗一首
    Android开发常用网站汇总
    BZOJ 2281 消失之物
    BZOJ 2281 消失之物
    BZOJ 4033: [HAOI2015]树上染色
    BZOJ 4033: [HAOI2015]树上染色
  • 原文地址:https://www.cnblogs.com/foreversun92/p/11468552.html
Copyright © 2011-2022 走看看