网络的介绍
- 网络是什么
- 利用通信线路将地理上分散的、具有独立功能的计算机和通信设备按不同的形式连接起来,以功能完善的网络软件及协议实现资源共享和信息传递的系统。
- 使用网络的目的
- 为了联通多方然后进行通信作用,既把数据从一方传递给另一方,实现多方互相传递数据,既进程之间的通信
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
- 注意:
- IP地址127.0.0.1~127.255.255.255用于回路测试,如:127.0.0.1可以代表本机IP地址,用http://127.0.0.1就可以测试本机中配置的Web服务器。
端口---进程的入口
- 端口号
- 端口是通过端口号来标记的,用来标识主机中的服务、进程,端口号只有整数,范围是从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(类名/函数名/模块名 ) "查看类/函数名/模块名的使用手册"