我们当今使用电子设备都离不开网络,通过网络我们可以聊天、玩游戏、看电影都操作。

网络的本质就是交换数据

本文我们就来看下数据是如何在网络中传输的。

计算机网络模型

现在有两种计算机网络模型,分别为OSI七层模型和TCP/IP四层模型

OSI将计算机网络分为了7层,TCP/IP将计算机网络分为了4层

计算机网络书中为了更好的解释运行原理,将TCP/IP模型改变成了五层模型,将TCP/IP四层模型中的网络接口层分为了数据链路层和物理层

本文也采用五层模型来解释数据在网络中的传输流程。
TCP/IP五层模型从上到下分为五层,下层为上层提供服务。
1、应用层
应用层是最顶层,直接为用户提供各种各样的传输功能,比如超文本传输协议HTTP用于网页浏览、电子邮件传输协议SMTP用于邮件传送等。
2、传输层
应用层的提供的传输功能多种多样,传输层会对应用层的数据进行包装,通过引入端口号来唯一标识一种传输功能,并且保证数据传输的流量控制、差错控制。
3、网络层
网络层又是对传输层的包装,网络层引入IP地址的逻辑地址信息,将数据在网络中传输。
4、数据链路层
5、物理层

传输流程详解

本文以一个数据包的传输为例,来说明传输流程。我们就以一个HTTP请求数据包为例子来说明。

发送数据的计算机叫做源计算机,接收数据的计算机叫做目标计算机

应用层
首先一个HTTP数据包在应用层中大概包含以下信息,比如HTTP协议的版本号、各种字段属性值、最后是包含的要发送的实际数据。

传输层

传输层对应着有UDP和TCP两种协议,HTTP采用的是TCP协议,因为TCP能够提供差错控制。

每一种应用层协议都对应着一个端口号,接着应用层会将HTTP数据包委托给传输层来进一步包装。

TCP对HTTP报文的包装如下,

传输层会为将HTTP数据包包装上源端口号和目的端口号等信息。

目的端口号是为了在数据包到达目的计算机的时候让其了解需要将数据包交给什么应用层协议进行处理。

源端口号是为了让目标计算机想要返回数据的时候,知道给源计算机的哪个应用层协议发送数据。

端口号是最重要的信息,序号、确认序列号等信息是为了保证可靠传输的,后续的文章我们会专门分析TCP的可靠传输、流量控制等特性。

这里我们在额外说一下,HTTP报文的头部信息占用的字节大小是固定的,后面的具体数据占用的空间是不定的,会随着传输数据的多少而改变。

数据链路层规定的最大传输单元MTU不能超过1500字节,如果HTTP报文的大小超过了MSS = (MTU-N)(因为传输层、IP层会依次进行封装,也会占用空间 N 字节,HTTP报文的最大传输大小应该是MTU-N),

超过了怎么办呢?TCP会对HTTP报文进行拆解,将HTTP报文拆分成多个满足传输要求的报文并包装,这些报文之间是有先后顺序的,TCP对这些报文进行顺序编号,保证数据的正确读写。

网络层
传输层包装好信息后,会进入网络层。

网络层会为其加入源IP和目标IP等信息。
源IP 指的是源计算机的IP
目标IP 指的是目标计算机的IP


数据链路层
在数据链路层中会在数据包中加入发送方MAC地址和接收方MAC地址。
发送方MAC地址 就是源计算机的MAC地址。
接收方MAC地址 并不是目标计算机的MAC地址。而是数据包的下一跳的MAC地址,也就是网关的地址,也可以说是第一个转发的路由器的端口mac地址。

重点:

重点:

重点:

接收方MAC地址怎么获取到呢?

首先源计算机中存在一个路由表,其主要包含以下信息:

1、目标网络地址 Destination
当前路由器可以直接或者间接到达的目标网络

2、Use Iface
目标网络地址对应的转发接口,从该接口将数据包转发出去

3、下一跳IP地址 GateWay
如果为空,说明目标网络地址和当前路由器或者计算机直接相连,通过对应的接口转发就到达了数据包对应的目标网络。

如果不为空,就代表数据包下一步转发到的路由器IP地址。每个路由器端口都对应着一个IP地址和MAC地址。也是通过对应的接口进行转发

4、子网掩码 Fenmask
目标网络地址对应的子网掩码,当目标IP地址和子网掩码&运算后,如果等于目标网络,就说明该目标地址与数据包对应的目标地址相等,可以从对应的接口转出

如果不存在对应的目标网络,就通过默认路由转发出去。默认路由的目标网络为0.0.0.0,子网掩码也为0.0.0.0。

ARP请求

我们需要查看路由表中是否存在对应的目标网络,获得其GateWay,然后查看ARP缓存表,ARP缓存表中存的是IP地址与MAC地址的对应记录。
如果ARP缓存表中存在对应的目标网络,就将其MAC地址填入到接收方MAC地址中,并通过对应的接口转发出去。

