012 网络—基础篇
2.1 TCP/IP 网络模型
- 应用层是工作在操作系统中的用户态,传输层及以下则工作在内核态
1、应用层:http、ssh、ftp,应用程序之间发起数据传输请求
为用户提供网络服务(消息/报文)
- 一台设备上可能会有很多应用在接收或者传输数据,因此需要用一个编号将应用区分开来,这个编号就是端口。 80 端口通常是 Web 服务器用的,22 端口通常是远程登录服务器用的
2、传输层:TCP/UDP,传输层携带端口号,接收方可以识别发送给哪个应用
在网络中建立端到端的连接(段)
3、网络层:IP协议,将数据从一个设备传输到另一个设备。
网络地址分配和路由的选择(包) - 将 10.100.122.2 和 255.255.255.0 进行按位与运算,就可以得到网络号
- 将 255.255.255.0 取反后与IP地址进行进行按位与运算,就可以得到主机号
- IP 协议的寻址作用是告诉我们去往下一个目的地该朝哪个方向走,路由则是根据「下一个目的地」选择路径。
4、网络接口层(链路层):在 IP 头部的前面加上 MAC 头部,并封装成数据帧(Data frame)发送到网络上(在以太网进行通讯要用到 MAC 地址)
传输数据帧,工作在网卡层次(帧)
[[Pasted image 20250217214332.png]]
- 网络接口层的传输单位是帧(frame)
- IP 层的传输单位是包(packet)
- TCP 层的传输单位是段(segment)
- HTTP 的传输单位则是消息或报文(message)
2.2 键入网址到网页显示过程
1、解析URL,URL 实际上是请求服务器里的文件资源。![[Pasted image 20250217214927.png]]
- 当没有路径名时,就代表访问根目录下事先设置的默认文件,也就是
/index.html
或者/default.html
这些文件 - 生产 HTTP 请求信息 [[Pasted image 20250217215343.png]]
(应用层)
2、域名解析:查询真实地址(ip) - DNS服务器:保存 Web 服务器域名与 IP 的对应关系
3、操作系统中的协议栈来实现传输工作,包括下面几个部分,第一个——TCP - TCP:[[Pasted image 20250221213257.png]],三次握手保证双方都有发送和接收的能力
MTU
:一个网络包的最大长度,以太网中一般为1500
字节MSS
:除去 IP 和 TCP 头部之后,一个网络包所能容纳的 TCP 数据的最大长度- TCP 报文中的数据部分就是存放 HTTP 头部 + 数据 [[Pasted image 20250705095646.png]]
(传输层)
4、第二个,远程定位——IP - 源地址IP,即是客户端输出的 IP 地址;
- 假设客户端有多个网卡,存在多个IP地址,源IP地址要选哪个呢?[[Pasted image 20250705100444.png]]。将目标IP和Genmask(子网掩码)与操作,得到结果和Destination匹配,发现使用eth1网卡的IP地址作为IP包头的源地址,
Gateway
即是路由器的 IP 地址。
- 假设客户端有多个网卡,存在多个IP地址,源IP地址要选哪个呢?[[Pasted image 20250705100444.png]]。将目标IP和Genmask(子网掩码)与操作,得到结果和Destination匹配,发现使用eth1网卡的IP地址作为IP包头的源地址,
- 目标地址,即通过 DNS 域名解析得到的 Web 服务器 IP。
(网络层)
5、第三个,两点传输——MAC - MAC 头部是以太网使用的头部,它包含了接收方和发送方的 MAC 地址等信息
- 通过
ARP
协议帮我们找到接收方路由器的 MAC 地址
(链路层)
6、出口:网卡 - 网络包只是存放在内存中的一串二进制数字信息,没有办法直接发送给对方。因此,我们需要将数字信息
转换为电信号,才能在网线上传输,也就是说,这才是真正的数据发送过程。负责执行这一操作的是网卡,要控制网卡还需要靠网卡驱动程序。 - 加上报头的起始帧分界符和末尾的FCS(帧校验序列)[[Pasted image 20250705101708.png]]
7、送别者——交换机 - 交换机的设计是将网络包原样转发到目的地。交换机工作在 MAC 层,也称为二层网络设备。
- 电信号到达网线接口,交换机里的模块进行接收,接下来交换机里的模块将电信号转换为数字信号。过包末尾的
FCS
校验错误,如果没问题则放到缓冲区。(交换机的端口不核对接收方 MAC 地址,而是直接接收所有的包并存放到缓冲区中) - 交换机根据 MAC 地址表查找 MAC 地址,然后将信号发送到相应的端口。[[Pasted image 20250705103027.png]]。
- 当 MAC 地址表找不到指定的 MAC 地址?可能是因为具有该地址的设备还没有向交换机发送过包,或者这个设备一段时间没有工作导致地址被从地址表中删除了。
8、出境大门——路由器 - 网络包经过交换机之后,现在到达了路由器,并在此被转发到下一个路由器或目标设备。
- 因为路由器是基于IP设计的,俗称三层网络设备,路由器的各个端口都具有MAC地址和IP地址;
- 而交换机是基于以太网设计的,俗称二层网络设备,交换机的端口不具有MAC地址。
- 完成包接收操作之后,路由器就会去掉包开头的 MAC 头部。
- 在网络包传输的过程中,源IP和目标IP始终是不会变的,一直变化的是MAC地址,因为需要MAC地址在以太网内进行两个设备之间的包传输。
2.3 Linux系统是如何收发网络包的
1、网络模型
- OSI 七层网络模型:应用层、表示层、会话层、传输层、网络层、数据链路层以及物理层
- TCP/IP 四层网络模型:应用层、传输层、网络层和网络接口层
2、Linux网络协议栈 [[Pasted image 20250705113132.png]]
3、Linux收发网络包流程 - 接着,对sk_buff填充TCP头。这里提一下,sk_buff可以表示各个层的数据包,在应用层数据包叫data,在TCP层我们称为 segment,在IP层我们叫 packet,在数据链路层称为 frame。
- 为什么全部数据包只用一个结构体来描述呢?协议栈采用的是分层结构,上层向下层传递数据时需要增加包头,下层向上层数据时又需要去掉包头,如果每一层都用一个结构体,那在层之间传递数据的时候,就要发生多次拷贝,这将大大降低CPU效率。