夯实基础系列二:网络知识总结

比特觅星鹤
• 阅读 2591

前言

无论是 C/S 开发还是 B/S 开发,无论是前端开发还是后台开发,网络总是无法避免的,数据如何传输,如何保证正确性和可靠性,如何提高传输效率,如何解决会话管理问题,如何在网络拥堵环境下采取措施。这些都是需要了解的。

今天总结下与网络相关的知识,不是那么详细,但是包含了我认为重要的所有点。如果想深入了解的可以参考《图解HTTP[上野 宣]》、《图解TCP/IP(第5版)[竹下隆史]》以及计算机网络相关教材。

概要

网络知识我做了 8 个方面的总结,包括DNS协议,HTTP协议,HTTPS协议,TCP协议,IP协议,TCP/IP,Web攻击,其他协议。以下对这些内容做一些简单的总结,同时我也有完整的思维导图,博客上不方便展示,底部公众号回复 网络或者加我微信获取:yonglun_1994

夯实基础系列二:网络知识总结

细节

1. DNS 协议

作用:提供域名到IP地址之间的解析服务。或逆向从IP地址反查域名的服务

2. HTTP协议

2.1 特点
  • 无状态
  • 使用URI定义互联网资源
  • HTTP方法

    • GET:获取资源
    • POST:传输实体主体
    • PUT:传输文件
    • HEAD:获得报文首部
    • DELETE:删除文件
    • OPTIONS:询问支持的方法
    • TRACE:追踪路径
    • CONNECT:要求用隧道协议连接代理
  • 持久连接节省通信量
  • 管线化实现并行发送多个请求,而不需要一个接一个等响应
2.2 HTTP 报文
  • 用于HTTP协议交互的信息称为HTTP报文
  • 请求报文

    • 报文首部

      • 请求行
      • 请求首部字段
      • 通用首部字段
      • 实体首部字段
      • 其他
    • 空行
    • 报文主体
  • 响应报文

    • 报文首部

      • 状态行
      • 响应首部字段
      • 通用首部字段
      • 实体首部字段
      • 其他
    • 空行
    • 报文主体
  • 发送多种数据的多部分对象集合

    • MIME
    • multipart/form-data
  • 内容协商

    • 服务器驱动协商
    • 客户端驱动协商
    • 透明协商
2.3 HTTP状态码
  • 1XX:接收的请求正在处理
  • 2XX:请求正常处理完毕

    • 200 OK
    • 204 NoContent
    • 206 Partial Content
  • 3XX:需要进行附加操作以完成请求

    • 301 Moved Permanenetly
    • 302 Found
    • 303 See Other
    • 304 Not Modified
    • 307 Temporary Redirect
  • 4XX:服务器无法处理请求

    • 400 Bad Request
    • 401 Unauthorized
    • 403 Forbidden
    • 404 Not Found
  • 5XX:服务器处理请求出错

    • 500 Internal Server Error
    • 503 Service Unavailable
2.4 HTTP1.1 和HTTP1.0的区别
  • 可扩展性:定义Via头域,增加版本号的支持
  • 缓存

    • 增加对缓存的重激活机制:使用ETag头域描述一个资源
    • 增加Cache-Control头域支持可扩展的指令集
  • 带宽优化:允许请求资源的某部分,而不是整个资源
  • 长连接

    • HTTP/1.0只支持浏览器与服务器保持短暂的连接,浏览器的每次请求都要建立一个新的连接。
    • 而HTTP/1.1允许在一个TCP连接上可以传送多个HTTP请求和响应。HTTP/1.1协议的持续连接有两种方式,即非流水线方式和流水线方式。

      • 非流水线方式的特点是,客户在收到前一个响应后才能发出下一个请求;
      • 流水线方式的特点是,客户在收到HTTP的响应报文之前就能接着发送新的请求报文
