网络通信-UDP

网络的介绍
  • 网络是什么
    • 利用通信线路将地理上分散的、具有独立功能的计算机和通信设备按不同的形式连接起来,以功能完善的网络软件及协议实现资源共享和信息传递的系统。
  • 使用网络的目的
    • 为了联通多方然后进行通信作用,既把数据从一方传递给另一方,实现多方互相传递数据,既进程之间的通信
IP地址
  • Internet Protocol Address(IP地址)是分配给网络上的设备(计算机)的数字标识,用来标记在网络中的一台电脑
  • IP地址的分类 
    •  
    • A类IP地址
      • 一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”,
      • 地址范围1.0.0.1-126.255.255.254二进制表示为:00000001 00000000 00000000 00000001 - 01111110 11111111 11111111 11111110
      • 可用的A类网络有126个,每个网络能容纳1677214个主机
    • B类IP地址
      • 一个B类IP地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”,地址范围128.1.0.1-191.255.255.254
      • 二进制表示为:10000000 00000001 00000000 00000001 - 10111111 11111111 11111111 11111110
      • 可用的B类网络有16384个,每个网络能容纳65534主机
    • C类IP地址
      • 一个C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是“110”范围192.0.1.1-223.255.255.254
      • 二进制表示为: 11000000 00000000 00000001 00000001 - 11011111 11111111 11111110 11111110
      • C类网络可达2097152个,每个网络能容纳254个主机 
    • D类地址用于多点广播
      • D类IP地址第一个字节以“1110”开始,它是一个专门保留的地址。
      • 它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中
      • 多点广播地址用来一次寻址一组计算机 s 地址范围224.0.0.1-239.255.255.254
    • E类IP地址
      • 以“1111”开始,为将来使用保留
      • E类地址保留,仅作实验和开发用
    • 私有ip
      • 在这么多网络IP中,国际规定有一部分IP地址是用于我们的局域网使用,也就
      • 是属于私网IP,不在公网中使用的,它们的范围是:
        • 10.0.0.0~10.255.255.255
        • 172.16.0.0~172.31.255.255
        • 192.168.0.0~192.168.255.255 
    • 注意:
端口---进程的入口
  • 端口号
    • 端口是通过端口号来标记的,用来标识主机中的服务、进程,端口号只有整数,范围是从0到65535
    • 端口号不是随机分配的,是按好一定的规则来分配的
  • 端口的分类
    • 知名端口(0-1023)
      • 一般情况下一个程序要使用知名端口要使用root权限
    • 非知名端口/动态端口(1024-65535)
      • 一般不固定分配服务端口,一般程序运行时向操作系统申请一个端口,在程序运行结束时释放该端口
socket-套接字
  • 不同电脑间是如何进行通信的
    • TCP/IP协议族已经帮我们解决了网络中的通信问题,网络层的ip地址可以唯一标记网络中的主机,传输层的“协议+端口”可以识别主机中的应用进程, 这样利用ip地址,协议,端口就可以表示网络中的进程,这样就可以通过在网络中进行两个地址之间的通讯。
  • socket(套接字)简介:
    • 概念:
      • 用于描述IP地址和端口,是一个通信资源的标识,可以用来实现不同计算机之间的通信,是不同主机之间通信的一种方式
      • 在套接字接口中,远程套接字地址(ip+port),以及本地套接字地址(ip+port)再加上使用的协议组成的套接字的五元组作为套接字对,用来表示两端主机建立的连接,之后就可以彼此通过socket进行数据的交流了
      • 同一个端口,可以同时使用相同的port维持TCP、UDP连接进行通讯,但是不能使用一个端口维持两个TCP或者UDP连接。
  • 网络协议参考模型
  • UDP通信模型
    •     
  •  使用udp-套接字  udp--用户数据报协议
    • 创建UDP套接字
      • udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        • AF_INET 表示 IPv4协议
        • SOCK_DGRAM 表示用户数据报协议
    • 发送数据
      • udp_socket.sendto(data, remote_address)
        • data 发送的数据
          • bytes类型数据
        • remote_address 远程地址元组(目标IP地址, 目标端口)
    • 接收数据
      • data, remote_address=udp_socket.recvfrom(max_len)  (会默认阻塞等待)
        • max_len 表示接收的 数据报长度(字节)
        • 返回值是 (报文数据, 远程地址) 构成的元组
        • remote_address是(IP, PORT)构成的元组
    • 关闭套接字
      • udp_socket.close()
        • 套接字本身会消耗一定的系统资源, 所以socket对象在使用完成之后一定要关闭
    • socket的bind操作
      • 作用:将进程和端口进行绑定
        • socket_obj.bind(ADDRESS)
          • socket_obj 为创建的套接字实例
          • ADDRESS是ip+port构成的元组 (host, port)
          • host通常以IP地址表示,' ' 空字符串表示本机'127.0.0.1'
    • UDP socket通信过程总结
    • 单播和广播
      • 单播与广播介绍
        • UDP支持单播和广播
        • 单播就是1对1的通信  udp socket默认开启
        • 广播就是1对n的通信  需手动开启
      • 使用方法
        • 开启广播(开启广播后,socket才能进行发送广播,对交换器发送数据默认为发送广播)
          • sock_obj.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)
          • sock.sendto(data.encode( ), dest_address)
            • 使用广播时,应该把数据发送给广播地址255.255.255.255
    • udp socket 的特点
      • 可能丢包/不保证数据达到顺序和发送一致

拓展知识
  • UDP数据封装和解包
  • 怎么查看套接字端口
  • 查询帮助手册
    • 在线手册
    • 本地内置手册
      • dir(模块名/函数名/模块名 )  "查询模块中的函数/类/变量名"
      • help(类名/函数名/模块名 )  "查看类/函数名/模块名的使用手册"












刘小恺(Kyle) wechat
如有疑问可联系博主