美文网首页
《计算机网络-自顶向下方法》重点笔记

《计算机网络-自顶向下方法》重点笔记

作者: MikeShine | 来源:发表于2020-02-25 15:23 被阅读0次

写在前面

对于计网的重点,我们进行相应的整理。其实计网的准备相对于 java 还是内容比较少的,简单得多。
部分内容参考博文计网读书笔记。这个笔记写的太详细了,没有必要。我们只需要掌握一些重要的点即可。


第1章 计算机网络和因特网

这一章只需要注意一下分层体系结构。TCP-IP 4层模型 和 OSI 7层模型。
参见我关于 TCP协议的笔记


第2章 应用层

2.2 WEB 和 HTTP

2.2.1 HTTP概述

  • HTTP名为超文本传输协议, 规定了客户端和服务器之间进行报文交换的方法。
  • HTTP 用 TCP 作为他的传输层协议。HTTP 客户首先发起一个与服务器的 TCP 连接。
  • 服务器响应的时候,不存储客户端的状态信息,因此 HTTP 也被称为 无状态协议

2.2.2 持续连接和非持续连接

  • 由服务器端决定,TCP协议的请求,是采用一个 TCP连接完成,还是独立TCP连接完成。前者叫持续连接,后者叫非持续连接。
  • HTTP 协议,二者都可。默认情况下使用持续连接
  • 非持续连接HTTP:每个TCP连接 只传送一个请求报文和相应报文。

这里书上提到了一个概念,RTT(Round-Trip Time),报文从 C->S->C 的时间。由于有三次握手的存在,前两次握手已经用了 2个 RTT,所以真正的响应时间应该是 2RTT + 传输HTML对象

  • 持续连接 HTTP:持续连接可以提高传输效率。

上面说过,每个对象都要握手,经过2个RTT 才可以传输。而持续连接,则是用系统资源来换取效率。

2.2.3 HTTP报文格式:请求报文 和 响应报文

  1. 请求报文的格式:
  • 请求行:方法字段、URL字段、HTTP版本
  • 请求头(首部行):服务器要使用的附加信息。
  • 空行:请求头后面必有空行
  • 请求数据:请求数据的主题。
    Get方法是没有的,放在了 URL的参数中,POST 方法放在表单中。
  1. 响应报文的格式:
  • 状态行:HTTP版本、状态
  • 响应头(首部行):发送日期,服务器相关信息等
  • 空行
  • 响应正文:响应的数据正文

常见状态码:
301:请求的对象被转移了,重定向的 URL在响应报文中
400:非法请求,丢弃
404:
505:服务器不支持请求报文使用的 http 版本

参见我的HTTP协议分析笔记


HTTP1.0 、HTTP1.1、HTTP2.0 之间的比较:

详细分析参见这个老哥的博文

1. HTTP/1.0
HTTP/1.0支持:GET、POST、HEAD三种请求方法。

  • 无状态
  • 非持续连接
  • 串行发送:前一个请求的响应到达,后一个请求才可以发送

2. HTTP/1.1
HTTP/1.1是当前正在广泛使用的版本。HTTP/1.1新增了:OPTIONS、PUT、DELETE、TRACE、CONNECT五种HTTP请求方法。

  • 持续性连接(持久连接)
  • 请求管道化(由于TCP长连接的存在,所以可以管道化)
  • 增加缓存处理
  • 支持断点传输、增加Host字段

最重要的是 长连接

3. HTTP/2.0

  • 二进制分帧
    将 HTTP1.X 的 header & body 用 frame 重新封装了

  • 多路复用(并行传输)
    HTTP2.0 通信在一个TCP上建立任意数量的双向数据流。
    每个HTTP请求是一个数据流,每个消息分为多个帧,在帧中记录着数据流 id,因此不同的帧可以实现混合并行传输,接收后根据 stream id 对应到 不同的 HTTP 请求中,从而实现并行传输。

  • 头部压缩
    使用编码压缩算法来减小 header 的大小

  • 服务器推送
    服务器可以做额外相应,向客户端推送资源

重点是可以并行传输。

2.2.4 用户与服务器的交互:Cookie

之前说过,HTTP是无状态协议。但是 Web 站点为了 识别用户身份 ,使用了 Cookie 技术。
Cookie 技术包含4个组件:

  • HTTP 请求报文里增加一个关于 Cookie 的首部行
  • HTTP 响应报文里增加一个关于 Cookie 的首部行
  • 客户端系统 保留一个 Cookie 文件,由浏览器保存维护
  • Web站点建立 Cookie 和 用户身份的关联

很好理解,自然是请求报文和相应报文都携带 Cookie,客户端和服务器端都存有 Cookie 文件。即 本地保存,访问携带