2.5 Cookie与Session的区别
  • 存取方式的不同

    • Cookie中只能保管ASCII字符串,假如需求存取Unicode字符或者二进制数据,需求先进行编码。Cookie中也不能直接存取Java对象。若要存储略微复杂的信息,运用Cookie是比较艰难的。
    • Session中能够存取任何类型的数据,包括而不限于String、Integer、List、Map等。Session中也能够直接保管Java Bean乃至任何Java类,对象等,运用起来十分便当。能够把Session看做是一个Java容器类。
  • 隐私策略的不同

    • Cookie存储在客户端阅读器中,对客户端是可见的,客户端的一些程序可能会窥探、复制以至修正Cookie中的内容。
    • Session存储在服务器上,对客户端是透明的,不存在敏感信息泄露的风险。
  • 有效期上的不同

    • Cookie的过期时间指定
    • Session依赖于名为JSESSIONID的Cookie,而Cookie JSESSIONID的过期时间默许为–1,只需关闭了浏览器该Session就会失效,因而Session不能完成信息永世有效的效果。
  • 服务器压力的不同

    • Cookie保管在客户端,不占用服务器资源。假如并发阅读的用户十分多,Cookie是很好的选择。关于Google、Baidu、Sina来说,Cookie或许是唯一的选择。
    • Session是保管在服务器端的,每个用户都会产生一个Session。假如并发访问的用户十分多,会产生十分多的Session,耗费大量的内存。因而像Google、Baidu、Sina这样并发访问量极高的网站,是不太可能运用Session来追踪客户会话的。
  • 浏览器支持的不同

    • Cookie是需要客户端浏览器支持的。
    • 假如客户端浏览器不支持Cookie,需要运用Session以及URL地址重写。
  • 跨域支持上的不同

    • Cookie支持跨域名访问,例如将domain属性设置为“.biaodianfu.com”,则以“.biaodianfu.com”为后缀的一切域名均能够访问该Cookie。跨域名Cookie如今被普遍用在网络中,例如Google、Baidu、Sina等。
    • Session则不会支持跨域名访问。Session仅在他所在的域名内有效。
2.6 电脑访问网页的过程
  • 用到的协议:DNS、HTTP、OSPF、IP、ARP
  • 过程描述

    1. DNS把域名解析成对应的IP
    2. 发送一次请求,服务器返回一个永久重定向响应,这样浏览器就知道要访问的正确网址
    3. 发送请求html的请求,这个连接过程基于TCP/IP三次握手四次挥手的,建立连接
    4. 服务器返回一个html响应
    5. 浏览器根据渲染引擎解析返回的html响应,呈现内容
    6. 继续发送内嵌在html文件其他资源的请求,比如css、js、图片资源等
    7. 加载整个页面
2.7 Ping
  • 同网段

    1. 主机A要去Ping主机B, 主机A会封装两层报文,主机A先检查自己MAC地址中是否有B的MAC地址,如果没有就向外发送一个ARP广播包
    2. 交换机收到这个ARP后,会检查在交换机中是否包含B的MAC地址,如果有就直接返回给A;如果没有就向所有端口发送ARP,该网段的主机的MAC如果与B的MAC地址不同就丢弃,如果主机B收到了该ARP就马上返回相同格式的ARP
    3. 这时主机A已经有了B的MAC地址,就把B的MAC地址封装到ICMP报中,向主机B发送一个回显请求
    4. 主机B收到该报文后,知道是主机A的一个回显请求,就会返回一个相同格式的报文。这样就完成了同一个网段的Ping的过程
  • 不同网段

    1. 主机A要去Ping一个不同网段的主机C,主机A会去找网关转发
    2. 如果主机A不知道网关的MAC地址,就会发送一个ARP广播一下,这样就知道了网关的MAC地址
    3. 网关收到主机A的ICMP报文,根据上面的目的IP,会去查找路由表,找到一个出口指针,给主机C发送一个ICMP报文
    4. 如果网关不知道主机C的MAC地址,就会给网关内所有的主机发送一个ARP,从而找到主机C的MAC地址
    5. 主机C收到主机A的报文就会给主机A发送一个回显请求。这样就完成了不同网段的Ping的请求
2.8 路由器与交换机的区别

路由器包含了交换机的功能,交换机主要的作用是扩展接口

2.9 确认访问用户身份的认证
  • basic认证
  • digest认证
  • ssl客户端认证
  • 基于表单认证

    • 认证多半为基于表单认证
    • session管理及cookie应用
2.10 websocket
  • 全双工通信
  • 特点

    • 推送功能:支持服务器向客户端推送数据的推送功能
    • 减少通信量:一直保持连接
    • HTTP连接建立后,需要完成一次握手动作

      • 握手---请求:用到HTTP的upgrade字段告知服务器通信协议发生变化
      • 握手---响应:对于之前的请求返回状态码101 switching protocols
    • 成功握手确立WebSocket连接之后,通信不再使用HTTP的数据帧,而采用WebSocket独立的数据帧

3. HTTPS协议

3.1 HTTP缺点
  • 通信使用明文可能会被窃听

    • 解决方式

      • 通信加密。SSL和TLS组合使用
      • 内容加密
  • 不验证通信方身份就可能遭遇伪装

    • 解决方式:查明对手的证书
  • 无法证明报文完整性,可能已遭篡改

    • 数字签名,MD5并不可靠,应用HTTPS
