图解网络读书笔记

99 阅读3分钟

1. 背景

网络知识的学习至关重要,这次学习的是某个某个大佬整理的网络知识,写的还是蛮好的,读书笔记就是提炼一些重要的,跟自己想法一样的知识点

2. 读书笔记

TCP/IP 网络模型

应用层只需要专注于为用户提供应用功能

应用层是不用去关心数据是如何传输的

而且应用层是工作在操作系统中的用户态,传输层及以下则工作在内核态。 应用层的数据包会传给传输层,传输层(Transport Layer)是为应用层提供网络支持的。 TCP 相比 UDP 多了很多特性,比如流量控制、超时重传、拥塞控制等,这些都是为了保证数据包能可靠地传输给对方

应用需要传输的数据可能会非常大,如果直接传输就不好控制,因此当传输层的数据包大小 超过 MSS(TCP 最大报文段⻓度) , 就要将数据包分块,这样即使中途有一个分块丢失或 损坏了,只需要􏰁新发送这一个分块,而不用􏰁新发送整个数据包。在 TCP 协议中, 我们把 每个分块称为一个 TCP 段(TCP Segment)

网络层最常使用的是 IP 协议(Internet Protocol),IP 协议会将传输层的报文作为数据部分,再加上 IP 包头组装成 IP 报文, 如果 IP 报文大小超过 MTU(以太网中一般为 1500 字 节)就会再次进行分片,得到一个即将发送到网络的 IP 报文

需要将 IP 地址分成两种意义: 一个是网络号,负责标识该 IP 地址是属于哪个「子网」的; 一个是主机号,负责标识同一「子网」下的不同主机;

那么在寻址的过程中,先匹配到相同的网络号(表示要找到同一个子网),才会去找对应的 主机

除了寻址能力, IP 协议还有另一个􏰁要的能力就是路由

生成了 IP 头部之后,接下来要交给网络接口层(Link Layer)在 IP 头部的前面加上 MAC 头 部,并封装成数据帧(Data frame)发送到网络上。

网络接口层的传输单位是帧(frame),IP 层的传输单位是包(packet),TCP 层的传输单 位是段(segment), HTTP 的传输单位则是消息或报文(message)。但这些名词并没有什 么本质的区分,可以统称为数据包

TCP头部包的序号,这个是为了解决包乱序的问题。 还有应该有的是确认号,目的是确认发出去对方是否有收到。如果没有收到就应该重新发送,直到送达,这个是为了解决丢包的问题

还有一个重要的就是窗口大小。TCP 要做流量控制,通信双方各声明一个窗口(缓存大 小),标识自己当前能够的处理能力,别发送的太快,撑死我,也别发的太慢,饿死我。

三次握手目的是保证双方都有发送和接收的能力

如何查看 TCP 的连接状态 TCP 的连接状态查看,在 Linux 可以通过 netstat -napt 命令查看

MTU :一个网络包的最大⻓度,以太网中一般为 字节。 MSS :除去 IP 和 TCP 头部之后,一个网络包所能容纳的 TCP 数据的最大⻓度

在双方建立了连接后,TCP 报文中的数据部分就是存放 HTTP 头部 + 数据,组装好 TCP 报 文之后,就需交给下面的网络层处理

TCP 模块在执行连接、收发、断开等各阶段操作时,都需要委托 IP 模块将数据封装成网络包 发送给通信对象。

假设客户端有多个网卡,就会有多个 IP 地址

image.png