浅析局域网与广域网中数据传输

现在的互联网中使用的TCP/IP协议是基于OSI(开放系统互联)七层参考模型的,如下表所示。

在进行数据传输时,应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据头部(header),称为封装(Encapsulation),如下图所示。

以太网头部主要包含:目标地址(接收端MAC)、源地址(发送端MAC)

IP头部主要包含:目标地址(接收端IP)、源地址(发送端IP

基于此,即可知网络中数据传输需要获取发送端与接收端的IP地址与MAC地址,才能完成数据的封装,从而实现数据的传输。假设有AB两台电脑,A需向B发送数据,则A主机先分别将自身IP、目标设备BIP地址与自身的子网掩码进行“与”操作(若结果一致,则属于同一网段),从而来判断目标设备B与自身是否在同一网段。若目标设备在同一网段中,即两电脑分布如下图所示。

电脑AB挂载在同一路由器下,此时AB发送数据,若A未能获取到目标设备BMAC地址,而仅知道其IP地址,则A以第二层广播的形式发送ARP请求报文(其中包含ABIP地址),同一网段内的其他设备都可以受到这一ARP报文,若发现报文中目标IP与自身IP相同,则向源设备A发回ARP响应报文,从而获取目标设备的MAC地址,即可完成数据的封装,从而实现数据的直接传输。

若存在两电脑ACA需向C传送数据,其分布如下图所示。

明显,PC-APC-C处于不同网段,其相当于处于广域网中的两台主机,PC-A要发送数据包到PC-C,若PC-A不知PC-CIP地址,则PC-A需先发送一个dns请求,路由器Adns解析器会给PC-A回应PC-CIP地址,故而数据包的所需要的源IP地址(PC-AIP地址)与目标IP地址(PC-CIP地址)就都获取到了。

下一步,PC-A需了解如何到达PC-C,还需了解要到达PC-C需经过的下一跳信息。PC-A发送一个ARP的地址解析请求,路由器APC-AARP地址请求作出回应:要去往PC-C需先发包到自己这里,此时路由器A将自身的MAC地址发送给PC-A,这样PC-A数据包的源MAC地址(PC-AMAC地址)与目标MAC地址(路由器AMAC地址)就都有了,即可以完成数据的封装,从而发送数据包出去了。

路由器A收到此数据包后,首先查看此路由表中是否存在去往PC-C的路由,若不存在,则会丢弃包;若存在,则说明这是一个可路由的数据包,然后路由器对其进行一个所谓的线内重写过程:此处先忽略路由器A与路由器B之间复杂的网络连接,则此时数据包中的源IP需变为路由器的IP,即公网IP,目标IP需变为路由器B的公网IP(运用NAT技术进行地址的映射,路由器对此连接进行跟踪,以便有数据返回时,能正确的将数据返回到相应主机);源MAC地址变为路由器AMAC地址,目标MAC地址编为路由器BMAC地址。完成数据包的重写后,即可将数据包发送到路由器B,路由器B再依据建立的“连接跟踪”来判断此数据包是发送给PC-C的,然后再对数据包进行重写,更改目标IP地址与目标MAC地址,将数据包发送到PC-C中(此处的数据传输为两路由器下的两主机之间的数据传输,由于两主机都在局域网内,即其访问网络时都是通过其路由器对应的公网IP来进行数据传输的,故此种情况下的数据传输一般要依赖于服务器,即PC-APC-C先分别与服务器建立连接,从而使得路由器A与路由器B中均存在相应的“连接跟踪”,即当路由器收到相应信息时,能依据“连接跟踪”来判断该将数据发送到那台主机)。

就目前而言,对于那些没有中间服务器的纯 P2P 应用来说,若双方都位于 NAT 设备之后,双方一般是无法建立连接的,因为若没有中间服务器的中转,无法是两端的 NAT 设备上建立相应的映射条目,即对方无法向你发起一个连接。针对这一问题,现在已经有一些P2P-NAT穿越技术来解决这一问题。
相关推荐
程序员的必经之路! 【限时优惠】 现在下单,还享四重好礼: 1、教学课件免费下载 2、课程案例代码免费下载 3、专属VIP学员群免费答疑 4、下单还送800元编程大礼包 【超实用课程内容】  根据《2019-2020年国开发者调查报告》显示,超83%的开发者都在使用MySQL数据库。使用量大同时,掌握MySQL早已是运维、DBA的必备技能,甚至部分IT开发岗位也要求对数据库使用和原理有深入的了解和掌握。 学习编程,你可能会犹豫选择 C++ 还是 Java;入门数据科学,你可能会纠结于选择 Python 还是 R;但无论如何, MySQL 都是 IT 从业人员不可或缺的技能!   套餐一共包含2门MySQL数据库必学的核心课程(共98课时)   课程1:《MySQL数据库从入门到实战应用》   课程2:《高性能MySQL实战课》   【哪些人适合学习这门课程?】  1)平时只接触了语言基础,并未学习任何数据库知识的人;  2)对MySQL掌握程度薄弱的人,课程可以让你更好发挥MySQL最佳性能; 3)想修炼更好的MySQL内功,工作遇到高并发场景可以游刃有余; 4)被面试官打破沙锅问到底的问题问到怀疑人生的应聘者。 【课程主要讲哪些内容?】 课程一:《MySQL数据库从入门到实战应用》 主要从基础篇,SQL语言篇、MySQL进阶篇三个角度展开讲解,帮助大家更加高效的管理MySQL数据库。 课程二:《高性能MySQL实战课》主要从高可用篇、MySQL8.0新特性篇,性能优化篇,面试篇四个角度展开讲解,帮助大家发挥MySQL的最佳性能的优化方法,掌握如何处理海量业务数据和高并发请求 【你能收获到什么?】  1.基础再提高,针对MySQL核心知识点学透,用对; 2.能力再提高,日常工作的代码换新貌,不怕问题; 3.面试再加分,巴不得面试官打破沙锅问到底,竞争力MAX。 【课程如何观看?】  1、登录CSDN学院 APP 在我的课程进行学习; 2、移动端:CSDN 学院APP(注意不是CSDN APP哦)  本课程为录播课,课程永久有效观看时长 【资料开放】 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化。  下载方式:电脑登录课程观看页面,点击右侧课件,可进行课程资料的打包下载。
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页