网络基础

一:网络开发的架构 :
C/S
client 客户端
server 服务端
B/S
browser 浏览器(chrom,火狐,360,sogou,IE)
server
所有的B/S架构也是C/S架构的
B/S架构更好
浏览器解放了你电脑上的图标
web编程 都是B/S架构的

 
 
 

两台机器之间的通信
网卡 - mac地址 - 物理地址

如果是多台机器之间通信?
交换机
11010198808082288(人) -- mac地址(机器)
不能用一个mac地址来找寻全中国的机器

每台机器在网络中除了有一个mac地址生效
还有一个ip地址,虚拟地址,是一个随着时间/空间变化而改变的
ipv4 0.0.0.0 - 255.255.255.255
ipv6 0.0.0.0.0.0 - 255.255.255.255.255.255
127.0.0.1
0.0.0.0

交换机的工作方式
单播\广播\组播
arp协议 : 通过ip找mac
交换机-->广播 将要找的机器的信息发给局域网内的所有机器
交换机-->单播 返回要找机器的那台机器

公网ip : 无论你在哪儿都可以使用的ip
0.0.0.0 - 255.255.255.255 全球的所有ip地址的集合
152.168.0.1 - 对应着一个固定的服务
内网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

腾讯 百度 sogou 360 有公网ip
租云服务器

局域网与局域网之间的机器通信
你要找的两台机器之间的网络是通的

机器a -->机器b
机器a -->交换机 -(网关ip)-> 路由器 -...-> 路由器 -(网关ip)-> 交换机 --> 机器b
我怎么知道机器a和机器b不是一个网段的?
子网掩码
机器a和子网掩码 进行一个按位与 网段信息
机器b和子网掩码 进行一个按位与 网段信息
两个网段信息一致说明是一个局域网的,不一致说明不在一个局域网

192.168.11.168
192.168.11.229
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

11000000.10101000.00001011.00000000 = 192.168.11.0
11000000.10101000.00001011.00000000 = 192.168.11.0

ip协议 :
ipv4 : 4位点分十进制
ipv6 : 6位:分十六进制
arp协议 : 通过ip找mac
交换机的工作机制 :只认识mac地址,广播\单播\组播
路由器的工作机制 :路由表,认识ip地址
什么是网关ip
什么是子网掩码
自己的ip地址

两台机器联系在一起了
很多和网络相关的应用 : 发给我的qq\微信\飞秋
端口 0-65535 # 通过某一个端口定位到机器上的某一个应用
每一台机器有很多个端口 0-65535
8000以后
3306 mysql数据库
8080 端口
22 端口 操作系统ssh命令

传递信息的方式
TCP协议 打电话 : 可靠的\面向连接的\慢
UDP协议 发短信 : 不可靠的\无连接的\快

计算机 : 五层
应用层 :
socket :承包了下面四层复杂的数据包的封装
传输层 : tcp/udp 端口 四层路由器 四层交换机
网络层 : ip地址 三层路由器 三层交换机
数据链路层 : mac arp协议 二层交换机 网卡
物理层

二层交换机 :
数据链路层
物理层

三层路由器 :
网络层
数据链路层
物理层
 
数据类型 : int str bytes
编码 : ascii utf-8 gbk
为什么我们的计算机中会有文字\字母\数字
01
二进制 --> 十进制
计算机习惯用 人用

如果像字典一样给每一个文字字母和数字都添加一个编号,就可以用数字表示其他元素了
数字 字母 常用的符号 阿拉伯文 第一批我们说的ascii 0-255

65 : A # 65 十进制 转成2进制 1000001
66 : B
print(bin(65))
print(bin(250)) # 11111010
print(chr(250)) # chr接受一个ascii码,返回一个对应的字符
Aú 01000001 11111010
字节 8位是一个字节

1字节 = 8位2进制数
byte bit
bytes

中国放一些中文进去
ascii
256 : 中文的字 国标码 '中'
日本人
256 : 日本的字 日标码 'yo'
unicode
全世界的语言都编进去了
至少要用2字节来表示一个字符
00000000001000001
utf-8
01000001
11111111 11111111
11111111 11111111 11111111

ascii
各自国家的标准码(没有统一)
unicode 万国码 浪费空间
utf-8 节省空间的 万国码

文件存储在硬盘上 : 010101010
二进制 -8位一读-> 字节
bytes --> str字符串 # 你要确认bytes类型到底是什么编码的
bytes.decode('utf-8')

str --> bytes
str.encode('utf-8') # utf-8编码之后的字节 '中'
str.encode('其他编码') # utf-8编码之后的字节 'yo'

1.所有编码与编码之间的关系 : ascii码 各自国家的编码(gbk gb2312) unicode(万国码) utf-8(存储了所有国家中的文字)
2.你读出来的字符 --> 字节
字符串数据类型中的一个元素 就是一个字符 如果是中文字符串,每一个"字"都是一个字符
如果是英文字符串,每一个"字母"都是一个字符
每一个字符都可以转换成对应的 字节 bytes
bytes是最接近二进制的内容
3.能在文件中存储的\在网络上传输的都是二进制
但是计算机中我们传递数据不需要程序员自己去把要传递的内容转成二进制了
你只需要把内容转换成bytes(字节)就可以了
4.所以如果是utf-8编码的化 对于数字\字母\符号你的转换永远遵循ascii,且只占1个字节
5.并且在网络上传输的由于都是字节,所以我们所计算的传输长度,也是字节的长度而不是字符的长度
recv(1024) 1024代表字节
'hello,中国' # 8个字符 = 6个字节 + 3个字节*2 = 6+6 = 12个字节
所以我们send的时候send的是字节串,我们接收的时候也接受的是字节串
6.你不能在网络上传递int类型,只能传bytes
int --> str --> bytes
5 '5' b'5'

 

posted @ 2019-04-08 21:40  __Invoker  阅读(131)  评论(0编辑  收藏  举报