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 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 【网络是怎么连接的】第二章(中):一个网络包的发出 -> 正文阅读

[系统运维]【网络是怎么连接的】第二章(中):一个网络包的发出

1. 关于网络包的基本知识

一个网络包是由头部和数据两部分组成的。头部里放着目的地址等控制信息,数据则就是我们要传送的东西。如图所示
在这里插入图片描述
控制信息(头部)用来在传输过程中告诉转发设备们,我要去往哪里。这就类似于快递包裹上的快递单一样。

2. 网络包传输的过程

对于一个TCP/IP协议产生的网络包,结构也是如此,具体长这样在这里插入图片描述

其中TCP头部我们在上一节讲过了,是由协议栈中的TCP模块加上去的。图中的IP头部和MAC头部则是由TCP下层的IP协议模块加上去的。

IP协议在在添加头部的过程中,会将要访问的服务器的IP地址写入IP头部中,这样IP协议(路由器)就可以根据这个知道包的传输方向;IP协议也会将下一个路由器的以太网地址(MAC地址)写入MAC头部中,这样以太网协议(集线器)也就知道要把包发到哪个路由器上了。

网络中的转发设备有路由器和集线器这两种,路由器是按照IP协议传输包的设备,集线器是按照以太网协议传输包的设备。路由器会根据目标地址判断下一个路由器的位置,集线器则会在子网中将网络包传输到下一个路由。

所以网络包传输的大致过程就是,包往MAC头部记载的路由器地址方向传输,到达目标路由器后,由路由器查看IP头部,对照子自己的IP表修改MAC头部中下一个路由器的地址然后将包转发出去。而集线器则通过查看MAC头部,对照自己的以太网表,将包往目标路由器传输。如此反复,直到到达最终目标服务器。

在这里插入图片描述

3. IP头部

IP头部的格式长这样

在这里插入图片描述

其中IP模块最重要的就是接收方的IP地址,这个地址由TCP模块告知IP模块,而TCP模块又是由应用程序告知的IP地址。

除此之外,还有发送方的IP地址需要填写在IP头部。对于多网卡计算机来说,IP模块需要查一下路由表,看看目标IP地址对应哪个网卡,将那个网卡的IP地址填写上去就好了。路由器里也有这张表格,原理和这里一样。

路由表可以用route print命令来查看,如图

在这里插入图片描述

图中第一列Network Destination就是目的IP地址对应的表,最后一列Interface为当前计算机所对应的网卡的IP地址。IP头部的接受方和发送方就填这俩就行。如果目的地址IP没有匹配到,默认使用第一行10.10.1.16所在的网卡发送数据。

顺带一提,Gateway表示下一个路由器的IP地址,将包发给这个IP,该地址对应的路由器就会将包转发到目标地址。MAC头部里会将Gateway的IP地址转成到对应的MAC地址存在里边。

4. MAC头部

MAC头部长这样
在这里插入图片描述

可以看出IP模块生成MAC头部的时候,要填写发送方的MAC地址和接收方的MAC地址。

发送方MAC地址还好办,直接查发送的那个网卡的ROM就知道了。接收方的IP地址就有点棘手了。

IP模块会根据路由表中的Gateway那一列的内容判断将包发给哪个转发路由器,发给谁就要找到这个IP地址对应的MAC地址。

那这个MAC地址谁知道呢?肯定是目标路由器才会知道自己的MAC地址是多少呀。所以我们需要广播一次,向同一以太网的所有设备都发一个包,这个包就是问“XXX.XXX.XX.XX这个IP地址是谁的?告诉我你的MAC地址”,然后目标路由器就会回答说“嗷,这是我的IP,我的MAC地址是……”然后IP模块收到了这个MAC地址,将这个地址填写到MAC模块中。大功告成。

这个广播的方法就是ARP,Address Resolution Protocol,地址解析协议。

当然不可能每次发包都得广播一遍,那不得累死,计算机在查询后会保存一个表叫做ARP缓存表,类似于DNS解析的缓存表,用于更快地查询到MAC地址。
想看这个表,输入arp -a。

在这里插入图片描述
至此,IP模块已经完成了它的包封装任务,现在是时候将数据交给网卡了。

5. 网卡所做的工作

网卡将协议栈处理好的数据包从内存复制到自己的网卡内缓冲区中,然后向网卡内部的MAC模块发送发送包的命令,然后MAC模块就要开始工作了。

MAC模块会将包的开头加上报头和起始帧分节符,然后在末尾加上用于检测错误的FCS(桢校验序列),加上后,网络包如图

在这里插入图片描述

报头里是用于同步波形的时钟,有了它,接收方才知道如何正确读取接下来的数据。而起始帧分节符则用于提醒接收方,这里之后就是数据本体了,你要注意接收。大致内容如图,意会即可
在这里插入图片描述

结尾的FCS是用来检查包传输过程中数据有没有损坏的,FCS里边有一个很复杂的公式,类似于CRC错误校验。如果数据包有出错,计算出来的东西就会不一样。这样接收方就可以判断传输的数据有没有错误。

加完这些头部后,MAC模块就将数据包转换成通用电信号,然后由PHY(MAU)模块转换成可在网线中传输的形式,然后通过网线发出去。至此,一个网络包终于发出去了。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-06-26 17:06:53  更:2022-06-26 17:08:05 
 
开发: 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年12日历 -2024/12/30 2:10:12-

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