计算机网络复习总结
基础篇
为什么有Tcp/ip网络模型
- 对于同一台设备上的进程间通信,有很多种方式,比如有管道、消息队列、共享内存、信号等方式,而对于不同设备上的进程间通信,就需要网络通信,而设备是多样性的,所以要兼容多种多样的设备,就协商出了一套通用的网络协议
- 这个网络协议是分层的,每一层都有各自的作用和职责
tcp/ip模型有哪几层?
- TCP/IP 网络通常是由上到下分成 4 层,分别是应用层,传输层,网络层和网络接口层
- 表示层 会话层 数据链路层 物理层
- 网络接口层的传输单位是帧(frame),IP 层的传输单位是包(packet),TCP 层的传输单位是段(segment),HTTP 的传输单位则是消息或报文(message)。但这些名词并没有什么本质的区分,可以统称为数据包。
键入网址到网页显示 发生了什么?
-
孤单小弟 —— HTTP : 浏览器做的第一步工作是解析 URL 生成发送给
Web
服务器的请求信息- 图中的长长的 URL 实际上是请求服务器里的文件资源
- 当没有路径名时,就代表访问根目录下事先设置的默认文件
- 生产 HTTP 请求信息
-
真实地址查询 —— DNS : 通过浏览器解析 URL 并生成 HTTP 消息后,需要委托操作系统将消息发送给
Web
服务器- 发送之前,还有一项工作需要完成,那就是查询服务器域名对应的 IP 地址
- 有一种服务器就专门保存了
Web
服务器域名与IP
的对应关系,它就是DNS
服务器 - 域名都是用句点来分隔的,越靠右的位置表示其层级越高
- 域名的层级关系类似一个树状结构:
- 根 DNS 服务器(.)
- 顶级域 DNS 服务器(.com)
- 权威 DNS 服务器(server.com)
- 浏览器会先看自身有没有对这个域名的缓存,如果有,就直接返回,如果没有,就去问操作系统,操作系统也会去看自己的缓存,如果有,就直接返回,如果没有,再去 hosts 文件看,也没有,才会去问「本地 DNS 服务器
-
指南好帮手 —— 协议栈 : HTTP 的传输工作交给操作系统中的协议栈
- 应用程序(浏览器)通过调用 Socket 库,来委托协议栈工作。协议栈的上半部分有两块,分别是负责收发数据的 TCP 和 UDP 协议,这两个传输协议会接受应用层的委托执行收发数据的操作。
- 协议栈的下面一半是用 IP 协议控制网络包收发操作,在互联网上传数据时,数据会被切分成一块块的网络包,而将网络包发送给对方的操作就是由 IP 负责的
- IP 中还包括
ICMP
协议和ARP
协议。ICMP
用于告知网络包传送过程中产生的错误以及各种控制信息。ARP
用于根据 IP 地址查询相应的以太网 MAC 地址
-
可靠传输 —— TCP : HTTP 是基于 TCP 协议传输的;
- tcp头部报文格式:
- 源端口号 16位 :源端口号和目标端口号是不可少的,如果没有这两个端口号,数据就不知道应该发给哪个应用
- 目的端口号 16位
- 序号 32位:这个是为了解决包乱序的问题
- 确认序列 32位 : 目的是确认发出去对方是否有收到。如果没有收到就应该重新发送,直到送达,这个是为了解决不丢包的问题
- 状态位 SYN ACK RST FIN
- 窗口大小。TCP 要做流量控制
- TCP还会做拥塞控制 控制自己,也即控制发送的速度。不能改变世界,就改变自己
- 另:三次握手 目的:**保证双方都有发送和接收的能力 ** 5条
- 一开始,客户端和服务端都处于
CLOSED
状态。先是服务端主动监听某个端口,处于LISTEN
状态。 - 然后客户端主动发起连接
SYN
,之后处于SYN-SENT
状态。 - 服务端收到发起的连接,返回
SYN
,并且ACK
客户端的SYN
,之后处于SYN-RCVD
状态。 - 客户端收到服务端发送的
SYN
和ACK
之后,发送对SYN
确认的ACK
,之后处于ESTABLISHED
状态,因为它一发一收成功了。 - 服务端收到
ACK
的ACK
之后,处于ESTABLISHED
状态,因为它也一发一收了
- 一开始,客户端和服务端都处于
- 查看tcp的连接状态 netstat -napt
- tcp分割数据 : 超过了
MSS
的长度MTU
:一个网络包的最大长度,以太网中一般为1500
字节。MSS
:除去 IP 和 TCP 头部之后,一个网络包所能容纳的 TCP 数据的最大长度
- tcp头部报文格式:
-
远程定位 —— IP : TCP 模块在执行连接、收发、断开等各阶段操作时,都需要委托 IP 模块将数据封装成网络包发送给通信对象
- 在 IP 协议里面需要有源地址 IP 和 目标地址 IP
- 客户端有多个网卡,就会有多个 IP 地址,那 IP 头部的源地址应该选择哪个 IP 呢?
- 根据路由表规则,来判断哪一个网卡作为源地址 IP route -n
- 和第一条目的子网掩码(
Genmask
)进行 与运算 与 destination 比较 - 其他所有条目都无法匹配 匹配默认网关
- 加上了 IP 头部的数据包表示 :“有 IP 大佬给我指路了,感谢 IP 层给我加上了 IP 包头,让我有了远程定位的能力
-
两点传输 —— MAC : 生成了 IP 头部之后,接下来网络包还需要在 IP 头部的前面加上 MAC 头部
- 在 MAC 包头里需要发送方 MAC 地址和接收方目标 MAC 地址,用于两点之间的传输
- MAC 发送方和接收方如何确认?
- 发送方的 MAC 地址获取就比较简单了,MAC 地址是在网卡生产时写入到 ROM 里的,只要将这个值读取出来写入到 MAC 头部就可以了
- 接收方 按如何获取对方的 MAC 地址呢?需要
ARP
协议帮我们找到路由器的 MAC 地址- ARP 协议会在以太网中以广播的形式,对以太网所有的设备喊出:“这个 IP 地址是谁的?请把你的 MAC 地址告诉我”
- 后续操作系统会把本次查询结果放到一块叫做 ARP 缓存的内存空间留着以后用,不过缓存的时间就几分钟
- 先查询 ARP 缓存
-
出口 —— 网卡 : 网络包只是存放在内存中的一串二进制数字信息,没有办法直接发送给对方。因此,我们需要将数字信息转换为电信号,才能在网线上传输,也就是说,这才是真正的数据发送过程
- 负责执行这一操作的是网卡,要控制网卡还需要靠网卡驱动程序
- 网卡驱动获取网络包之后,会将其复制</