计算机网络(1)基础篇

目录

1.TCP/IP 网络模型

2.键入网址--->网页显示

2.1 生成HTTP数据包

2.2 DNS服务器进行域名与IP转换

2.3 建立TCP连接

2.4 生成IP头部和MAC头部

2.5 网卡、交换机、路由器

3 Linux系统收发网络包


1.TCP/IP 网络模型

首先,为什么要有 TCP/IP 网络模型?对于同一台设备上的进程间通信,有很多种方式;但对于不同设备上的进程间通信,就需要网络通信,而设备是多样的,要兼容不同的设备,就需要一套通用的网络协议,这个网络协议是分层的,TCP/IP 网络模型就是对每一层进行设计和介绍。

TCP/IP 网络通常是由上到下分成 4 层,分别是应用层,传输层,网络层和网络接口层。 

应用层的数据包会传给传输层,传输层是为应用层提供网络支持的。在传输层会有两个传输协议,分别是 TCP 和 UDP,要记住他俩都属于传输层协议。

TCP 的全称叫传输控制协议(Transmission Control Protocol),大部分应用使用的正是 TCP 传输层协议,比如 HTTP 应用层协议。

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

当设备作为接收方时,传输层则要负责把数据包传给应用,但是一台设备上可能会有很多应用在接收或者传输数据,因此需要用一个编号将应用区分开来,这个编号就是端口。由于传输层的报文中会携带端口号,因此接收方可以识别出该报文是发送给哪个应用。

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

网络层负责将数据从一个设备传输到另一个设备,那么不同设备之间如何寻找呢 ? 因此,网络层需要能区分设备的编号。我们一般用 IP 地址给设备进行编号,对于IPv4 协议,IP地址共 32 位,分成了四段(比如,192.168.100.1),每段是8位。只有一个单纯的IP 地址虽然做到了区分设备,但是寻址起来就特别麻烦,全世界那么多台设备,难道一个一个去匹配?这显然不科学。因此,需要将 IP 地址分成两种意义:一个是网络号,负责标识该IP地址是属于哪个的;一个是主机号,负责标识同一子网下的不同主机;配合子网掩码能算出 IP 地址的网络号和主机号。

IPv4地址和子网掩码_哔哩哔哩_bilibili

除了寻址能力,IP 协议还有另一个重要的能力就是路由。实际场景中,两台设备并不是用一条网线连接起来的,而是通过很多网关、路由器、交换机等众多网络设备连接起来的,那么就会形成很多条网络的路,因此当数据包到达一个网络节点,就需要通过路由算法决定下一步走哪条路径。所以,IP 协议的寻址作用是告诉我们去往下一个目的地该朝哪个方向走,路由则是根据「下一个目的地」选择路径。寻址更像在导航,路由更像在操作方向盘。

生成了 IP 头部之后,接下来要交给网络接口层,将来自网络层(IP层)的IP数据封装成适合物理网络传输的数据帧,即添加头部和尾部信息(如MAC地址、帧校验序列),然后交给物理硬件传输。解封装:接收物理网络的数据帧后,剥离帧的头部和尾部,提取IP数据报传递给上层(网络层)。网络接口层是TCP/IP模型的基石,确保数据能够跨越物理网络实现“最后一公里”的传输,是连接软件协议栈与硬件设备的桥梁。

  • 传输层,给应用数据前面增加了 TCP 头
  • 网络层,给 TCP 数据包前面增加了IP 头
  • 网络接口层,给 IP 数据包前后分别增加了帧头和帧尾

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

这些新增的头部和尾部,都有各自的作用,也都是按照特定的协议格式填充,这每一层都增加了各自的协议头,那自然网络包的大小就增大了,但物理链路并不能传输任意大小的数据包,所以在以太网中,规定了最大传输单元(MTU)是 1500 字节,也就是规定了单次传输的最大IP 包大小。

当网络包超过 MTU 的大小,就会在网络层分片,以确保分片后的 IP 包不会超过 MTU 大小,如果 MTU越小,需要的分包就越多,那么网络吞吐能力就越差,相反的,如果 MTU 越大,需要的分包就越少,那么网络吞吐能力就越好。