3.2 HTTP+加密+认证+完整性保护=HTTPS
3.3 HTTPS是身披SSL外壳的HTTP
3.4 HTTP采用混合加密机制
3.5 证明公开密钥正确性的证书
3.6 SSL协议
    • 通信慢
    • 由于大量消耗CPU及内存等资源,导致处理速度变慢
    • SSL必须进行加密处理

4. TCP协议

4.1 传输层
4.2 作用
  • 提供可靠的字节流服务
4.3 大块数据分割成报文段(segment)
4.4 三次握手
  1. 发送端发带SYN标志的数据包给对方。
  2. 接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息。
  3. 最后,发送端再回传一个带ACK标志的数据包,代表“握手”结束
握手某个阶段中断,TCP会以相同的顺序发送相同的数据包
4.5 四次挥手
  1. 客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。
  2. 服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
  3. 服务器B关闭与客户端A的连接,发送一个FIN给客户端A。
  4. 客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。
4.6 流量控制
  • TCP接收端对发送端发送多少字节的数据进行控制,防止接收端处理不及而丢失数据
  • 发送窗口的大小是受到接收窗口的控制的。
  • 发送窗口必须根据接收端的大小及时调整发送窗口的大小,这个机制保证了每次TCP传输的数据量都是接收端可以及时处理的。
4.7 差错控制
  • 保证接收端接收的数据是完整未受损伤的,是可靠性的重要保证。
  • 主要使用校验和、确认、超时重传这三个工具进行差错控制。
4.8 拥塞控制
  • 拥塞窗口

    • 发送方的窗口大小是接收窗口与拥塞窗口中的较小值。
    • 拥塞窗口的大小又取决于网络的拥塞状况。
  • 拥塞策略

    • 慢开始
    • 拥塞避免
    • 拥塞检测
  • 拥塞控制流程

    1. 由于刚开始不清楚网络的拥塞情况,所以会首先采用慢开始算法,开始阶段,窗口大小由1指数增大,直到窗口大小到达门限值。
    2. 窗口大小到达门限值后,就开始执行拥塞避免算法,之后窗口值按照线性规律增大,直到出现超时或者到达最大的窗口大小值。
    3. 这个时候,会开始执行拥塞检测算法,也就是把门限值变为窗口大小的一半,之后继续执行拥塞避免算法,窗口大小按照线性规律增大。

5. IP协议

5.1 网络层
5.2 作用
  • 把数据包传送给对方
5.3 条件
  • IP地址和MAC地址
5.4 使用ARP协议凭借MAC地址进行通信
5.5 路由选择

6. TCP/IP

6.1 协议族
  • IP、ICMP、DNS、TCP、FTP、HTTP、SNMP
6.2 分层管理
  • 应用层

    • 决定向用户提供应用服务时通信的活动。FTP、HTTP、DNS
  • 传输层

    • 对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。TCP、UDP
  • 网络层

    • 处理网络上流动的数据包
    • 规定了通过怎样的路径到达对方计算机,并把数据包传送给对方
  • 数据链路层

    • 处理连接网络的硬件部分
6.3 通信传输流
  • 发送端层与层之间传输数据,每经过一层时必定会被打上一个该层所属的首部信息
  • 接收端在层与层传输数据时,每经过一层时会把对应的首部消去。
  • 这种把数据信息包装起来的做法称为封装

7. Web攻击

7.1 因输出值转移不完全引发的安全漏洞
  • 跨站脚本攻击XSS
  • SQL注入攻击
  • OS命令注入攻击
  • HTTP首部注入攻击
  • 邮件首部注入攻击
  • 目录遍历攻击
  • 远程文件包含漏洞
7.2 因设置或设计上的缺陷引发的安全漏洞
  • 强制浏览
  • 不正确的错误消息处理
  • 开放重定向
7.3 因会话管理疏忽引发的安全漏洞
  • 会话劫持
  • 会话固定攻击
  • 跨站点请求伪造(CSRF)
7.4 其他安全漏洞
  • 密码破解
  • 点击劫持
  • dos攻击
  • 后门程序

8. 其他协议

8.1 IGMP协议
  • 组管理协议,它帮助多播路由器创建以及更新与每一个路由接口相连的忠实成员列表(就是与该路由接口连接频率较高)。
8.2 ICMP协议
  • 差错控制协议,弥补了IP协议没有差错纠正机制以及差错报告的缺憾。
8.3 ARP协议
  • 地址映射协议,可以把一个IP地址映射为MAC地址。
  • 把IP数据报封装成帧(以太网上对01串的分组定义)后才能通过物理网络,这时就需要目的主机的MAC地址