如果ARP缓存表中不存在对应的目标网络,源计算机就会发出ARP请求,ARP请求就是将自己的IP地址和希望得到的MAC地址的目标计算机的IP地址包装成数据包通过广播发出去,当目标计算机接收到这个数据包后会将源IP地址取出来,将自己的MAC地址包装成数据包发送回去。这样源计算机就能获得到对应的MAC地址了,并将其IP地址和MAC的地址加入到ARP缓存表中。

通过ARP缓存表或者ARP请求可以获得对应的MAC地址,将其填入到接收方MAC地址中,这样就将IP数据包包装完毕了,称之为

★★★接收方MAC地址是路由器端口的MAC地址,而不是交换机的端口地址。交换机不会验证接收方MAC地址,也就是帧经过交换机 源MAC地址和目标MAC地址都不会发生变化。交换机只负责转发交换,如果存在对应的MAC地址缓存,就从对应的端口转发出去,如果不存在缓存,就从所有端口转发出去

物理层
利用网卡将数据通过二进制流写入到网线或者光纤当设备中。

交换机
数据包首先会发送到交换机中,交换机工作在MAC层,是一个二层网络设备。

接收方MAC地址是路由器端口的MAC地址,而不是交换机的端口地址。交换机不会验证接收方MAC地址,也就是帧经过交换机 源MAC地址和目标MAC地址都不会发生变化。交换机只负责转发交换,如果存在对应的MAC地址缓存,就从对应的端口转发出去,如果不存在缓存,就从所有端口转发出去

交换机中有一个MAC缓存表,会存储MAC地址和对应的转发端口号。

交换机在接收到数据包后,会取出接收方MAC地址,查看其是否存在缓存,如果存在缓存,就通过其对应的端口号将数据包发送出去。

如果不存在,就向所有端口号发出数据包。

交换机中的MAC地址是怎么缓存的呢?
当数据包通过端口进入交换机时,会将对应的发送方MAC地址和进入的端口号写入到缓存中。

路由器——路由转发

数据包出了交换机就算是出了家门了,开始进入路由器。

数据包通过端口进入路由器,执行以下步骤:
1、 路由器首先会检查数据包的接收方MAC地址是否等于路由器端口的MAC地址,如果等于就接收,如果不等于就抛弃。
2、 路由器去除头部的MAC包装,暴露出IP地址信息,取出目标IP地址,然后查看路由表。

取出路由表中的记录与目标IP地址挨个进行检验,检验过程如下:

将记录中的子网掩码与目标IP地址进行&运算,如果等于记录中的目标网络,说明存在当前路由器可以到达目标IP地址,就通过记录中对应的
端口转发出去。

在转发出去之前需要包装MAC地址信息等。
发送方MAC地址: 将路由器输出端口的MAC地址填入发送方MAC地址。
接收方MAC地址: 利用ARP缓存表或者是ARP请求获取下一跳地址的MAC地址, 下一跳地址就是对应着下一个经过的路由器端口IP地址,接收方MAC地址就对应着下一个经过的路由器的端口MAC地址。

3、 如果路由表中不存在对应的目标地址,那么就会通过默认路由发出去,默认路由的目标地址和子网掩码都是 0.0.0.0,MAC的包装和上述一样。

4、 如果同时存在多个符合的路由,就按照最长掩码匹配原则,选择掩码中1最多的路由进行转发。

从路由转发的过程来看,源IP地址和目标IP地址一直不变,发送方MAC地址和接收方MAC地址一直在变。

到达目标计算机
就这样通过路由器的不断转发,数据包会到达与目标计算机直连的路由器。

此时,路由器中目标IP地址对应的路由记录中的下一跳IP地址 就是 目标IP地址。

这个时候,路由表会将目标IP地址的MAC地址当作目的MAC地址,将路由器转发端口对应的MAC地址当作源MAC地址,然后通过端口将MAC帧发送到 路由器端口对应的子网中。

路由器子网是由多个交换机构成的局域网,交换机只会通过MAC地址缓存将数据包转发给对应的端口,如果没有对应的缓存,就转发给所有的端口。

这样的话,数据包就会转发到了目标计算机中。

目标计算机在收到数据包后会将数据包从下层往上层拆封

1、 首先是数据链路层,目标计算机会将MAC包装信息去除,取出接收方MAC地址,查看是否和自己的MAC地址一致,如果不一致,就抛弃。

2、 接着是网络层,将IP包装信息去除,取出目标IP地址,查看是否与自己的IP地址一致,如果不一致,就抛弃。

3、 接着是运输层,会取出目标端口号,通过端口号获取对应的进程,将数据包交给对应的进程。比如HTTP数据包的目标端口号是80,就会交给HTTP进程,HTTP会调用其业务逻辑,将返回的数据包装成数据包通过源IP地址发送给源计算机。

