如何将数据从一台主机发送到另一台主机上(详解)
Packet Traveling—How Packets Move Through a Network
原视频链接:https://www.youtube.com/watch?v=rYodcvhh7b8
概念
Packet:
- 包,是TCP/IP协议通信传输中的数据单位,一般称为“数据包”
TCP/IP协议:
- 是工作在OSI模型第三层(网络层)、第四层(传输层)上的,帧工作在第二层(数据链路层)。上一层的内容由下一层的内容来传输,所以在局域网中,“包”是包含在“帧”里的。
hosts:
- 网络主机,是连接到一个计算机网络中的一台计算机或其他设备
switches:
- 交换机,是一种多端口的网桥,在数据链路层使用MAC地址转发数据。通过引入路由功能,一些交换机也可以在网络层转发数据,这种交换机一般称为三层交换机或多层交换机。
MAC地址:
- Media Access Control Address,称为局域网地址、以太网地址或物理地址,是用来确认网络设备位置的地址。
- 补充:在OSI模型中,第三层网络层负责IP地址,第二层数据链接层则负责MAC地址。MAC地址用于在网络中唯一标示一个网卡,一台设备若有一或多个网卡,则每个网卡都需要并会有一个唯一的MAC地址。
routers:
- 路由器,是互联网的枢纽,是连接英特网中各局域网、广域网的设备; 它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送数据。 作用在OSI模型的第三层(网络层),提供了 路由 与 转发 两种重要机制
- 路由:收集网络拓扑信息并动态形成路由表 ;路由器控制层面的工作,决定数据包从来源端到目的端所经过的路由路径
- 转发:根据转发表(FIB)转发IP数据包 路由器数据层面的工作,将路由器输入端的数据包移送至适当的路由器输出端(在路由器内部进行)
APR表:
- 记录着主机的IP地址(网络地址)到MAC地址(物理地址)的映射关系
MAC Address表:
- 记录交换机端口到MAC地址的映射关系
Routing表:
- 记录IP 网络到接口的映射关系
过程
preparation:
说明:
- IP networks:11.11.11.0/24 22.22.22.0/24
- IP address: 11.11.11.10 11.11.11.20 22.22.22.30 22.22.22.40 11.11.11.1 22.22.22.1
- MAC address: aaaa.aaaa.aaaa bbbb.bbbb.bbbb cccc.cccc.cccc dddd.dddd.dddd ee01.ee01.ee01 ee02.ee02.ee02
- 路由器的Routing表中记录了IP网络与路由器接口的映射关系
step 1:Host A has Data for Host D
说明:
- Host A想要发送数据给Host D。Host A将数据封装成IP数据报,IP包头中有源IP地址(11.11.11.10)和目的IP地址(22.22.22.40)
- 在局域网中,当主机或其他网络设备有数据要发送给另一个主机或设备时,它必须知道对方的网络层地址(即IP地址)。但是仅仅有IP地址是不够的,因为IP数据报文必须封装成帧才能通过物理网络发送。因此发送方还需要有接收方的物理地址。
- Host A查看自己的ARP表,发现没有Host D的MAC地址,于是需要发送ARP请求报文去获取默认网关的MAC地址,为了将数据发送给路由器
step 2:Host A sends an ARP Request for 11.11.11.1
说明:
Host A发送ARP请求报文,报文内容大概可以理解为:IP地址为11.11.11.1的MAC地址是什么?
ARP请求报文中的源IP地址和源MAC地址分别为Host A的IP地址和MAC地址,目的IP地址和目的MAC地址为11.11.11.1的IP地址和全0的MAC地址。
ARP报文格式如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-48HTp0BB-1649313659719)(.\images\ARP.png)]
step 3:Switch X Receives Frame
说明:
- Frame:帧
- Switch X接收帧,并将端口号与Host A的MAC地址写入到它的MAC表中。
- ARP请求报文以广播的形式发送,所以该网段上的所有主机都会接收到这个请求包,除了接收端口2上的主机
step 4:Host B discards frame
说明:
- Host B比对传过来的ARP请求报文当中的目的ip地址与自己的ip地址,发现对不上,于是丢弃该报文
step 5:Router receives ARP requests
说明:
- 路由器接收到ARP请求报文后,对比传过来的目的IP地址与自己的IP地址,发现对上了,于是收下这个报文
- 路由器将报文中的Host A发送方的IP地址和MAC地址写入到自己的ARP表中。
step 6:Router generates ARP Response
说明:
- 路由器生成一个ARP响应请求报文,因为已经知道目的MAC地址(即Host A的地址)和目的IP地址(即Host A的IP地址),于是可以通过单播的方式发送出去
step 7:Switch X Receives Frame
说明:
- Switch X接收ARP响应报文,将报文中的MAC地址和对应的Switch端口写入到自己的MAC地址表中
- 然后查阅MAC地址表,发现目的MAC地址对应的是端口2,于是从端口2将响应报文转发出去
step 8:Host A receives ARP Response
说明:
- Host A接收到响应报文后,将响应报文中的源IP地址(11.11.11.1)和源MAC地址(ee01.ee01.ee01)写入到自己的ARP表中
step 9:Host A creates L2 header and sends Packet
说明:
- Host A将IP数据报封装成帧,帧头中记录着源MAC地址和目的MAC地址,分别为Host A的MAC地址(aaaa.aaaa.aaaa)和路由器的MAC地址(ee01.ee01.ee01)
step 10:Switch X receives frame
说明:
- Switch X接收帧,查阅自己的MAC表,发现已经有端口和MAC的映射关系,所以不再添加。然后查阅MAC表,发现目的MAC地址对应的是端口3,于是从端口3将帧转发
step 11:Router receives Packet and strips L2 header
说明:
- 路由器接收到帧,并丢弃帧头,取出其中的IP数据报部分。
- 帧头的作用就是能将IP数据报从Host A传送到路由器
step 12:Router consults Routing Table
说明:
- 路由器查阅Routing表,发现目的IP地址需要从eth2端口发出
- 路由器查询自己的ARP表,发现没有目的IP与目的MAC地址映射关系,于是路由器需要利用ARP知道目的MAC地址
step 13:Router sends an ARP Request for 22.22.22.40
说明:
- 路由器发送一个ARP请求,询问IP地址为22.22.22.40的Host的MAC地址
step 14:Switch Y receives frame
说明:
- Switch Y会接收到这个ARP请求报文,将ARP请求报文中的源MAC地址和对应端口号写入到自己的MAC地址表中
- Switch Y查阅自己的MAC地址表,发现没有目的MAC地址的映射关系,于是采用广播的形式从非接收端口(非端口4)发送ARP请求报文
step 15:Host C discards frame
说明:
- Host C接收到ARP请求报文之后,对比报文中的目的IP地址,发现与自己的IP地址不同,于是丢弃该ARP报文。
step 16:Host D receives ARP request
说明:
- Host D接收到ARP请求报文,发现报文中的目的IP地址与自己的目的IP地址相同,于是收下这个ARP报文。
- 将报文中的源MAC地址(ee02.ee02.ee02)和源IP地址(22.22.22.1)写入到自己的ARP表中。
step 17:Host D generates ARP Response
说明:
- Host D生成ARP响应报文,因为知道路由器的MAC地址,所以可以直接发送出去
step 18:Switch Y receives frame
说明:
- Switch Y接收到ARP响应报文,将报文中的源MAC地址(dddd.dddd.dddd)与对应端口(5)写入到自己的MAC地址表中。
- Switch Y查阅MAC地址表,发现有目的MAC地址(ee02.ee02.ee02)的映射关系,所以Switch Y将从端口4将ARP响应报文发送出去
step 19:Router receives ARP Response
说明:
- 路由器收到ARP 响应报文之后,可以从报文中得知Host D的IP地址和MAC地址,于是将该IP地址(22.22.22.40)和MAC地址(dddd.dddd.dddd)写入到自己的ARP表中。
step 20:Router creates L2 header and sends Packet
说明:
- 路由器将原先从Host A那里收到的IP数据报封装成帧,帧头中记录着源MAC地址和目的MAC地址,分别为路由器的MAC地址(ee02.ee02.ee02)和Host D的MAC地址(dddd.dddd.dddd)
step 21:Switch Y receives frame
说明:
- Switch Y会接收到帧,然后发现自己的MAC地址表中已经有了端口4和源MAC地址(ee02.ee02.ee02)的映射,于是不再添加;
- Switch Y接着查阅MAC地址表,发现目的MAC地址(dddd.dddd.dddd)对应端口5,于是将帧从端口5转发出去
step 22:Host D receives Packet
说明:
- Host D接收到帧之后,首先丢弃帧头,再丢弃IP包头,最后取到Host A想要发送给Host D的数据。
至此,step 1- step 22 完成Host A将数据发送给Host D的全部过程。
step 23:Host D responds with Data for Host A
说明:
- Host D想给Host A发送回复数据
- Host D从Host A发送的帧中得知了Host A的IP地址,从自己的ARP表中得知了默认网关MAC地址
- Host D将数据封装成IP数据报,IP包头有源IP地址(22.22.22.40)和目的IP地址(11.11.11.10)
step 24:Host D creates L2 header and sends Packet
说明:
- Host D将IP数据报封装成帧,帧头有源MAC地址(dddd.dddd.dddd)和目的MAC地址(ee02.ee02.ee02),将帧发送给路由器
step 25:Switch Y receives frame
说明:
- Switch Y接收到帧,发现帧中的源MAC地址和端口号已经有对应映射关系,所以不再添加
- Switch Y查阅MAC地址表,找到目的MAC地址和端口的映射关系,于是从端口4将帧发送出去
step 26:Router receives Packet and strips L2 header
说明:
- 路由器接收到帧后,丢弃帧头,取出其中的IP数据报部分
step 27:Router consults Routing Table
说明:
- 路由器查询Routing表,发现IP地址对应的IP网络应该从接口eth1发送,同时路由器查询ARP表,发现已经有目的IP地址的目的MAC地址(aaaa.aaaa.aaaa)
step 28:Router creates L2 header and sends Packet
说明:
- 路由器将IP数据报封装成帧,帧头有源MAC地址(ee01.ee01.ee01)和目的MAC地址(aaaa.aaaa.aaaa),将帧发送出去
step 29:Switch X receives frame
说明:
- Switch X接收到帧,发现帧中的源MAC地址(ee01.ee01.ee01)和端口号(3)已经有对应的映射关系,于是不再添加
- Switch X查阅MAC地址表,发现目的MAC地址对应端口2,于是将帧从端口2转发出去
step 30:Host A receives Packet
说明:
- Host A接收到帧,去除帧头和IP包头,获取到从Host D想要发送给Host A的回复数据。
至此,step 23- step30完成Host D发送回复数据给Host A的全过程。
总结
- 主机A想给主机D发送数据,必须知道主机D的MAC地址;
- 如果主机A的ARP表中没有主机D的MAC地址,那么主机A需要获取默认网关的MAC地址,然后通过路由器来获取主机D的MAC地址;
- 如果主机A的ARP表中没有默认网关的MAC地址,需要通过ARP来获取MAC地址
- 主机A获取到默认网关的MAC地址之后,将数据封装成帧发送给路由器
- 如果路由器的ARP表中没有主机D的MAC地址,路由器需要通过ARP来获取主机D 的MAC地址
- 路由器获取到主机D的MAC地址之后,将数据重新封装成帧发送给主机D
- 主机D发送回复数据给主机A,因为所有MAC地址已知,所以不用采用ARP,而是直接发送。
如何将数据从一台主机发送到另一台主机上(详解)相关推荐
- ios php 表单提交图片上传,axios发送post请求提交图片表单步骤详解
这次给大家带来axios发送post请求提交图片表单步骤详解,axios发送post请求提交图片表单的注意事项有哪些,下面就是实战案例,一起来看一下. DOME 接口const userUploadA ...
- linux两台服务器传输,Linux两台服务器之间高速数据传输命令:scp应用详解
Linux两台服务器之间高速数据传输命令:scp应用详解 Linux scp命令用于Linux之间复制文件和目录到另外一台,这个命令在多台服务器之间传输还是非常有用的,速度也是非常快的.比window ...
- Python实现发送警告通知到企业微信方法详解
常见的报警方式有:邮件,电话,短信,微信.本文将介绍如何利用Python发送警告通知到企业微信,文中的示例代码有一定的参考价值,感兴趣的可以了解一下.编程资料点击免费领取 目录 1. 新建应用 2. ...
- python headr方法_对Python发送带header的http请求方法详解
简单的header import urllib2 request = urllib2.Request('http://example.com/') request.add_header('User-A ...
- 怎样在两个局域网内共享一台打印机 。常用网络命令及命令实例详解
怎样在两个局域网内共享一台打印机 怎样在两个局域网内共享一台打印机 我们公司有两间办公室,原先布线的时候用一个路由器延伸出多个接口预埋在墙里并做上插头,IP地址是自动分配的,网关是192.168.0. ...
- delphi 串口通信发送_STM32第五章串口通讯详解
点击上方"果果小师弟",选择"置顶/星标公众号"干货福利,第一时间送达! 串口通信是串行通信里面的异步方式.串行通信是相对于并行通信来说的.串口是一个事实存在的 ...
- python串口数据分包_python TCP Socket的粘包和分包的处理详解
概述 在进行TCP Socket开发时,都需要处理数据包粘包和分包的情况.本文详细讲解解决该问题的步骤.使用的语言是Python.实际上解决该问题很简单,在应用层下,定义一个协议:消息头部+消息长度+ ...
- vue.js根据数据循环生成表格_vue.js循环for(列表渲染)详解
vue.js循环for(列表渲染)详解 一.总结 一句话总结: v-for {{ item.message }} var example1 = new Vue({ el: '#example-1', ...
- 【云星数据---Apache Flink实战系列(精品版)】:Apache Flink批处理API详解与编程实战025--DateSet实用API详解025
一.Flink DateSet定制API详解(JAVA版) -002 flatMap 以element为粒度,对element进行1:n的转化. 执行程序: package code.book.bat ...
最新文章
- 教你两种python selenium保存图片的方法
- can总线配置读入是什么意思_STM32学习笔记—CAN总线收发数据常见问题分析
- c语言 数组指针,C语言数组名及指向数组指针的小结
- 畅想未来计算机的绘画作品小学生,畅想未来儿童画绘画作品大全
- 如何在家访问公司的文件服务器,企业的共享文件,该怎么高效管理?
- 【antlr】antlr语法中的fragment
- 4.10 风格代价函数
- python_day24_class_类_继承
- PLSQL Developer破解注册码
- html点击复制一段文字内容,js实现点击按钮复制文本功能
- ableton 中文_Ableton live 中文 PDF.pdf
- 前端开发_5.Electron和Nw.js学习总结
- ZOJ 3789 Gears
- 数据库三范式最简理解(第一范式,第二范式,第三范式)
- 聊聊我的故事 | 我丰富的十二年···
- STVD 编译提示 #error clnk :1 missing output file 的问题
- 弹出新网页在新的对话框中打开
- 软件工程毕业设计课题(83)微信小程序毕业设计PHP家政服务预约小程序系统设计与实现
- 大直径钢管直线度测量仪的使用
- 2 万字 + 20张图| 细说 Redis 九种数据类型和应用场景