网络和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。 ### (了解)翻墙的第一种方法 修改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机构 对称加密 非对称加密 中间人攻击。 ### 代理服务器 我的电脑 → 中介电脑 → 目的网页。 场景:科学上网。爬虫。
网络和http协议理论
最新推荐文章于 2021-06-29 11:21:14 发布