这真的是你了解的网络吗?

前言

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

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

概要

网络知识我做了 8 个方面的总结,包括DNS协议,HTTP协议,HTTPS协议,TCP协议,IP协议,TCP/IP,Web攻击,其他协议。以下对这些内容做一些简单的总结。

网络知识大纲

细节

1. DNS 协议

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

2. HTTP协议

2.1 特点

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

2.2 HTTP1.1 和HTTP1.0的区别

  • 可扩展性:定义Via头域,增加版本号的支持
  • 缓存
    • 增加对缓存的重激活机制:使用ETag头域描述一个资源
    • 增加Cache-Control头域支持可扩展的指令集
  • 带宽优化:允许请求资源的某部分,而不是整个资源
  • 长连接
    • HTTP/1.0只支持浏览器与服务器保持短暂的连接,浏览器的每次请求都要建立一个新的连接。
    • 而HTTP/1.1允许在一个TCP连接上可以传送多个HTTP请求和响应。HTTP/1.1协议的持续连接有两种方式,即非流水线方式和流水线方式。
      • 非流水线方式的特点是,客户在收到前一个响应后才能发出下一个请求;
      • 流水线方式的特点是,客户在收到HTTP的响应报文之前就能接着发送新的请求报文

2.3 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.4 电脑访问网页的过程

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

2.5 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.6 路由器与交换机的区别

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

2.7 websocket

  • 全双工通信
  • 特点
    • 推送功能:支持服务器向客户端推送数据的推送功能
    • 减少通信量:一直保持连接
    • HTTP连接建立后,需要完成一次握手动作
      • 握手—请求:用到HTTP的upgrade字段告知服务器通信协议发生变化
      • 握手—响应:对于之前的请求返回状态码101 switching protocols
    • 成功握手确立WebSocket连接之后,通信不再使用HTTP的数据帧,而采用WebSocket独立的数据帧

3. HTTPS协议

3.1 HTTP缺点

  • 通信使用明文可能会被窃听
    • 解决方式
      • 通信加密。SSL和TLS组合使用
      • 内容加密
  • 不验证通信方身份就可能遭遇伪装
    • 解决方式:查明对手的证书
  • 无法证明报文完整性,可能已遭篡改
    • 数字签名,MD5并不可靠,应用HTTPS
    • HTTP+加密+认证+完整性保护=HTTPS

4. TCP协议

4.1 三次握手

  1. 发送端发带SYN标志的数据包给对方。
  2. 接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息。
  3. 最后,发送端再回传一个带ACK标志的数据包,代表“握手”结束

握手某个阶段中断,TCP会以相同的顺序发送相同的数据包

4.2 四次挥手

  1. 客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。
  2. 服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
  3. 服务器B关闭与客户端A的连接,发送一个FIN给客户端A。
  4. 客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。

4.3 流量控制

  • TCP接收端对发送端发送多少字节的数据进行控制,防止接收端处理不及而丢失数据
  • 发送窗口的大小是受到接收窗口的控制的。
  • 发送窗口必须根据接收端的大小及时调整发送窗口的大小,这个机制保证了每次TCP传输的数据量都是接收端可以及时处理的。

4.4 差错控制

  • 保证接收端接收的数据是完整未受损伤的,是可靠性的重要保证。
  • 主要使用校验和、确认、超时重传这三个工具进行差错控制。

4.5 拥塞控制

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

为你推荐以下文章

你真的了解Linux系统吗?

97 条 Linux 运维工程师常用命令总结 | 史上最全Linux命令总结

原文发布于微信公众号 - 轮子工厂(Programmer-ing)

原文发表时间:2018-05-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏xcywt

关于HTTP的笔记

网上看了一篇关于HTTP的博客,觉得还不错,这里就记下来了。 参考:https://www.cnblogs.com/guguli/p/4758937.html ...

33960
来自专栏高性能服务器开发

服务器开发中网络数据分析与故障排查经验漫谈

一、 操作系统提供的网络接口 为了能更好的排查网络通信问题,我们需要熟悉操作系统提供的以下网络接口函数,列表如下: 接口函数名称接口函数描述接口函数签名soc...

37450
来自专栏landv

烽火2640路由器命令行手册-02-接口配置命令

本文描述用于不同类型接口的基本命令,这些命令对应于手册包括的接口配置任务,有关配置要点,参考下面列出的各项内容。

14620
来自专栏xcywt

<HTTP协议详解>由浅入深看HTTP

1.支持客户/服务器模式。 2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务...

13040
来自专栏运维技术迷

win7无法保存打印机设置(0x000006d9)解决方法

今天在给同事共享打印机的时候一直提示这个错误,因为我们是域环境,当时还以为是域权限的设置问题,但看了看域策略也没对这一部分进行权限设置呀!索性就度娘一下,找了一...

32340
来自专栏noteless

-1-7 java 网络编程基本知识点 计算机网络 TCP/IP协议栈 通信必备 tcp udp

是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,

15630
来自专栏desperate633

TCP/IP 之 可靠数据传输原理什么是可靠?Rdt 1.0: 可靠信道上的可靠数据传输Rdt 2.0: 产生位错误的信道Rdt 2.1: 发送方, 应对ACK/NAK破坏Rdt 2.2: 无NAK消

可靠数据传输对于应用层、传输层、链路层都很重要,是网络领域的Top10问题。 对于传输层来说,由于相邻的网络层是不可靠的,所以要在传输层实现可靠数据传输(rd...

23220
来自专栏Java Web

Java 面试知识点解析(五)——网络协议篇

在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Jav...

42390
来自专栏李蔚蓬的专栏

AVD Nexus_5X_API_24 is already running. If that is not the case, delete the files at C:\...\.a...

查了网上博文,说是因为虚拟机刚搭建好的时候默认会建立"*.lock"文件夹,而且当你把虚拟机关掉时这个文件夹会自动删除,可能是上次关PC时太草率,所以这个逗比文...

1.2K10
来自专栏网络 后台

TCP TIME_WAIT

从图中可以看出,若服务器主动关闭连接,在四次挥手的最后一个ACK后连接端口会变为TIME_WAIT状态, 状态停留时长为两个MSL(最大分段寿命),这个状态只有...

74300

扫码关注云+社区

领取腾讯云代金券