写在前面
对于计网的重点,我们进行相应的整理。其实计网的准备相对于 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报文格式:请求报文 和 响应报文
- 请求报文的格式:
- 请求行:方法字段、URL字段、HTTP版本
- 请求头(首部行):服务器要使用的附加信息。
- 空行:请求头后面必有空行
-
请求数据:请求数据的主题。
Get方法是没有的,放在了 URL的参数中,POST 方法放在表单中。
- 响应报文的格式:
- 状态行:HTTP版本、状态
- 响应头(首部行):发送日期,服务器相关信息等
- 空行:
- 响应正文:响应的数据正文
常见状态码:
301:请求的对象被转移了,重定向的 URL在响应报文中
400:非法请求,丢弃
404:
505:服务器不支持请求报文使用的 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 区别

第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 的区别
--
网友评论