第六章:计算机网络

labuladong 计算机网络

25 张图解:键入网址后,到网页显示,其间发生了什么

解答:

  • DNS域名解析
    • 查询服务器域名对应的 IP 地址。因为委托操作系统发送消息时,必须提供通信对象的 IP 地址
    • DNS 中的域名都是用句点来分隔的,比如 www.server.com,这里的句点代表了不同层次之间的界限。在域名中,越靠右的位置表示其层级越高
  • 浏览器得到了IP以后,向服务器发送TCP连接
    • TCP 连接的过程,通常称为三次握手,目的是保证双方都有发送和接收的能力
  • 浏览器发送HTTP请求
    • 浏览器和服务器建立连接以后,浏览器接着按这个IP地址给服务器发送一个http请求,方式为get,例如访问www.baidu.com。其本质是在建立起的TCP连接中,按照HTTP协议标准发送一个索要网页的请求
  • 服务器处理请求
    • 服务器(经过物理层→数据链路层→网络层→传输层→应用层)收到浏览器的请求以后,会解析这个请求(读请求头),然后生成一个响应头和具体响应内容。接着服务器会传回来一个响应头和一个响应,响应头告诉了浏览器一些必要的信息
  • 浏览器解析渲染页面
  • 关闭TCP连接,即TCP的四次挥手

30张图解:HTTP常见面试题

HTTP基本概念

  • HTTP 是超文本传输协议,也就是HyperText Transfer Protocol。HTTP 是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」,是一个双向协议

GET 与 POST

  • GET 方法的含义是请求从服务器获取资源,这个资源可以是静态的文本、页面、图片视频等
  • POST 方法则是相反操作,它向 URI 指定的资源提交数据,数据就放在报文的 body 里
  • GET 方法就是安全且幂等的,因为它是「只读」操作,无论操作多少次,服务器上的数据都是安全的,且每次的结果都是相同的。POST 因为是「新增或提交数据」的操作,会修改服务器上的资源,所以是不安全的,且多次提交数据就会创建多个资源,所以不是幂等的

HTTP 与 HTTPS 有哪些区别?

  • HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输
    • HTTPS 实现了信息加密,校验机制,身份证书等功能,使传输更安全
  • HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输
  • HTTP 的端口号是 80,HTTPS 的端口号是 443
  • HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的

HTTPS 是如何解决HTTP的窃听,冒充,篡改等风险的?

  • 混合加密的方式实现信息的机密性,解决了窃听的风险
  • 服务器公钥放入到数字证书中,解决了冒充的风险
  • 摘要算法的方式来实现完整性,它能够为数据生成独一无二的「指纹」,指纹用于校验数据的完整性,解决了篡改的风险

30张图解:TCP重传、滑动窗口、流量控制、拥塞控制

重传机制

在 TCP 中,当发送端的数据到达接收主机时,接收端主机会返回一个确认应答消息,表示已收到消息

但在错综复杂的网络,并不一定能如上图那么顺利能正常的数据传输,万一数据在传输过程中丢失了呢?
所以 TCP 针对数据包丢失的情况,会用重传机制解决:
1. 超时重传 :当超过指定的时间后,没有收到对方的 ACK 确认应答报文,就会重发该数据
2. 快速重传:不以时间为驱动,而是以数据驱动重传。但是这样的话,发送方不知道哪些数据收到了,哪些没收到
3. SACK( Selective Acknowledgment 选择性确认): 可以将缓存的地图发送给发送方,这样发送方就可以知道哪些数据收到了,哪些数据没收到,知道了这些信息,就可以只重传丢失的数据
4. Duplicate-SACK:使用了 SACK 来告诉「发送方」有哪些数据被重复接收了

滑动窗口

  • TCP 是每发送一个数据,都要进行一次确认应答。当上一个数据包收到了应答了, 再发送下一个。但这样的话,数据包的往返时间越长,通信的效率就越低。所以用滑动窗口解决该问题。窗口大小就是指无需等待确认应答,而可以继续发送数据的最大值(TCP窗口的最大值为2的16次方,即65535字节)

  • TCP 头里有一个字段叫 Window,也就是窗口大小。这个字段是接收端告诉发送端自己还有多少缓冲区可以接收数据。于是发送端就可以根据这个接收端的处理能力来发送数据,而不会导致接收端处理不过来。

  • 流量控制

    • 发送方不能无脑的发数据给接收方,要考虑接收方处理能力。如果对方处理不过来,那么就会导致触发重发机制,浪费资源
    • TCP 提供一种机制可以让「发送方」根据「接收方」的实际接收能力控制发送的数据量,这就是所谓的流量控制
  • 拥塞控制

    • 在网络出现拥堵时,如果继续发送大量数据包,可能会导致数据包时延、丢失等,这时 TCP 就会重传数据,但是一重传就会导致网络的负担更重,于是会导致更大的延迟以及更多的丢包,这个情况就会进入恶性循环被不断地放大….
    • 于是,就有了拥塞控制,控制的目的就是避免「发送方」的数据填满整个网络。 拥塞窗口 cwnd是发送方维护的一个的状态变量,它会根据网络的拥塞程度动态变化的