Cookie 和 Session 的区别
详细讲解
简单来说,二者都是为了Web站点 识别用户身份,session 译为 会话,就是保存每一次客户端和服务器端会话中的 用户信息和用户操作,是有时间限制的。
Session 会在服务器端有一个 类似 HashTable 的数据来存放用户数据,浏览器第一次请求,生成一个 HashTable 和对应 SessionID标识这个 HashTable。这个 Session ID 一般在 30分钟后会自动销毁。

区别:

  • Cookie 在客户端,会被篡改,不安全。Session 在服务器端
  • Cookie 只能存 String 类型对象,且容量小。 Session 可以存 java 对象,容量大。

2.3 文件传输协议FTP

  • 建立过程:首先,用户提供远程主机的主机名,使得 FTP客户端建立一个到远程主机的 TCP 连接。然后,用户提供用户名和密码,作为FTP命令的一部分在TCP连接上传输。一旦被服务器授权,用户就可以和服务器进行文件传输。
  • HTTP 和 FTP 区别:FTP 用两个并行的 TCP 连接进行传输,一个 TCP控制连接,传输FTP命令;一个 TCP数据连接,传输文件数据。

需要注意:控制连接一直存在,数据连接在每次传输不同文件,都会重建。


2.5 DNS:因特网的目录服务

DNS(Domain Name System)就是解决 主机地址和IP 地址 的转换问题。
DNS 采用的是 UDP
具体解析,看我之前的笔记


第3章 传输层

3.3 无连接运输 UDP(User Data Protocol,用户数据报协议)

上面说过,DNS 就采用的是 UDP。
UDP 的特点:

  • 面向无连接
    并不会像TCP通过三次握手建立连接,想要发送数据就发送。而且对于应用层数据不会进行拆分和拼接操作,直接加一个UDP头作为标识,就传递给网络层了。
  • 支持单播、多播、广播
  • 面向报文
    如上面所说,UDP不对报文做任何操作,由应用层指定合适的报文大小
  • 不可靠
    没有拥塞控制和流量控制,以恒定速率来发,所以会丢包。
  • 头部更小
    UDP报文段的头部比TCP要小的多(8和20 B),所以 UDP 传输效率更高,适合实时性好的场景。

3.3.1 UDP报文结构


UDP 头部8个字节,分4个字段,每个字段2个字节,分别是:源端口号、目的端口号、长度、校验和

3.5 面向连接的传输:TCP

TCP 连接的特点:

  • 面向连接
    三次握手建立连接。
  • 仅支持单播
  • 可靠传输
    TCP 通过重传机制,来保证可靠传输
  • 面向字节流
    TCP 不像 UDP 按照独立报文传输,而是在不保留报文边界情况下以字节流方式进行传输。
  • 提供拥塞控制
    网络状况不好的时候,TCP能够减小向网络层注入数据的速率和数量,缓解拥塞。
  • 全双工通信
    TCP 允许双方在任何时候都能发送数据,因为TCP两端都设有缓存。

3.5.2 TCP报文结构


可以看出,相比于 UDP,TCP报文结构就复杂多了。

  • 源端口和目的端口
  • 序号
  • 确认号
  • 首部长度
  • 选项字段
  • 标记字段

这一部分先不用记。

3.5.4 可靠数据传输(即 TCP 的差错控制)

IP 协议提欧的是尽力而为的服务:不保证不丢失、按时到达、没有损坏。TCP协议在 IP 协议之上,提供可靠数据传输。
TCP 使用 超时重传和冗余确认 技术来处理超时、丢失等情况。
使用确认号、序号 保证按序到达
使用 校验和 检验传输中是否发生了错误
TCP 发送方有 3个与发送和重传有关的事件:

  • 从上层应用程序接收数据并打包给IP层
  • 启动定时器
  • 收到 ACK

1. 超时时间加倍
超时发生后,会重传 最小序列号还未被确认的报文段,但是定时器时间会加倍。
2. 快速重传
滑动窗口 & 快速重传机制
这里就是有一个 3次冗余 ACK的概念。
3. GBN 还是 选择重传
就是说这里的 TCP 都采用的是 累积确认 机制,就是说会返回最后一个正确到达分组的ack。超时之后,GBN 会重传所有等待的分组,SR 则只是传丢失的,跟缓存一起用。

这个第3点很奇怪。先不用管了。

3.5.5 TCP流量控制

一般来说,我们都希望发送的速率快一点,但是如果发的过快,接收方来不及接受,这个时候,数据肯定会丢失。无法满足 TCP 的可靠传输的需求。
所以实际上,流量控制是速度匹配的服务。就是让发送方不要发送的太快,接收端来不及接受(缓存)。
用滑动窗口机制就可以完成TCP 的流量控制。

这里实际上来说,接收端在确认报文段中 会有一个 rwnd 字段,指明自己接受窗口的大小,发送端根据这个窗口大小来调整自己的发送窗口大小。

3.5.6 TCP 连接管理

就是三次握手和四次挥手
自己之前的笔记

3.7 拥塞控制

