IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 一个网络包是怎么发送到另一台电脑的 -> 正文阅读

[网络协议]一个网络包是怎么发送到另一台电脑的

首先来介绍一个叫协议的东西, 为什么需要协议? 没有协议, 各个电脑厂商, IBM, 苹果都弄自己的协议, 结果就是苹果电脑只能跟苹果电脑通信, 和IBM电脑不可以通信, 这很尬; 所以搞一个国际通行的协议, 大家按照这个来, 所有电脑都可以通信了

OSI七层模型, 搞一个标准的网络模型出来, 大家都按照这个来走, 那么大家都有统一的规范. OSI七层模型, 是应用层, 表示层, 会话层, 传输层, 网络层, 数据链路层, 物理层; TCP/IP模型 , 数据链路层, 网络层, 传输层, 应用层

物理层

主要是负责传输0和1的电路信号

数据链路层

物理层将各个电脑连接起来, 但是0 和1怎么发送呢, 需要一个电信号分组方式, 后来出现了以太网协议; 一组电信号就是一个数据包, 叫一个帧(frame), 每个帧分成2个部分, 表头(head)和数据(data), 标头包涵一些说明性的东西, 发送者, 接受者和数据类型;

每台电脑要往另一台电脑发送数据, 一堆0/1电路信号, 封装成数据包, 包含头和数据, 头里包含了从哪里来到哪里去, 必须从一台电脑的网卡 到另一台电脑的网卡, 所以以太网发送数据包必须指定, 目标电脑网卡的mac地址

note: 每块网卡出厂的时候, 就有一个唯一的mac地址, 48位的二进制位, 但是一般用12个16进制数字表示, 前6个16进制是厂商编号, 后6个16进制是网卡流水号

传输: 以太网的数据包不是从一个mac地址发送到另一个mac地址, 这个不是精准推送的, 以太网里面, 如果一个电脑发一个数据包出去, 会广播给局域网内的所有电脑设备的网卡, 然后每台电脑都从数据包里获取接收者的mac地址, 跟自己的mac地址对比一下, 如果一样, 就说明这个是发送给自己的数据包(广播是广播数据给一个子网内的电脑)

网络层

上面提及, 子网内的电脑通过以太网发送/接收数据包. 如果不是同一个子网的呢??? 这个靠网络层了. 有一套IP地址可以让我们区分那些电脑是一个子网的.
网络层里有IP协议, ip协议定义的地址有32位(IPv4), 前24位代表网络号, 后8位代表主机号; 至于怎么区分呢? 比如一个ip地址是192.168.56.1, 子网掩码是255.255.255.0, 来了一个数据包目标ip地址是192.168.32.7
分别拿2个IP地址跟子网掩码进行与运算

192.168.56.1 11000000.10101000.00111000.00000001
255.255.255.0 11111111.11111111.11111111.00000000
与运算 11000000.10101000.00111000.00000000

192.168.32.7 11000000.10101000.00100000.00000111
255.255.255.0 11111111.11111111.11111111.00000000
与运算 11000000.10101000.001000.00000000

这2个很明显是不一致的,所以不是同一个子网, 其实有时候不用做运算, 看ip地址可以知道的, 第三部分,一个是56一个是32…
如果发现不在同个子网, 那就需要路由器来发送数据包, 路由器是负责将多个子网进行连接. 路由器其实就是配置了多个网卡的专用设备, 可以通过不同的网卡接入不同的网络. 路由器上每个网卡都有mac地址和对应的ip地址.路由器虽然有mac地址, 但是不能通过mac地址寻址, 必须通过ip地址寻址, 所以路由器其实是工作在网络层的设备.
(补充:) 网络交换机, 也是一种设备, 是工作在数据链路层的, 路由器是工作在网络层. 交换机是通过mac地址寻址和发送数据包的, 但是路由器是通过ip地址寻址和传输数据包的.

大致过程是 路由器配置2块网卡, 每个网卡可以连到一个局域网内. 局域网1内的电脑要发送数据包到局域网2内的电脑, 在数据包上面带上自己的ip地址和对方的ip地址, 但是他们两不在同一个局域网内, 于是局域网1内的电脑先通过交换机将数据包发送给路由器, 这个过程需要将路由器的一块网卡的IP地址和mac地址写到数据包的头部, 通过交换器广播出去, 路由器接收到之后比较自己一块网卡的mac地址, 就知道是来找自己的.
路由器接收到之后, 就在局域网2内, 将目标的ip地址和mac地址写入头部, 接着再通过交换机进行广播通知, 发送到局域网2内的电脑, 如此类推. 就发送到了局域网3内的目标ip地址的机器了
具体可以看图: 上面有1 2 3 4的标识

在这里插入图片描述

传输层

到了这一层的数据, 已经达到了目标机器内, 接下来需要的是数据包需要发送给对应的应用程序, 所以还需要一个端口的概念, 目标机器监听指定端口的程序就可以提取这个端口的数据, 知道是自己的数据; 端口号是065536的范围内,01023被系统占用了,别的应用程序就用1024以上的端口就ok了

tcp和udp协议也是工作这这一层上的, 在数据包上加入了端口号, 能够进行点对点的通信, 但是传输层的tcp协议, 仅仅是规定了一套基于端口的点对点通信协议, 包括如何建立连接, 发送和读取消息, 但实际上如果你是基于tcp协议开发, 你一般是socket进行网络编程

应用层

通过传输层的tcp协议可以传输数据, 但是收到数据之后, 怎么来解释? 比如网页怎么处理, 邮件又是我怎么处理?
所以整出不少应用层的协议, 最经典就是http了,
比如第一场肯定是这样的 GET http://localhost:8080/ http/1.1
第二行是怎样的… 类似规范

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-12-04 13:46:48  更:2021-12-04 13:47:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/6 8:47:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码