40张图解:TCP三次握手和四次挥手面试题

TCP 和 UDP 区别

  • 传输控制协议 TCP(Transmission Control Protocol)是面向连接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),每一条 TCP 连接只能是点对点的(一对一)
  • 用户数据报协议 UDP(User Datagram Protocol)是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信
  1. 连接
    TCP 是面向连接的传输层协议,传输数据前先要建立连接。
    UDP 是不需要连接,即刻传输数据。
  2. 服务对象
    TCP 是一对一的两点服务,即一条连接只有两个端点。
    UDP 支持一对一、一对多、多对多的交互通信
  3. 可靠性
    TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按需到达。
    UDP 是尽最大努力交付,不保证可靠交付数据。
  4. 拥塞控制、流量控制
    TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。
    UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。
  5. 首部开销
    TCP 首部长度较长,会有一定的开销,首部在没有使用「选项」字段时是 20 个字节,如果使用了「选项」字段则会变长的。
    UDP 首部只有 8 个字节,并且是固定不变的,开销较小。
  6. 传输方式
    TCP 是流式传输,没有边界,但保证顺序和可靠。
    UDP 是一个包一个包的发送,是有边界的,但可能会丢包和乱序。
  7. 分片不同
    TCP 的数据大小如果大于 MSS 大小,则会在传输层进行分片,目标主机收到后,也同样在传输层组装 TCP 数据包,如果中途丢失了一个分片,只需要传输丢失的这个分片。
    UDP 的数据大小如果大于 MTU 大小,则会在 IP 层进行分片,目标主机收到后,在 IP 层组装完数据,接着再传给传输层,但是如果中途丢了一个分片,则就需要重传所有的数据包,这样传输效率非常差,所以通常 UDP 的报文应该小于 MTU。

TCP 和 UDP 应用场景

  • 由于 TCP 是面向连接,能保证数据的可靠性交付,因此经常用于:
  1. FTP 文件传输
  2. HTTP / HTTPS
  • 由于 UDP 面向无连接,它可以随时发送数据,再加上UDP本身的处理既简单又高效,因此经常用于:
  1. 包总量较少的通信,如 DNS 、SNMP 等
  2. 视频、音频等多媒体通信
  3. 广播通信

TCP的三次握手

第三次握手是可以携带数据的,前两次握手是不可以携带数据的

假设 A 为客户端,B 为服务器端。

  • 首先 B 处于 LISTEN(监听)状态,等待客户的连接请求。
  • A 向 B 发送连接请求报文,SYN=1,ACK=0,选择一个初始的序号 x。
  • B 收到连接请求报文,如果同意建立连接,则向 A 发送连接确认报文,SYN=1,ACK=1,确认号为 x+1,同时也选择一个初始的序号 y。
  • A 收到 B 的连接确认报文后,还要向 B 发出确认,确认号为 y+1,序号为 x+1。
  • B 收到 A 的确认后,连接建立。

TCP为什么是三次握手?

  • (因为三次握手才能保证双方具有接收和发送的能力)
  • 三次握手才可以阻止重复历史连接的初始化(主要原因)
    • 客户端连续发送多次 SYN 建立连接的报文,在网络拥堵情况下:
      • 一个「旧 SYN 报文」比「最新的 SYN 」 报文早到达了服务端;那么此时服务端就会回一个 SYN + ACK 报文给客户端;客户端收到后可以根据自身的上下文,判断这是一个历史连接(序列号过期或超时),那么客户端就会发送 RST 报文给服务端,表示中止这一次连接。
    • 如果是两次握手连接,就不能判断当前连接是否是历史连接,三次握手则可以在客户端(发送方)准备发送第三次报文时,客户端因有足够的上下文来判断当前连接是否是历史连接:
      • 如果是历史连接(序列号过期或超时),则第三次握手发送的报文是 RST 报文,以此中止历史连接;
        如果不是历史连接,则第三次发送的报文是 ACK 报文,通信双方就会成功建立连接
  • 三次握手才可以同步双方的初始序列号
  • 三次握手才可以避免资源浪费