2.键入网址--->网页显示

在浏览器输入URL回车之后发生了什么?_哔哩哔哩_bilibili

2.1 生成HTTP数据包

键入网址到网页显示,期间发生了什么?首先浏览器做的第一步工作就是要对 URL 进行解析,从而生成发送给 Web 服务器的请求信息。长长的 URL 实际上是请求服务器里的文件资源。当没有路径名时,就代表访问根目录下事先设置的默认文件,也就是/index.html 或者 /default.html 这些文件,这样就不会发生混乱了。

对 URL进行解析后,浏览器确定了 Web 服务器和文件名,接下来就是根据这些信息来生成 HTTP 请求消息了。

2.2 DNS服务器进行域名与IP转换

首先我们要先学习DNS域名的解析:DNS域名解析过程_哔哩哔哩_bilibili

通过浏览器解析 URL 并生成 HTTP 消息后,需要委托操作系统将消息发送给 web 服务器。但在发送之前,还有一项工作需要完成,那就是查询服务器域名对应的IP 地址,因为委托操作系统发送消息时,必须提供通信对象的IP 地址。有一种服务器就专门保存了 web服务器域名与 IP的对应关系,它就是 DNS服务器,其实DNS服务器就是一个数据库,里面记录了很多URL和对应的IP地址。

这个根是由一群服务器组成的,这群服务器用了13个不同的域名,这13个根域名服务器是由12个独立机构营运的,注意是13个域名不是13台机器。

当用户在浏览器中输入一个域名,比如www.example.com,客户端(如浏览器)会首先检查自己的缓存(还要检查本机缓存),看是否已经有该域名对应的 IP 地址记录。如果有缓存记录,就直接使用缓存中的 IP 地址进行连接,解析流程结束;如果没有,则会向本地配置的 DNS 服务器发送域名解析请求。如果你的主机里面DNS服务器设置错误就会存在可以登录QQ客户端但是不能浏览网页的情况,因为QQ客户端是直接用IP访问的。

这个DNS服务器一般会是最接近我们的本地DNS服务器,这台本地DNS服务器一般由ISP负责管理,ISP也就是互联网服务提供商(移动、电信)。本地 DNS 服务器接收到请求后,也会先检查自己的缓存。如果缓存中有该域名的记录,就直接将对应的 IP 地址返回给客户端。如果本地 DNS 服务器缓存中没有相关记录,它会根据配置的转发规则,将请求转发给其他 DNS 服务器,比如根 DNS 服务器或上级 DNS 服务器,进行进一步的查询。

2.3 建立TCP连接

2.2 键入网址到网页显示,期间发生了什么? | 小林coding

首先,源端口号和目标端口号是不可少的,如果没有这两个端口号,数据就不知道应该发给哪个应用。
接下来是包的序号,这个是为了解决包乱序的问题。还有应该有的是确认号,目的是确认发出去对方是否有收到。如果没有收到就应该重新发送,直到送达这个是为了解决丢包的问题。
接下来还有一些状态位。例如SYN是发起一个连接,ACK是回复,RST是重新连接,FIN 是结束连接等。TCP 是面向连接的,因而双方要维护连接的状态,这些带状态位的包的发送,会引起双方的状态变更。
还有一个重要的就是窗口大小。TCP 要做流量控制,通信双方各声明一个窗口(缓存大小),标识自己当前能够的处理能力,别发送的太快,撑死我,也别发的太慢,饿死我。除了做流量控制以外,TCP还会做拥塞控制,对于真正的通路堵车不堵车,它无能为力,唯一能做的就是控制自己,也即控制发送的速度。

2.4 生成IP头部和MAC头部

分别对应了网络层和网络接口层

2.5 网卡、交换机、路由器

