计算机网络基础 1.0 -- 概述

2023-10-27

概念理解

  • 报文:在网络中发送的数据块成为报文
  • 在发送报文之前,通常会把数组分组,每个组都有个包头和数据组成,包头中包含了诸如目标地址和源地址等重要信息,这样才保证了数据能够有目的的在网络中的传输
  • 主机是用户用来处理信息的,而路由器则是用来转发分组的,就是将报文传送到下一个路由器,知道找到目标地址
  • 链路:经常把网络中的单个通信线路称为链路
  • 我们的一台主机的报文通过一条链路发送给和他直接相连的路由器,路由器根据报文的包头信息将报文传递给下一个路由器,这样一点点的往下找下去
  • ISP:因特网服务提供者。中国电信,中国移动和中国联通就是我国著名的ISP(Internet Service Provider)。ISP可以从因特网管理机构申请很多的IP地址,所谓的上网就是指个人通过某个ISP获得独一无二的IP地址。
  • 计算机之间的通信是主机A的某一个进程和主机B中的某一个进程进行数据的通信

计算机网络中数据交换的三种形式

电路交换

电路交换需要建立一个专用的物理通道,这个 过程必须经过“建立连接(占用通信资源) – 通话(一直占用资源) – 释放连接(归还通信资源”,上面的这种方式就是电路交换

电路交换信息的一个典型 的应用是打电话,当我们通话的时候,需要建立一组专用的连接,然后我们在通话的过程中需要一直占用资源,这样的话,别的通信就无法使用这个通道,这就大大占据了资源,但是 保证了通信的唯一性

报文交换

我们把整个数据块叫做一个报文,报文交换就是一次将整个报文转发到了相邻的节点,全部存储下来,然后再去查找转发表,转发到下一个节点

分组交换

分组交换采用的存储转发的技术。传播数据的时候,会把报文分成一个一个的组,就构成了一个分组,分组又叫做包。然后在每个分组前面会加上一些信息,称为首部,用来存储一些分组的一些必要信息(比如传递的地址,比如属于哪一个报文),通过这种方式将一个报文分开传递,然后到达最终的节点之后再进行组装,就可以得到完整的报文了。

分组也是通过路由器进行数据的交换的,路由器接收到一个分组之后,先暂时存储一下,检查其首部,查找转发表,按照其首部中的目的地址,找到合适的借口转发出去,把分组交付给下一个路由器,就这样一步一步的,最终到达最终的主机。

三种方式的简单比较

电路交换:建立一个唯一的连接,然后整个数据发送和接收

报文交换:整个数据经过中间 的路由器然后再发送给下一个路由器,最终 发送给目的主机

分组交换:将数据分成若干个小段进行数据 传输,也是通过中间的路由器到达最终目的主机

五层协议的体系结构

请看下图
image

应用层

网络上面的各个主机上面的进程
应用层的协议有很多,HTTP支持万维网应用,SMTP支持文件传输,FTP支持文件发送

运输层

负责主机和进程之间进行的数据传输

  • TCP:传输控制协议,提供 面向连接的、可靠的数据传输服务,其数据传输的单位是报文段
  • UDP:用户数据报协议,提供连接的、尽最大努力的数据传输服务(不保证数据的可靠性),其数据传输的单位是用户数据报

网络层

主要使用IP协议,让数据在网络中的各个 主机间进行通信

数据链路层

把上层得到的IP数据报进行组装成帧,然后进行数据的传输

物理层

通过各种传输介质进行数据的传输

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算机网络基础 1.0 -- 概述 的相关文章

  • bluetoothctl 到 hcitool 等效命令

    在 Linux 中 我曾经使用 hidd connect mmac 来连接 BT 设备 但自 Bluez5 以来 这种情况已经消失了 我可以使用 bluetoothctl 手动建立连接 但我需要从我的应用程序使用这些命令 并且使用 blue
  • 为什么我收到“无法进行二进制日志记录”的信息。在我的 MySQL 服务器上?

    当我今天启动 MySQL 服务器并尝试使用以下命令进行一些更改时用于 MySQL 的 Toad http www quest com toad for mysql 我收到此消息 MySQL 数据库错误 无法进行二进制日志记录 消息 交易级别
  • Android:ANT 构建失败,并显示 google-play-services-lib:“解析为没有项目的 project.properties 文件的路径”

    我正在尝试使用 ANT 构建我的应用程序 但在包含 google play services lib 库项目后 我惨遭失败 Step 1 我在 project properties 文件中设置了对库项目的引用 android library
  • Bash 解析和 shell 扩展

    我对 bash 解析输入和执行扩展的方式感到困惑 对于输入来说 hello world 作为 bash 中的参数传递给显示其输入内容的脚本 我不太确定 Bash 如何解析它 Example var hello world displaywh
  • Linux 中的无缓冲 I/O

    我正在写入大量的数据 这些数据数周内都不会再次读取 由于我的程序运行 机器上的可用内存量 显示为 空闲 或 顶部 很快下降 我的内存量应用程序使用量不会增加 其他进程使用的内存量也不会增加 这让我相信内存正在被文件系统缓存消耗 因为我不打算
  • 如何在 shell 脚本中并行运行多个实例以提高时间效率[重复]

    这个问题在这里已经有答案了 我正在使用 shell 脚本 它读取 16000 行的输入文件 运行该脚本需要8个多小时 我需要减少它 所以我将其划分为 8 个实例并读取数据 其中我使用 for 循环迭代 8 个文件 并在其中使用 while
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • 在哪里可以找到并安装 pygame 的依赖项?

    我对 Linux 比较陌生 正在尝试安装 python 的 pygame 开发环境 当我运行 setup py 时 它说我需要安装以下依赖项 我找到并安装了其中之一 SDL 然而 其他人则更加难以捉摸 Hunting dependencie
  • fopen 不返回

    我在 C 程序中使用 fopen 以只读模式 r 打开文件 但就我而言 我观察到 fopen 调用没有返回 它不返回 NULL 或有效指针 执行在 fopen 调用时被阻止 文件补丁绝对正确 我已经验证过 并且不存在与权限相关的问题 任何人
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • 添加要在给定命令中运行的 .env 变量

    我有一个 env 文件 其中包含如下变量 HELLO world SOMETHING nothing 前几天我发现了这个很棒的脚本 它将这些变量放入当前会话中 所以当我运行这样的东西时 cat env grep v xargs node t
  • 尝试安装 LESS 时出现“请尝试以 root/管理员身份再次运行此命令”错误

    我正在尝试在我的计算机上安装 LESS 并且已经安装了节点 但是 当我输入 node install g less 时 出现以下错误 并且不知道该怎么办 FPaulMAC bin paul npm install g less npm ER
  • 无法使用 wget 在 CentOS 机器上安装 oracle jdk

    我想在CentOS上安装oracle java jdk 8 我无法安装 java jdk 因为当我尝试使用命令安装 java jdk 时 root ADARSH PROD1 wget no cookies no check certific
  • 两种情况或 if 哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须制作一个 非常 轻的脚本 它将接受用户的选项并调用脚本中的函数来执行一些任务 现在我可以使用 IF 和 CASE 选项 但我想知道两
  • 如何在Linux内核源代码中打印IP地址或MAC地址

    我必须通过修改 Linux 内核源代码来稍微改变 TCP 拥塞控制算法 但为了检查结果是否正确 我需要记录 MAC 或 IP 地址信息 我使用 PRINTK 函数来打印内核消息 但我感觉很难打印出主机的MAC IP地址 printk pM
  • os.Mkdir 和 os.MkdirAll 权限

    我正在尝试在程序开始时创建一个日志文件 我需要检查是否 log如果不创建目录 则目录存在 然后继续创建日志文件 好吧 我尝试使用os Mkdir 也os MkdirAll 但无论我在第二个参数中输入什么值 我都会得到一个没有权限的锁定文件夹
  • 如何在shell中输出返回码?

    我正在尝试通过调用自定义 shell 脚本sh bin sh c myscript sh gt log txt 2 gt 1 echo 该命令的输出是创建的后台进程的 PID 我想指导 bin sh保存返回码myscript sh到某个文件
  • 使用 sh 运行 bash 脚本

    我有 bash 脚本 它需要 bash 另一个人尝试运行它 sh script name sh 它失败了 因为 sh 是他的发行版中 dash 的符号链接 ls la bin sh lrwxrwxrwx 1 root root 4 Aug
  • jpegtran 优化而不更改文件名

    我需要优化一些图像 但不更改它们的名称 jpegtran copy none optimize image jpg gt image jpg 但是 这似乎创建了 0 的文件大小 当我对不同的文件名执行此操作时 大小仍然完全相同 怎么样 jp

随机推荐