012 网络—基础篇

发布于:2025-08-07 ⋅ 阅读:(26) ⋅ 点赞:(0)
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 地址。
  • 目标地址,即通过 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效率。

网站公告

今日签到

点亮在社区的每一天
去签到