什么是协议(networking protocol)?
拿两个人说话为例,协议就是双方约定好都使用中文交流,或者都使用英语交流。
协议,网络协议的简称,networking protocol网络协议是通信计算机双方必须共同遵从的一组约定。
如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。它的三要素是:语法、语义、时序。
- OSI网络七层协议Open System Interconnection(开放式系统互联参考模型)
咱们按照5层协议来讲解下每层的作用(从下往上的顺序)
1、物理层
把数据打成01组成的电信号发送出去。
2、数据链路层
网卡上有厂商烧录的MAC地址。MAC地址|数据
通信方式-->广播
在小范围进行通信是没问题的,但是如果计算机的数量非常大,那么广播会带来广播风暴。
3、网络层
开始有了IP、子网掩码和网关,可以划分子网。IP地址|MAC地址|数据
IP地址,可以划分子网,子网掩码的作用就是可以判断目标地址是否是局域网的地址。
当前地址:192.168.1.125
子网掩码:255.255.255.0
目标地址:192.168.1.134
当前地址: 11000000 10101000 00000001 01111101
子网掩码: 11111111 11111111 11111111 00000000
与后结果: 11000000 10101000 00000001 00000000
目标地址: 11000000 10101000 00000001 10000110
子网掩码: 11111111 11111111 11111111 00000000
与后结果: 11000000 10101000 00000001 00000000
判断目标地址是否和当前地址是同一子网
将IP地址和子网掩码转换为01组成的8位二进制数,然后做与操作。与后的结果一样,说明在同一子网内。
def get_bin_lst(ip): """ 将IP地址和子网掩码转换为01组成的8位二进制数 :param ip: ip地址 :return: 二进制数 """ return list(map(lambda s: format(int(s), "08b"), ip.split("."))) def get_and_result(ip, subnet): """ 将IP地址和子网掩码转换为01组成的8位二进制数,然后做与操作 :param ip: ip地址 :param subnet: 子网掩码 :return: """ lst_ip = get_bin_lst(ip) lst_subnet = get_bin_lst(subnet) result = "" for i in range(4): res = "" for j in range(8): res += lst_ip[i][j] and lst_subnet[i][j] if j == 7: result += res + " " return result ip = "192.168.1.125" subnet = "255.255.255.0" target = "192.168.1.134" ip_res = get_and_result(ip, subnet) target_res = get_and_result(target, subnet) print(ip_res) print(target_res)
执行结果:
11111111 11111111 11111111 00000000 11111111 11111111 11111111 00000000
与后的结果一样,说明在同一子网内。
4、传输层
提供了端口port。port端口|IP地址|MAC地址|数据
TCP 基于连接的,可靠的,效率低。 类似于打电话。双方必须连接上才能说话。端口到65536,建议使用6000以上的端口。
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。
UDP 不基于连接的,不可靠的,效率高。类似于发信,写完信就发信,不管收件人收没收到。端口到65536,建议使用6000以上的端口。
Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)
5、应用层
HTTP、HTTPS、SMTP、POP3等应用协议。