讲解视频
总的来说,拥塞控制是用来控制向网络中注入数据速率的。如果注入太快,就会拥塞,导致网络吞吐量大大下降。
发送方会维护一个叫做 Cwnd 就是拥塞窗口的变量,这个变量是动态变化的,原则是,网络不拥塞,拥塞窗口就增大一些;一旦出现拥塞,拥塞窗口就减小一些。

拥塞控制总图
有4种拥塞控制的算法:慢开始、拥塞避免、快重传、快恢复。
1. 慢开始
拥塞窗口指数增大,直到 慢开始门限 ssthresh。

注意,“慢开始”是说一开始向网络注入的报文段少(因为有 threshold 限制),并不是说cwnd增长的慢。

2. 拥塞避免
cwnd 线性增长,当发生超时重传时候(认为网络拥塞),ssthresh = cwnd,cwnd =1,重新执行慢开始

“拥塞避免” 不是说可以完全避免拥塞,而是,在执行这个算法阶段,cwnd 线性增长,网络不容易拥塞。

3. 快重传
快重传就是3次冗余 ack,重复发送。

实际上,并不是丢包就是拥塞了。所以为了避免超时重传,就有了快重传。经过试验来看,采用快重传可以使得网络的吞吐提高20%

4. 快恢复
一旦收到了 3个重复ack,就知道只是丢失了个别报文段,于是启动 快恢复算法。将 cwnd = ssthresh = cwnd/2。并执行拥塞避免算法。

所以如果可以画出来上面的图的话,这里对于 TCP 拥塞控制的内容也就了解了。

TCP 和 UDP 区别

详情见这个老哥的博客

TCP 和 UDP 区别

第4章 网络层

4.4.1 数据报格式


从下到上,依次是:

  • 数据
  • 目的IP地址 & 源IP地址
  • 校验和
  • 数据报长度
  • 版本号
  • ......

这里你从逻辑上想一下,基本就是这些了。别的也不用记住,你也记不住。

IPv4 和 IPv6 的区别

1. 扩展了寻址能力。
V6 有 128位地址,v4只有32位。相当于扩展了4倍
2. 报头格式简化
V6 相对于 V4来说,报头简化了很多
3. 对可选项更大的支持
V6 在 V4 的基础上,支持更多可选项操作,比如 对 IP层安全支持,对IP层漫游支持等功能。
**
4. 支持自动配置
IPv6节点通过 地址自动配置 来获得 V6地址 和网关地址,
5. 身份验证和保密
v6中加入了身份验证、数据一致性等保密性内容
6. 允许继续扩充协议
新的应用扩展也是在 V6 中支持的。


第5章 链路层

5.4.1 链路层寻址 和 ARP

1. MAC地址
其实不是每个主机或者路由器有链路层地址,而是他们的 网络接口 有MAC地址,当然,多个网口的设备就有多个 MAC 地址。
MAC 地址 48 位。

v4 是 32 位, MAC 48 位, V6 是 V4 的 4倍,128位

2. 地址解析协议 ARP(即插即用的)
ARP(Address Resolution Protocol)地址解析协议是用来 做 网络层地址 和 链路层地址间 相互转换的。
DNS 为 全网主机来解析主机名。而 ARP 只为 子网 中主机和路由器接口(MAC地址)解析IP地址。
ARP地址解析协议工作原理:

  • 首先,每台主机和路由器中都有一个 ARP表,存有 IP地址到 MAC地址的 映射关系。一定时间 ARP表 会过期。
  • 然后,当源主机发送数据时,检查自己ARP表中有没有目的IP对应的 MAC地址,有,直接发;没有,向子网中所有主机发送一个 ARP 数据包,这个数据包包括有:源主机 IP,目的IP,源MAC。
  • 其次,收到的主机检查,如果自己的IP就是目的IP,就先更新自己的 ARP表,将自己的MAC地址,写入 ARP 响应包中,
  • 最后,源主机收到 ARP 响应包,更新自己 ARP 表,然后发送数据。

ARP 协议是一个跨越 网络层和链路层的协议

3. 发送数据到子网外
上面说的 ARP 解析,都是在子网中完成的,如果要发到子往外的话,就需要借助路由器了。
一个 路由器 连着两个子网A 和 B,子网A中的主机 甲 想要发数据到子网B中的主机 乙,那就先发到 路由器的 A子网端网口,然后 路由器再 通过子网B 的 ARP 找到目的主机乙。


第8章 计网中的安全

8.3.3 数字签名

很生动形象对于 加密和解密、公钥和私钥、摘要和签名 等的介绍

8.6 使 TCP 安全 :SSL

其实这里就是在说 HTTP 和 HTPPs 间的区别。
之前写的关于 HTTP 和 HTTPs 的区别
--

相关文章

网友评论

      本文标题:《计算机网络-自顶向下方法》重点笔记

      本文链接:https://www.haomeiwen.com/subject/eystchtx.html