TCP 四次挥手

  • A 发送连接释放报文,FIN=1。
  • B 收到之后发出确认,此时 TCP 属于半关闭状态,B 能向 A 发送数据但是 A 不能向 B 发送数据。
  • 当 B 不再需要连接时,发送连接释放报文,FIN=1。
  • A 收到后发出确认,进入 TIME-WAIT 状态,等待 2 MSL(最大报文存活时间)后释放连接。
  • B 收到 A 的确认后释放连接。

TCP 为什么是四次挥手?

  • 关闭连接时,客户端向服务端发送 FIN 时,仅仅表示客户端不再发送数据了但是还能接收数据
  • 服务器收到客户端的 FIN 报文时,先回一个 ACK 应答报文,而服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送 FIN 报文给客户端来表示同意现在关闭连接

45张图解:IP基础知识全家桶

IP的基本认识

  • IP 在 TCP/IP 参考模型中处于第三层,也就是网络层。网络层的主要作用是:实现主机与主机之间的通信,也叫点对点(end to end)通信。

  • MAC 的作用则是实现「直连」的两个设备之间通信,而 IP 则负责在「没有直连」的两个网络之间进行通信传输。

IP:整个旅游行程表就相当于网络层,充当远程定位的功能,行程的开始好比源 IP,行程的终点好比目的 IP 地址
MAC:在区间内移动相当于数据链路层,充当区间内两个节点传输的功能,区间内的出发点好比源 MAC 地址,目标地点好比目的 MAC 地址

IP 地址的分类

对于 A、B、C 类主要分为两个部分,分别是网络号和主机号


主机号全为 1 指定某个网络下的所有主机,用于广播
主机号全为 0 指定某个网络

无分类地址 CIDR及子网掩码




由于子网网络地址被划分成 2 位,那么子网地址就有 4 个,分别是 00、01、10、11。

公有 IP 地址与私有 IP 地址

IPV4 和IPV6

  • IPv4 的地址是 32 位的,大约可以提供 42 亿个地址。但是 IPv6 的地址是 128 位的,这可分配的地址数量是大的惊人,说个段子 IPv6 可以保证地球上的每粒沙子都能被分配到一个 IP 地址
  • IPv6 除了有更多的地址之外,还有更好的安全性和扩展性,说简单点就是 IPv6 相比于 IPv4 能带来更好的网络体验。
    • IPv6 可自动配置,即使没有 DHCP 服务器也可以实现自动分配IP地址
    • IPv6 包头包首部长度采用固定的值 40 字节,去掉了包头校验和,简化了首部结构,减轻了路由器负荷,大大提高了传输的性能
    • IPv6 有应对伪造 IP 地址的网络安全功能以及防止线路窃听的功能,大大提升了安全性

ARP (Address Resolution Protocol,地址解析协议)

20200829232021

网络层实现主机之间的通信,而链路层实现具体每段链路之间的通信。因此在通信过程中,IP 数据报的源地址和目的地址始终不变,而 MAC 地址随着链路的改变而改变。

ARP 实现由 IP 地址得到 MAC 地址。

  • 在传输一个 IP 数据报的时候,确定了源 IP 地址和目标 IP 地址后,就会通过主机「路由表」确定 IP 数据包下一跳。然而,网络层的下一层是数据链路层,而链路层实现具体每段链路之间的通信。所以我们还要知道「下一跳」的 MAC 地址
  • 由于主机的路由表中可以找到下一跳的 IP 地址,所以可以通过 ARP 协议,求得下一跳的 MAC 地址。

ARP 是借助 ARP 请求与 ARP 响应两种类型的包确定 MAC 地址的:

  • 主机会通过广播发送 ARP 请求,这个包中包含了想要知道的 MAC 地址的主机 IP 地址。
  • 当同个链路中的所有设备收到 ARP 请求时,会去拆开 ARP 请求包里的内容,如果 ARP 请求包中的目标 IP 地址与自己的 IP 地址一致,那么这个设备就将自己的 MAC 地址塞入 ARP 响应包返回给主机。

   转载规则


《第六章:计算机网络》 M 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
计算机操作系统 计算机操作系统
进程死锁 张三拿着语文课本。他学完语文课本后需要数学课本(有人归还数学课本后他才能学数学);李四拿着数学课本。他学完数学课本后需要语文课本(有人归还语文课本后他才能学语文)。张三等待李四归还数学课本,李四等待张三归还语文课本。他们等啊等,一
2020-08-29
下一篇 
腾讯2020笔试记录 腾讯2020笔试记录
技术研究 数据分析笔试题&题解 (P.S. 一个支持多语言在线编译的页面) 题解1题解2(python实现) 1. 使括号有效的最小添加 如果是单类别的括号,就是:LeetCode921题给定一个由 ‘(’ 和 ‘)’ 括号组成的
2020-08-24
  目录