【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()
原文地址:https://www.cnblogs.com/fxyadela/p/11466854.html