zoukankan      html  css  js  c++  java
  • 【0905 | Day 30】网络编程

    网络编程

    Part1:网络协议(五层模型)

    网络协议:又称OSI七层协议,分为应用层(应用层,表示层,会话层)、传输层、网络层、数据链路层、物理层。

    第一层:物理层

    主要接受01010001等电信号

    第二层:数据链接层

    将物理层的电信号分组。

    • 每一组叫一个数据报(数据帧),都有报头和数据部分 (头:固定18个字节,6:发送者地址 6:接收者地址 6:数据类型)
    • mac地址:发送者,接收者地址,就是mac地址
    • 每块网卡都有一个唯一mac地址:12位16进制数表示(前六位是厂商编号,后六位是流水线号)
    • 广播:同一个局域网内通信,会出现广播风暴

    第三层:网络层

    已有自己的mac地址,访问对象,发送自己的IP和目标IP,通过arp协议广播发送,目标用户确认IP后发送mac地址,获取对方mac地址填入mac地址。

    • ip

      ipv4:32位2进制表示:点分十进制表示 从0.0.0.0到255.255.255.255,范围是有限的,不能表示出所有的网络设备,于是出现了ipv6
      
    • 子网掩码:通过子网掩码和ip判断两个ip是否处于同一个网段,通过ip地址和子网掩码做按位与运算

      1. ip地址:  172.16.10.1:      10101100.00010000.00001010.000000001
      2. 子网掩码:255.255.255.0:     11111111.11111111.11111111.000000000
      3. 按位与运算:172.16.10.0      10101100.00010000.00001010.000000000
         -172.16.10.10/24  包含了ip地址和子网掩码
      
    • ip跟mac有转换关系

      1. 主机172.16.10.10/24访问172.16.10.11/24
      2. ARP协议:广播的方式发送数据包,获取目标主机的mac地址
      3. mac地址学习:mac地址和ip地址的映射表
      	第一次接收到就会在ip/mac映射表中添加一条数据{’172.16.10.11“:ddsadfgegsdgsdg}
      

    • **任何一种协议都有头和内容 **

    第四层:传输层

    端口与端口连接

    • tcp协议

      发送请求,等待响应,建立连接,信息交互

      1. 三次握手
      2. 四次挥手
      3. 连接如何建立
      4. 发数据如何保证可靠
      5. 断开如何断开
      6. 在建立连接过程中有状态
      7. 服务如果看到大量的syn_rcvd状态
          - 表示正在遭受dos攻击,因为一直有人发送请求,响应后却没有回复
      8. dos和ddos攻击
      9. 拒绝服务攻击
      10. 分布式的拒绝服务攻击
      11. 端口号:端口范围0-65535,0-1023为系统占用端口
      
    • udp协议

      只发送请求,不需要对方响应,因此数据不可靠(例如看视频)

    • 端口

      1. 通过ip+子网掩码唯一确定一台设备
      2. 通过ip+子网掩码唯+端口号唯一确定一个软件
      
    • 半连接池
      限制的是同一时刻的请求数,而非连接数

     1.  与可建立的数量无关,只与接受的请求有关,但仍旧无法规避dos攻击
    

    第五层:应用层

    进入进程服务

    Part2:描述三次握手和四次挥手,并展示C端和S端状态

    一、三次握手

    第一版>>>

    第二版>>>

    二、四次挥手

    第一版>>>

    第二版>>>

    Part3:写一个客户端,实现给服务端发送请求;写一个服务端,实现给客户端的数据变成大写返回

    #客户端
    
    import socket
    
    soc = socket.socket()
    soc.connect(('192.168.11.185', 8080))
    soc.send(b'Hello World!')
    
    data = soc.recv(1024)
    print('客户端已收到服务端发送的:', data)
    
    soc.close()
    
    #服务端
    
    import socket
    
    soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    soc.bind(('192.168.11.185', 8080))  
    
    soc.listen(5)
    conn, addr = soc.accept()
    
    data = conn.recv(1024).upper()
    print('服务端已收到客服发送的:', data)
    
    conn.send(b'Do you have any more problem?')
    
    conn.close()
    soc.close()
    
  • 相关阅读:
    OO第四单元作业总结暨完结撒花
    OO第三单元作业总结【自我审判】
    菜鸡学C语言之知识点简单整理
    菜鸡学C语言之混凝土(四柱汉诺塔)
    OO第二单元作业总结【自我反思与审视】
    菜鸡学C语言之寻根溯源
    菜鸡学C语言之真心话大冒险
    菜鸡学C语言之摸鱼村村长
    OO面向对象第一单元总结
    day10 python全栈学习笔记
  • 原文地址:https://www.cnblogs.com/fxyadela/p/11466854.html
Copyright © 2011-2022 走看看