总结

通过上述流程我们看出,数据包首先会在源计算机中从上到下挨个封装信息,然后通过IP地址和MAC地址在交换机和路由器中转发,最终来到目标计算机,目标计算机对数据包从下到上挨个拆封验证,最终通过端口号见数据包交付给对应的进程。

数据包在网络中的传输过程详解相关推荐

  1. IP数据包在网络中的传输过程

    1. 获取目的IP 2. 判断源IP与目的IP是否在同一网段   -->   比较 IP & Genmask 是否相同 2.1 若在同一网段,则先查询arp缓存中是否有目的ip的mac地 ...

  2. 图解数据在网络中的传输过程

    数据在网络中的传输过程 在计算机网络当中,数据是怎么样保证准确的从客户端发送到服务器端的,这是本文探究的重点. 下图是本文中使用的网络拓扑图,数据从客户端发送给服务器端. 客户端各层对数据的封装 ja ...

  3. 探究!一个数据包在网络中的心路历程

    来自:小林coding 前言 想必不少小伙伴面试过程中,会遇到「当键入网址后,到网页显示,其间发生了什么」的面试题. 还别说,这真是挺常问的这题,前几天坐在我旁边的主管电话面试应聘者的时候,也问了这个 ...

  4. 数据帧、IP数据包、TCP、UDP报文格式详解----网络通信原理

    数据链路层.网络层.传输层----网络通信原理 物理层 数据链路层 eNSP抓包实验 网络层 ICMP协议概述 eNSP抓包实验 ARP协议概述 eNSP抓包实验 传输层 TCP协议 eNSP抓包 三 ...

  5. Python数据可视化——matplotlib.pyplot中plt的参数详解

    matplotlib.pyplot中plt的参数详解: #平滑折线的示例 # plt.plot(xnew, ynew, marker='.', markevery=markevery, ls='-', ...

  6. 一个数据包在网络中的心路历程

    1. 浏览器做的第一步工作是解析 URL 首先浏览器做的第一步工作就是要对 URL 进行解析,从而生发送给 Web 服务器的请求信息. PS :上图中的蓝色部分 URL 元素都省略了,哪应该是请求哪个 ...

  7. 消息在网络中的传输过程

    PC-A向PC-B传输消息,首先是用户打开消息应用例如QQ,然后给小黑发消息(你吃了吗), 1)在应用层生成数据"你吃了吗(小黑IP)",然后数据传入表示层节点-表示层, 2)在表 ...

  8. https中SSL加密过程详解,看这一篇就够了!

    我们所说的https实际上就是安全版本的http,是http+ssl加密实现的. SSL握手协议 1.客户端:发起一个 HTTPS 请求,请给我公钥 2.服务器:这是我的证书,里面有加密后的公钥 3. ...

  9. 探究 | 一个数据包在网络中的心路历程

    目录

最新文章

  1. Waymo CEO:将在卡车领域商用无人驾驶技术
  2. 投资狂人陈一舟:哪里火爆投哪里
  3. WebKit 内核源码分析 (三) Page
  4. (四)JS基础知识一(深入分析变量类型和计算)【不会变量,别说你会JS】
  5. 学习有向图和无向图的强连通分量(基本概念+割点+点双联通分量+桥+边双连通分量+全套模板【Tarjan】)
  6. 【Java】文件锁定与系列NIO操作
  7. Win10 通过 VirtualBox安装CentOS7操作手册
  8. Python学习日志(二)
  9. redis PUB/SUB(发布/订阅)
  10. runloop的mode作用是什么?
  11. Python中常用的模块和高级语法整理总结
  12. fckeditor 2.6 php,php下 FCKeditor 2.6.6的使用和配置
  13. 微信H5页面图片无法显示问题
  14. python flasgger bearer验证
  15. 2018最新程序员必备技术类微信公众号
  16. 软碟通UltraISO 制作u盘系统启动盘!
  17. 同服务器文件同步,同步盘如何实时文件同步?
  18. 蒙氏数学素材---乘法板及作业纸
  19. 五十条比较经典的爱情观!
  20. tensorflow 中文字体训练集_TensorFlow与中文手写汉字识别

热门文章

  1. python中rstrip用法_浅谈Python3中strip()、lstrip()、rstrip()用法详解
  2. python与sql server处理表_如何将python和google图表与microsoft sql server数据连接起来?...
  3. 内地过半网民使用假宽带 实际网费为香港469倍
  4. 【微信错误】微信开发者工具,鼠标在模拟器上消失
  5. 小李带你透彻分析RocketMQ的高性能网络通信机制
  6. Android自定义View的四种方式
  7. 详解Siamese网络
  8. Vulnhub-Money Heist: 1
  9. 豆瓣同城的客户端---豆邻1.0
  10. 手游端游辅助需要掌握那些语言