网络和http协议理论
===
协议protocol:两台计算机互相通讯,需要定义规则,如何发现对方、谁先发起通讯、通讯语言规则、结束通讯标识。
## TCP/IP协议族
协议族:不止一个协议,一堆协议的总称
- TCP UDP:传输控制协议。
- IP: 网络地址
- HTTP:hyper text transfer protocol 超文本传输协议。 html
- DNS: 域名解析
- PPPoE:拨号上网、连接网络服务商。 例如联通宽带我世界拨号上网。
- FTP: file transfer 文件传输。
- ICMP SNMP : mail 邮件 。
- IEEE 802.3: ethernet 以太网 ,局域网。 802.11无线网卡wifi。
- ARP:地址解析协议 。
## 网络通讯概览
客户端→ 协议转发 到各个节点路由 →服务器端
客户端:个人电脑
服务器端:别人的电脑,提供网站服务内容的平台。
## http协议
形如 http://www.baidu.com
浏览器会自动默认省略http前缀。
网页是有html书写的。http协议非常流行。
### 三次握手
http协议为了准确送达和请求数据,不考虑规则细节,宏观上主要三个步骤:
1. 发送syn synchronize同步标识。目的打招呼,看网络通不通,服务器是否能提供服务。
2. 服务器端 发送 syn/ack acknowledgement 标识。告诉客户端我准备好了,你可以请求我。
3. 客户端收到 syn/ack标识后,开始请求。
### http报文结构
(后面详细讲解)
## TCP和UDP
### TCP协议
transfer control protocol 传输控制协议。
报文:按照一定结构封装的数据信息。例如http报文包含信息 目的地ip、请求方法、请求url地址等。
http协议底层基于TCP协议。宏观上看,http报文通过三次握手发送到服务端。底层上 http请求会先拆分为一段段的TCP报文。TCP报文包含请求地址、请求信息等。当服务收到tcp报文后会再组合成http报文。
场景:http协议、网页信息。
### UDP协议
user datagram protocol 用户数据报协议。
客户端直接与服务端传输数据,不需要握手和校验。
所以UDP协议可能数据会丢失或传输错误,但优点传输快。
场景:视频、游戏数据。 所以少量数据报丢失不影响大致体验。
## dns协议
域名domain:形如 www.baidu.com www.1owo.com www.xx.cn
ip地址:形如 192.168.221.73 47.222.57.222
比较:域名好像人的名字,优点好记。ip地址好像人的身份证号,优点易被计算机处理。
为什么发明域名:本来计算机网络就是靠ip地址来区分和访问。问题一,当你访问的网站多达上百了个时,数字组成的ip地址很难记。问题二,公司升级或更换电脑,迁移部署在服务器上的网站时,ip地址变化,不容易通知老客户网站,导致老客户访问不了网站。不好维护。
所以发明了域名。域名由英文和数字组成,好记。建立域名到ip地址的映射关系。 www.baidu.com → 47.222.15.55 。 如果百度换服务器,只用维护修改映射关系,普通仍然访问域名不需变化。
DNS:domain name system 域名系统。
DNS服务器:各个网站 域名转换ip的关系需要记录到一个服务器上服务大众。
### 流程
需求: 访问taobao.com
1. 客户端访问当地运营商的DNS服务器,请求查询taobao.com的ip地址。
2. DNS服务器返回taobao.com对应的ip地址。
3. 根据ip地址请求taobao服务器。
### hosts文件
打开一个网页 有信息有图片,请求几十次。如果每一次都查询dns服务器,将消耗资源,所以浏览器会缓存映射关系。
电脑本地也有一个dns关系缓存配置文件,hosts。windows系统 C://Windows/system32/drivers/etc/hosts 。用管理员权限记事本打开可以编辑。
hosts 里的定义优先级最高。如果浏览器访问一个网站,会先去hosts文件查询,如果查到ip直接访问,如果没查到再去查询dns服务器。
### (了解)pycharm破解原理
(请优先支持正版)
百度“lanyu”[itellij破解码](https://www.baidu.com/link?url=ErAYrqFtWKAYiE2_-PlCCCOmTULwlQUJYxd5WgvN-ZaNqHe_rGmBns9J45hTxCu4&wd=&eqid=fd78cf0d000221c7000000035bed3316)
如果直接把激活码放入pycharm激活,会几秒提示失效。原理pycharm会每隔一段时间自动请求官方服务器验证激活真伪,假激活码不在官方服务器中,服务器就会通知客户端退出。
所以修改hosts文件,添加“0.0.0.0 account.jetbrains.com” ,这样pycharm后台验证请求时,不会请求真实的官方网站,而是会请求0.0.0.0特殊ip地址,请求都会被丢弃。这样假激活码就可以长时间使用。
### (了解)墙的原理
(license:以下内容复制自网络)
DNS污染:运营商控制着DNS服务器,修改了一些网站的映射信息。例如 www.google.com → 67.22.22.22,把真实的ip地址置换为一个错误的ip地址编程 www.google.com → 0.0.0.0 ,
这时用户就无法访问。
其它措施如GFW government fire wall。
### (了解)FQ的第一种方法
修改hosts文件。因为墙的原理污染dns服务器,hosts文件优先级更高。所以可以网上找别人整理好的hosts文件,内容是常用国外网址和对应的真实ip地址。优点免费、易于修改。缺点:突破封锁能力一般。
寻找hosts文件:github 码云上搜索 "hosts", 百度“laoD"
[google hosts镜像](https://github.com/googlehosts/hosts)
## 局域网 ARP
ARP协议:地址解析,发现局域网中的其它电脑地址并探测。
ip地址:网络分配的一个地址。就好像大街上的门牌号。
mac地址:物理地址,形如 00-0E-01-AA-12-12 ,每一块网卡有一个全球唯一的编号。电脑网络硬件唯一标识。
## IP协议
ip地址 形如 45.222.222.21 ,由4个字节组成,每一段的范围0-255。
### 分类
A类:
B类:
C类:
### 特殊地址
127.0.0.1 localhost ,本地ip地址,代表你自己正在操作的电脑。
0.0.0.0 ,空地址, 请求都会被丢弃。
169.254.*.* , 保留地址,dhcp服务无法分配。
192.168.*.* , 局域网地址。
### 局域网地址
10开头的。192.168开头的。
例如 192.168.1.*
对应二进制 11000000 10101000 00000001 0000000-11111111 ,前24位固定,后8位排列组合分配给网段内机器。
网关:一般为 192.168.1.1 , 一个局域网段的门口,一般给路由器使用。
支持的局域网ip: 192.168.1.2 -- 192.168.1.254 ,两百多台机器。
下一间屋子就可以换下第3端数字继续 192.168.2.*
同一局域网段内: 192.168.221.50 → 192.168.221.73
跨局域网段(路由器连接并允许沟通) 192.168.221.50(321教室某同学) → 192.168.221.1(321教室的路由器网关)→ 192.168.222.1(320教室路由器)→ 192.168.222.30(320教室某同学)
同一局域网内的电脑超过了256台:解决方案,ip地址一共32位,前24位固定,后面8位共256种可能分配局域网电脑和网关。前面固定位数减少,后面组合的位数增加,所以出现10开头的局域网ip段支持更多电脑。
子网掩码:同一个局域ip地址,不知道固定的是多少位,自由组合多少位,产生歧义。定义局域网ip地址前多少位是固定的。
例如:192.168.221.73
二进制 11000000 10101000 11011101 01001001 前24位固定
子网掩码 11111111 11111111 11111111 00000000 固定用1表示
子网十进制 255.255.255.0 也就是说上面局域网ip 192.168.221部分是固定的。
### dhcp协议
DHCP协议:因为配置静态ip比较麻烦和专业。所以出现了dhcp 动态dns分配协议。路由器如果开启dhcp服务,那么会为接入局域网的电脑设备自动分配局域网ip、网关、子网掩码。优势是比较方便。相关设置 dhcp的ip池 100-150最多支持50台, 设置ip过期时间。ip过期后会重新分配ip。
静态ip:如果有更精细的需求,应该手动配置静态ip。
### ping tracert命令 百度“IP”
ping www.baidu.com
服务器返回几次少量数据、传输用时ms,看网络通不通。(个别服务器安全原因禁止ping)
tracert www.baidu.com 会跟踪路由节点跳转的详细信息。
作业(选做):tracert可视化工具、提供节点ip对应的运营商信息。
百度"ip": 查看自己电脑的公网ipv4地址。
### 了解)ipv6
ipv4除去一些特殊网段,加上网络在全球非常流行,每个人的都有手机电脑等网络设备,ipv4地址紧缺不够用,ipv6地址正在推广中。
## 整体流程
1. 客户端浏览器想请求一个页面域名
2. 请求DNS服务器获得网页对应ip地址
3. 构造http请求报文
4. http拆分成多个tcp报文
5. tcp报文通过包含的ip信息 跳转路由
6. 服务器收到tcp报文
7. 服务器tcp报文组装还原成http报文信息
8. 服务器根据http请求返回相应资源,返回响应内容。传输过程同上。
## 深入http协议
### requests和response概览
请求request
属性:
- 请求方法:GET、POST
- host:目标地址
- connection:keep alive或指定过期时间
- cookie:比方,浏览器自带的小数据库。客户端每次请求都会带上cookie信息。
- user-agent: 用户的浏览器信息
响应response
属性:
- Content-Type: 内容类型,字符编码
- Data:时间
- Set-Cookie:服务端让浏览器存储的信息。
- status-code: 响应码。判断成功或失败原因。
- 返回的具体信息: html、js css png 。
### URI URL
URI(Uniform Resource Identifier)统一资源标识符,互联网某一资源的位置的表示。
URL(Uniform Resource Locator) 统一资源定位符。
区别:URI概念宽泛, D://xxx.jpg https://www.baidu.com/logo.jpg,
URL是URI的子集https://www.baidu.com/logo.jpg 。
### URL构成
https://zzk.cnblogs.com/dir/L11/8.html?w=blog%3Awuyun-blog%20dd
http://news.baidu.com/ns?word=python&tn=news&from=news&cl=2&rn=20&ct=1
- 协议:http https
- 认证(了解): http代理 用户名、密码。
- 域名:www.baidu.com
- 文件层级: dir/L11/8.html 请求访问资源的路径
- 参数:随请求发送的参数。键值对形式?word=python&tn=news
### GET POST
场景:
get: 取服务器资源,绝大部分http请求都是get请求。
post: 浏览器信息传递到服务器,期望服务器进行存储或计算。表单提交,有安全性要求的请求。服务器开销比get大。
区别(面试题):
- 浏览器请求头request method中看出 。
- get请求url中可以看到参数。post请求的参数在http请求体中,url中看不到,因此post请求更加安全。
- get请求url长度有限制,不适合参数特别多和传输信息大。
- get可以回退浏览器读缓存;post每次重新提交
option 客户端请求操作服务器。已经被封装了。
(不常用)put 请求服务器存储资源 ,delete 请求删除。这两种请求都可以由post代替。
工具:谷歌浏览器右键开发者工具/ network中看到。
### 状态码
服务器响应的status code状态,表示请求成功还是失败。
- 200 成功
- 304 重定向
- 403 没有权限访问
- 404 找不到资源
- 500 内部错误,代码写错
- 502 网关错误 ,路由问题 服务器压力大未及时响应
### session会话 和 cookie小饼干
http是无状态的。比如 发送了一个含有用户名密码的post登录请求,服务器验证通过后返回需要权限才能浏览的页面。但时处于稳定和节省资源考虑,http发明时定义服务器不需要存储额外数据(访问者ip、用户名、密码)。当第二次访问时,服务器不知道你已经登录了。那么每次访问都需要输入用户名密码,显然不可能。
(面试题)session cookie区别?
session 会话:抽象概念,浏览器跟服务器通讯的过程,几分钟、几小时,持续沟通的过程。
cookie:浏览器自带的一个小数据库,用来存储信息,(存储 用户名、密码、会话id)。服务器response让客户端设置cookie。每次客户端请求服务器会把同一域名下的cookie中的值给带上。可以再chrome开发者工具application看到。
权限验证流程:
1. 浏览器请求登录,携带用户名和密码信息。
2. cookie中的数据值可见,密码存到cookie有安全问题。
3. 解决办法,服务器验证用户名密码,权限通过,根据用户信息生成一个哈希加密的字符串session_id或token,形如'ie234tDI45DKF566JD',服务器会临时保存这个字符串。
4. 服务器返回具体网页内容和session_id,告诉浏览器把session_id这个字符串存到cookies当中。
5. 浏览器每次访问时都会带上cookie。服务器验证cookie中的session_id比对,如果存在说明用户已经登录。这样就可以保持会话持续。
### https
https:Hyper Text Transfer Protocol over Secure Socket Layer 基于安全套接字层的http协议。加密方式ssl tsl。防止http请求过程中被中间人抓取、攻击。比http更加安全。
(课外)CA证书 CA机构 对称加密 非对称加密 中间人攻击。
### 代理服务器
我的电脑 → 中介电脑 → 目的网页。
场景:科学上网。爬虫。