网络通信
Posted baoshuang0205
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络通信相关的知识,希望对你有一定的参考价值。
网络开发的架构:
C/S架构 客户端和服务端 (硬件:京东,淘宝,qq,微信,) (硬件:打印机)
client: 客户端 享受服务端提供服务
server: 服务端 给客户提供给服务
B/S架构 浏览器和服务端 (chrom,火狐,360,sogou,IE)
brower: 浏览器 (所有的B/S架构也是C/S架构 web编程 都是B/S架构的)
俩台机器之间的通信:
多台机器之间的通信:
通过交换机
ip地址:
每台机器在网络中除了有一个mac地址生效,
还有一个ip地址,虚拟地址,是一个随着时间/空间变化而改变的
ip地址的俩种协议:
ipv4 : 0.0.0.0 - 255.255.255.255 4位点分十进制
ipv6 : 0.0.0.0.0.0 - 255.255.255.255.255.255 6位:(冒号)分十六进制
特殊的俩种ip地址:
127.0.0.1 回环地址 测试地址 只有我自己能找到我 不过交换机直接找到自己 访问不到别人
0.0.0.0
arp协议功能:
通过要找的哪台机器的ip地址获取到mac地址的过程
交换机的工作方式:
只认识mac地址,不认识ip地址
单播 : 单独发给某个人或者说某个设备
广播 : 将要找的机器的信息发给局域网内的所有机器
组播:
内网ip和公网ip:
内网ip :校园网 公司的员工网
保留字段,专门给内网使用的,公网ip永远不会占用内网ip的地址
192.168.0.1 - 192.168.255.255
172.168.0.1 - 172.168.255.255
10.0.0.1 - 10.255.255.255
永远不会出现在公网里面
公网ip : 无论你在哪儿都可以使用的ip
0.0.0.0 - 255.255.255.255 全球的所有ip地址的集合
152.168.0.1 - 对应着一个固定的服务
路由器:
路由表
认识ip地址
管理网络,联通外网,并且路由转发,就是转发消息
机器a -->机器b
机器a -->交换机 -(网关ip)-> 路由器 -...-> 路由器 -(网关ip)-> 交换机 --> 机器b
我怎么知道机器a和机器b不是一个网段的?
子网掩码 :
计算目标IP地址是否和咱们是同一网段 同一网段的:广播发送 不同网段的:发送给路由 器 255.255.255.0,
机器a和子网掩码 进行一个按位与 网段信息
机器b和子网掩码 进行一个按位与 网段信息
两个网段信息一致说明是一个局域网的,不一致说明不在一个局域网
网关:
把关用的,公网IP或者外网IP,也可以说是路由器的IP地址
网段: 按位与运算: 1和任何数与都得任何数 0和任何数与都是0
255.255.255.0
print(bin(192))
print(bin(168))
print(bin(11))
print(bin(229))
11000000.10101000.00001011.11100101
11000000.10101000.00001011.10101000
11111111.11111111.11111111.00000000
端口:
标识电脑上某个应用程序,范围0-65535 0-1024 内部程序用的,我们一般使用的都是8000以后的 通 过IP地址+端口:我就能唯一确定一台电脑上的某个应用程序
192.168.11.229:3306 qq
传递信息的方式
TCP协议 打电话 : 可靠的面向连接的慢
UDP协议 发短信 : 不可靠的无连接的快
osi七层:
应用程 表示层 会话层 传输层 网络层 数据链路层 物理层
osi五层:
应用程 传输层 网络层 数据链路层 物理层
应用层 :
socket :承包了下面四层复杂的数据包的封装 抽象层
传输层 : tcp/udp 端口 四层路由器 四层交换机
网络层 : ip地址 三层路由器 三层交换机
数据链路层 : mac arp协议 二层交换机 网卡
物理层
数据链路层
物理层
网络层
数据链路层
物理层
socket ==套接字
server 服务端 import socket #引入网络编程模块 server = socket.socket() #创建一个socket对象 相当于创建了一部电话 ip_port = (‘192.168.15.50‘,8001) #创建了一张电话卡 #绑定IP地址和端口 server.bind(ip_port) #插上电话卡 #监听IP地址和端口 server.listen() #开机,后面等待链接的客户端个数为个 #等待客户端的链接 conn, addr = server.accept() #阻塞住,一直等到有人连接我, # 连接之后得到一个元祖,里面是连线通道conn和对方的地址(ip+端口) while True: #接收消息 from_client_msg = conn.recv(1024) #1024为消息大小,单位B,MB = 1024KB,1KB = 1024B #接收的消息是bytes类型,需要转换为字符串 from_client_msg = from_client_msg.decode(‘utf-8‘) print(from_client_msg) msg = input(‘我:‘) conn.send(msg.encode(‘utf-8‘)) #关闭链接 conn.close() server.close()
client 客户端 import socket #引入网络编程模块 client = socket.socket() server_ip_port = (‘192.168.15.50‘,8001) #链接服务端 client.connect(server_ip_port) while True: msg = input(‘客户想说:‘) #发消息 client.send(msg.encode(‘utf-8‘)) #send里面的消息必须是字节类型的 from_server_msg = client.recv(1024) #阻塞住,等待接收消息 from_server_msg = from_server_msg.decode(‘utf-8‘) print(from_server_msg) client.close()
以上是关于网络通信的主要内容,如果未能解决你的问题,请参考以下文章