我组建了一个技术交流群,每日我会精选文章发布科技早报,里边会有技术大佬一起交流学习,共同成长。需要的朋友可以加我微信(微信ID:yonglun_1994),拉你进群,并有学习大礼包相送。

夯实基础系列二:网络知识总结

夯实基础系列二:网络知识总结

关注公众号:

回复【Java经典】,获取 Java 经典电子书;
回复【Java学习】,获取整个 Java 体系学习资料;
回复【Java项目】,获取Java项目的学习资料;
回复【互联网认知】,获取互联网认知类相关学习资料;
回复【技术学习】,获取更多技术学习资料;
回复【MySQL学习】,获取MySQL学习资料;
回复【面试】,获取面试相关资料;

点赞
收藏
评论区
推荐文章
python知道 python知道
4年前
《Python3网络爬虫开发实战》
提取码:1028内容简介······本书介绍了如何利用Python3开发网络爬虫,书中首先介绍了环境配置和基础知识,然后讨论了urllib、requests、正则表达式、BeautifulSoup、XPath、pyquery、数据存储、Ajax数据爬取等内容,接着通过多个案例介绍了不同场景下如何实现数据爬取,后介绍了pyspider框架、S
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Easter79 Easter79
3年前
springcloud本地开发的微服务如何调用远程k8s的微服务
前言一般来说k8s使用的容器网络与开发者的所在的办公网络并不能直接连通,如何在开发环境访问k8s的服务,就成为我们日常开发绕不开的坎。下边就介绍几种可以方便我们在本地环境调用k8s服务方案方案一:Telepresence1、Telepresence简介Telepresence是一款为Kubernet
Andrew703 Andrew703
4年前
计算机网络常见面试系列1
前言今天我们给大家介绍在面试中,计算机网络常见的面试题。计算机网络在计算机行业中是一门最基础的技术,无论是在开发项目还是在算法岗,项目的应用最终还是落实在用户的使用,网络的连接是至关重要的,因此,这就要求我们需要对计算机网络有一定的了解。接下来,这篇文章给大家介绍在面试中常见的计算机网络的知识点。当然,开发和算法岗对计算机网络的要求程度不同,相对而言
Stella981 Stella981
3年前
Python Challenge Level 18
初学Python,挑战一下流行的PythonChallenge,很不幸,卡在了18关~~被字符字节码之间的转换搞得焦头烂额,不过终于搞定了还是很happy的~~~主要的问题就是16进制形式的字符如何转成字节码(注意:不是encoding)如:\'89','50','4e','47','0d','0a','1a','0a','00
Stella981 Stella981
3年前
Node.js 中使用 ECDSA 签名遇到的坑
文/Fenying最近有个朋友问我关于Node.js下使用ECDSA的问题,主要是使用Node.js的Crypto模块无法校验网络传输过来的签名结果。在踩坑无数后,终于搞清楚了原因。坑0x00:签名输出格式在排除了证书、消息不一致的可能之后,我开始对比使用Node.js签名的结果与网络传输过来的签
Stella981 Stella981
3年前
Linux应急响应(一):SSH暴力破解
0x00前言SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议,主要用于给远程登录会话数据进行加密,保证数据传输的安全。SSH口令长度太短或者复杂度不够,如仅包含数字,或仅包含字母等,容易被攻击者破解,一旦被攻击者获取,可用来直接登录系统,控制服务器所有权限。0x01应急场景某天,网站
Wesley13 Wesley13
3年前
NEO从源码分析看网络通信
_0x00前言_NEO被称为中国版的Ethereum,支持C和java开发,并且在社区的努力下已经把SDK拓展到了js,python等编程环境,所以进行NEO开发的话是没有太大语言障碍的。比特币在解决拜占庭错误这个问题时除了引入了区块链这个重要的概念之外,还引入了工作量证明(PoW)这个机智的解决方案,通过数学意义上的难题来保证每个
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
玩转云端|天翼云边缘安全加速平台AccessOne实用窍门之上传下载极速推进,纵享丝滑体验!
受限于传输速度和网络拥堵等因素,传媒业务中的上传和下载工作往往会遇到诸多困难。那么,如何提高传媒业务的上传下载速度,助力传媒行业提升平台运营水平与服务效率?天翼云边缘安全加速平台AccessOne来支招!
小白学大数据 小白学大数据
11个月前
如何使用 Lua 脚本进行更复杂的网络请求,比如 POST 请求?
在当今的互联网世界中,网络请求是数据交换的基础。无论是在开发Web应用程序、自动化测试还是进行数据抓取,掌握如何发送网络请求是一项基本技能。Lua,作为一种轻量级、高性能的脚本语言,经常被用于这些场景。本文将详细介绍如何使用Lua脚本进行更复杂的网络请求,