网络包只是存放在主机内存中的一串二进制数字信息,没有办法直接发送给对方。因此,我们需要将数字信号转换为电信号,才能在网线上传输,也就是说,这才是真正的数据发送过程。
负责执行这一操作的是网卡,要控制网卡还需要靠网卡驱动程序。网卡驱动获取网络包之后,会将其复制到网卡内的缓存区中,接着会在其开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列。

  • 起始帧分界符是一个用来表示包起始位置的标记
  • 末尾的 FCS(帧校验序列)用来检查包传输过程是否有损坏

交换机是将网络包原样转发到目的地。交换机工作在 MAC 层,也称为二层网络设备。那么交换机是如何接收包的呢?

首先,电信号到达网线接口,交换机里的模块进行接收,接下来交换机里的模块将电信号转换为数字信号,然后通过包末尾的 FCS 校验错误,如果没问题则放到缓冲区。

计算机的网卡本身具有 MAC 地址,并通过核对收到的包的接收方 MAC 地址判断是不是发给自己的,如果不是发给自己的则丢弃;相对地,交换机的端口不核对接收方 MAC 地址,而是直接接收所有的包并存放到缓冲区中。因此,和网卡不同,交换机的端口不具有 MAC 地址。

网络包经过交换机之后,现在到达了路由器,并在此被转发到下一个路由器或目标设备。这一步转发的工作原理和交换机类似,也是通过查表判断包转发的目标。不过在具体的操作过程上,路由器和交换机是有区别的:

  • 路由器是基于 IP 设计的,俗称三层网络设备,路由器的各个端口都具有 MAC 地址和 IP 地址
  • 而交换机是基于以太网设计的,俗称二层网络设备,交换机的端口不具有 MAC 地址

在网络包传输的过程中,源 IP 和目标 IP 始终是不会变的,一直变化的是 MAC 地址,因为需要 MAC 地址在以太网内进行两个设备之间的包传输。

3 Linux系统收发网络包

2.3 Linux 系统是如何收发网络包的? | 小林coding

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/18671.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JavaEE进阶】验证码案例

目 🌲实现说明 🎄Hutool介绍 🌳准备工作 🌴约定前后端交互接口 🚩接口定义 🚩实现服务器后端代码 🚩前端代码 🚩整体测试 🌲实现说明 随着安全性的要求越来越⾼…

硬件学习笔记--42 电磁兼容试验-6 传导差模电流干扰试验介绍

目录 电磁兼容试验-传导差模电流试验 1.试验目的 2.试验方法 3.判定依据及意义 电磁兼容试验-传导差模电流干扰试验 驻留时间是在规定频率下影响量施加的持续时间。被试设备(EUT)在经受扫频频带的电磁影响量或电磁干扰的情况下,在每个步进…

机器学习·最近邻方法(k-NN)

前言 上一篇简单介绍了决策树,而本篇讲解与决策树相近的 最近邻方法k-NN。 机器学习决策树-CSDN博客 一、算法原理对比 特性决策树最近邻方法(k-NN)核心思想通过特征分割构建树结构,递归划分数据基于距离度量,用最近…

Deesek:新一代数据处理与分析框架实战指南

Deesek:新一代数据处理与分析框架实战指南 引言 在大数据时代,高效处理和分析海量数据是企业和开发者面临的核心挑战。传统工具如Pandas、Spark等虽功能强大,但在实时性、易用性或性能上仍有提升空间。Deesek(假设名称&#xff…

【Vue】打包vue3+vite项目发布到github page的完整过程

文章目录 第一步:打包第二步:github仓库设置第三步:安装插件gh-pages第四步:两个配置第五步:上传github其他问题1. 路由2.待补充 参考文章: 环境: vue3vite windows11(使用终端即可&…

JVM内存模型详解

文章目录 1. 程序计数器(Program Counter Register)2. Java虚拟机栈(Java Virtual Machine Stacks)3. 本地方法栈(Native Method Stacks)4. Java堆(Java Heap)5. 方法区(…

KubeSphere 和 K8s 高可用集群离线部署全攻略

本文首发:运维有术,作者术哥。 今天,我们将一起探索如何在离线环境中部署 K8s v1.30.6 和 KubeSphere v4.1.2 高可用集群。对于离线环境的镜像仓库管理,官方推荐使用 Harbor 作为镜像仓库管理工具,它为企业级用户提供…

代码随想录-训练营-day30

今天我们要进入动态规划的背包问题,背包问题也是一类经典问题了。总的来说可以分为: 今天让我们先来复习0-1背包的题目,这也是所有背包问题的基础。所谓的0-1背包问题一般来说就是给一个背包带有最大容量,然后给一个物体对应的需要…

百问网(100ask)提供的烧写工具的原理和详解;将自己编译生成的u-boot镜像文件烧写到eMMC中

百问网(100ask)提供的烧写工具的原理 具体的实现原理见链接 http://wiki.100ask.org/100ask_imx6ull_tool 为了防止上面这个链接失效,我还对上面这个链接指向的页面保存成了mhtml文件,这个mhtml文件的百度网盘下载链接: https://pan.baidu.c…

【旋转框目标检测】基于YOLO11/v8深度学习的遥感视角船只智能检测系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

侯捷 C++ 课程学习笔记:C++ 面向对象开发的艺术

在侯捷老师的 C 系列课程中,《C 面向对象开发》这门课程让我对面向对象编程有了更深入的理解。面向对象编程(OOP)是现代软件开发中最重要的编程范式之一,而 C 作为支持 OOP 的语言,提供了强大的工具和特性。侯捷老师通…

神经网络常见激活函数 12-Swish函数

Swish 函数导函数 Swish函数 S w i s h ( x ) x ⋅ σ ( β x ) x 1 e − β x \begin{aligned} \rm Swish(x) & x \cdot \sigma(\beta x) \\ & \frac{x}{1 e^{-\beta x}} \end{aligned} Swish(x)​x⋅σ(βx)1e−βxx​​ Swish函数导数 d d x S w i s h ( x…

CF 137B.Permutation(Java 实现)

题目分析 输入n个样本,将样本调整为从1到n的包含,需要多少此更改 思路分析 由于样本量本身就是n,无论怎么给数据要么是重复要么不在1到n的范围,只需要遍历1到n判断数据组中有没有i值即可。 代码 import java.util.*;public clas…

web第三次作业

弹窗案例 1.首页代码 <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>综合案例</title><st…

go语言简单快速的按顺序遍历kv结构(map)

文章目录 需求描述用map实现按照map的key排序用二维切片实现用结构体实现 需求描述 在go语言中&#xff0c;如果需要对map遍历&#xff0c;每次输出的顺序是不固定的&#xff0c;可以考虑存储为二维切片或结构体。 假设现在需要在页面的下拉菜单中展示一些基础的选项&#xff…

Unity 命令行设置运行在指定的显卡上

设置运行在指定的显卡上 -force-device-index

分享一个使用的音频裁剪chrome扩展-Ringtone Maker

一、插件简介 铃声制作器是一个简单易用的 Chrome 扩展&#xff0c;专门用于制作手机铃声。它支持裁剪音频文件的特定片段&#xff0c;并将其下载为 WAV 格式&#xff0c;方便我们在手机上使用。无论是想从一段长音频中截取精彩部分作为铃声&#xff0c;还是对现有的音频进行个…

数据开放共享和平台整合优化取得实质性突破的智慧物流开源了

智慧物流视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本可通过边缘计算技术…

预留:大数据Hadoop之——部署hadoop+hive+Mysql环境(Linux)

传送门目录 前期准备 一、JDK的安装 1、安装jdk 2、配置Java环境变量 3、加载环境变量 4、进行校验 二、hadoop的集群搭建 1、hadoop的下载安装 2、配置文件设置 2.1. 配置 hadoop-env.sh 2.2. 配置 core-site.xml 2.3. 配置hdfs-site.xml 2.4. 配置 yarn-site.xm…

《Spring实战》(第6版)第1章 Spring起步

第1部分 Spring基础 第1章 Spring起步 1.1 什么是Spring Spring的核心是提供一个容器(container)。 称为Spring应用上下文(Spring application context)。 创建和管理应用的组件(bean)&#xff0c;与上下文装配在一起。 Bean装配通过依赖注入(Dependency Injection,DI)。…