你所不知道的网络层
上文《TCP/IP传输层,你懂多少》 http://java-mzd.iteye.com/blog/1007577中,我们介绍了“传输层是如何为数据提供端对端的服务的”.
可是,数据包又是怎样从你的电脑出发,历经网络世界的艰辛,到达对方电脑的呢?在网络的世界当中,你的数据包又会遇到些什么问题?它们又是怎么解决的你?要回答这个问题,我们就必须研究TCP/IP协议栈中的Internet层(和数据链路层了)。
|
同以往一样,给出我自己认为会遇到的15个问题,并且列出来,如果大家能熟练的回答,请您绕道。
- 网络层的作用?
- 网络层有哪些协议?
- IP数据包的格式?
- IP数据包传输的过程?
- 为什么需要ARP协议?
- ARP协议通信过程是怎么样的?(ARP协议如何控制网络?)
- 数据包的最大值?(分片的地方?分片重组的地方?分片的原则?)
- 数据包在局域网内怎么从一台主机传送到另外一台主机?
- 数据怎么实现跨网段传输?(路由如何实现跨网段传输?)
- 什么是默认网关?
- 代理ARP的作用?
- 数据跨网段传输时在路由器中的具体情形?(所谓的穿过路由是指什么?)
- 数据包路由的过程?
- 为什么需要ICMP协议?(ICMP协议差错控制与TCP差错控制对比)
- 什么是ICMP协议?
- ICMP协议有哪些数据包?(Ping程序的实现?trancerouter程序的实现?)
一。网络层的作用:
TCP/IP协议栈的Internet层主要负责处理主机到主机的通信,决定数据包如何交付:是交给网关(路由器)还是交给本地端口。
二。网络层的协议及作用:
网际协议IP:用来路由
网际控制报文协议 ICMP:给IP层提供一定的可靠性
地址解析协议ARP:
反向地址解析协议RARP
三。IP数据包格式:
版本(4)
|
头长度(4)
|
服务类型(8)
|
总长度(16)
|
标识(16)
|
标志(3)
|
段位移(13)
|
生存期(8)
|
协议(8)
|
头校验和(16)
|
源IP地址(32)
|
目的IP地址(32)
|
IP选项(0或者32)
|
数据
|
四。数据包传输的过程
首先,传输层将封装好的数据交给Internet层,Internet层收到数据后,将数据封装成一个IP数据包。
注意协议之间的底层无关性:Internet层封装上层数据包时,不关心不管上层传给他的是UDP数据包还是TCP数据包,都将上层传来的数据封装为IP数据包。同样,传输层在封装用户信息流时也是同样的不关心上层数据的内容。 |
五。为什么需要ARP协议?
IP数据包要想继续向下发送,就必须转化为在物理设备上传输的数据帧。
在物理设备上传输数据时,数据包首先是被网卡接收,如果网卡接收到的数据包的硬件地址与本机不符,则直接丢弃,如果相符,再交由上层协议处理的。而在我们的网络通信中,源主机的应用程序知道目的程序的IP地址和端口号,却不知道目的主机的硬件地址,因此在通讯前必须获得目的主机的硬件地址。ARP协议就起到这个作用。
六。ARP协议通信过程?
每台机器上都维护着一个ARP缓存表,保存着IP地址到MAC地址的映射
注意:缓存表中的记录有过期时间T,如果T时间内没有再次使用某条记录,则该记录失效,下次使用时,还要再次发ARP请求来获得目的主机的硬件地址。
作用:因为我们的机器需要和大量机器通信,如果没有过期机制的话,显然将会产生巨大的记录量,降低效率。
|
主机A要和主机B(192.168.0.1)通信,则先查询主机A中的ARP缓存表,看是否有该记录,如果有,则取出对应MAC地址。
如果缓存中没有该记录,主机A发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”,并将这个ARP请求广播到本地网段(本地网段的任何一个主机都可能是接受者,所以用广播, 广播的目的MAC地址为:FF:FF:FF:FF:FF:FF)主机B收到广播的ARP请求,发现其中的IP地址(192.168.0.1)与本机相符,发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中,主机A接收ARP应答,提取MAC地址,并且将IP和MAC映射存入ARP缓存。
对于其他主机,虽然这个ARP请求可能与它无关,但ARP协议软件也会把其中的源MAC地址与源IP地址的映射记录下来,这样做能够有效的减少ARP请求在局域网的发送次数。
ARP欺骗的原理:
通过以上的知识,我们可以知道,主机A要和主机B通信,必须请求得到主机B的MAC地址,而MAC地址,又是通过ARP请求来得到的。又,根据ARP请求的广播机制,与非接收主机也会讲收到的ARP请求存入自己的ARP缓存。那么,我们可以自己发送一个ARP请求,将默认网关的IP作为发送IP,自己的MAC地址作为发送的MAC地址,随便请求一个IP地址的MAC地址。这样,网络中的所有计算机都会更新到默认网关的ARP缓存,而将默认网关IP对于的MAC地址改为我们网卡的MAC地址。从而,发送给默认网关的IP数据帧都会发送给我们自己的主机,我们监视完IP数据包后,再将IP数据包转发出去,即可通过ARP欺骗来完成对网络的监控。同样。当我们只进行ARP欺骗,而不进行转发的时候,则整个网络(内网)都将瘫痪。 |
当然,这些都只是雕虫小计,装了ARP防火墙的机器,你就不能监控了,要实现监控,最好的方式,还是把你的机器,作为内网的默认网关,所有通往外网的机器都通过你的主机。这样比较合适。 |
七。数据包的最大值:
就像前面我们说的,IP数据包要想继续向下发送,就必须转化为在物理设备上传输的数据帧。对于网络硬件来说,能传输的物理帧的大小是有物理上限的。这个上限值就是最大传输单元MTU。{令牌环网4500字节,以太网1500字节}。当数据包的比MTU大的时候,数据包是无法封装成帧在网络上传输的,当数据包比MTU小的时候,显然又会浪费网络带宽。
因此,IP数据包最理想的大小应该是相连网络的MTU相符。又因为 ,不同的网络MTU可能不同,当数据包需要经过较小MTU的网络时,我们需要将大数据包划分成更小的数据包(分片),以确保他们能通过无力处理大IP数据包的网络。
分片发生的位置:相连MTU网络间的路由
分片重组的位置:目标主机
分片发生在IP层,通过IP数据报报头中的“标志”和“段位移”来标识
(标识由)
分片后,形成的还是IP数据包,在路由中的处理方式与其他IP数据包一样
|
分片示意图:
原始数据包:
分片以后数据包
段位移0
段位移600
段位移1200
分片的优点:可以让数据包穿过MTU多变的网络。
缺点:分片后形成的多个IP数据包,每个都单独路由,又因为重组发送在目标主机,且又一个分片丢失,则整个原始IP数据包丢失,增大丢包风险。
说了这么多,我们还是只是不知道,数据怎么从一台主机到另外一台主机,接下来,我们一一分解,先从局域网开始。 |
八。数据在局域网中是如何传播的?
我们知道,在局域网中,无论是按何种拓扑结构组网,还是按何种方式来处理介质访问权限,任何两个节点之间都存在实际的线路链接。
因此,我们通过ARP协议,得到目标主机的MAC地址后,在数据链路层将IP数据包封装为数据帧,将数据帧发送到本地网段上,即可将数据帧成功的交给目标主机(目标主机网卡收到数据帧后,判断MAC地址是否为本网卡MAC地址)。
当你要和很多很多主机通信时,你不可能保证他们都和你在同一网段内
那么不在一个局域网的数据之间,又是如何通信的呢?
|
九。数据是怎么样实现跨网段传输的?
这就需要路由器通过IP协议来完成此工作了。
下面我们通过一个实际的例子来看:主机A:192.168.1.1 需要和主机B:172.16.1.1通信。
两个主机并不在同一个局域网,并没有实际的物理线路将他们链接起来。
这个时候,我们在两个网段之间增加一个中转点(路由器),路由器上插有多个网卡,可以同时通过网卡E0接入局域网1 (192.168.1.0/24),同时通过网卡E2接入局域网2(172.168.1.0/24)。这样,局域网1中的机器A(192.168.1.1)要和局域网2中的机器B(172.16.1.1)通信。A将数据将数据包发送到本网段,路由器的E1口接收数据包,再将其通过E2口发送到网段B,主机B即可成功接收来自主机A的信息了。即可实现数据的跨网段传输。
大家发现问题了嘛?
没错,我们前面说了“网卡接收数据包后,首先判断MAC地址是不是本机地址,如果不是,则丢弃。”
而且我们说了“ARP请求是发送广播”,而大家都知道,为了防止广播风暴,路由器是不转发广播的。
那么,这个时候,即使A能有办法获得B的MAC地址,路由器的E1口上的网卡,MAC地址也不是B的MAC地址,这个时候,我们该怎么办呢?
|
十。什么是默认网关?
默认网关是TCP/IP中的一个配置参数,它是处于本地网络上的某个路由器的接口的IP地址。
在有默认网关的情况下,目的地为非本网段的数据包,源主机都发送给默认网关,由默认网关将数据包正确的发送给目标主机。
在上图中,网络192.168.1.0/24的默认网关为192.168.1.254,目的地为非本地网段的数据包,都发送给这个IP对应的Router,再由该Router转发给目的主机。
十一:什么是代理ARP?
在没有默认网关的情况下,我们也可以使用代理ARP技术来实现让路由器完成数据的跨网段传输功能。
如果我们将网络中所有主机的目的地都设为本地网络,那么当有要发送给外网IP的数据包时,源主机依然会认为目的地为本网段,而使用目的IP发出ARP请求。这个时候,对于目的IP不是本网段的ARP请求,连接在本网段的路由器使用自己的MAC地址回复这个ARP请求。于是主机A将数据发到本地网段,连在本地网络的路由器接收数据,路由器再将数据转发到正确的目的地。(其实运行代理ARP的路由器就相当于默认网关)
代理ARP的优点:简化了主机的管理(不用再每个主机都单独配置默认网关了)
缺点:因为针对每个局域网,外网IP都是很多的,所以:
1.在路由器上需要保存一个很大的ARP缓存。
2.每个外网IP都需要发送ARP请求,增大了内网的通信。
在上图中,当没有设置默认网关的时候,主机A发送给主机B的数据包,主机A发送ARP请求后,由连接E1口的Router 用自己E1口的MAC地址回复该ARP请求 。
路由器在E1口接到数据包后,怎么样通过E2口发到主机B所在的网段上去? |
十二.路由器中数据跨网段传输的具体情形?
每个路由器中都存有一张路由表,记录着目标网段和对应的网卡出口的映射。
在上面的例子中,路由器的E1口收到数据包,根据数据包取出对应的目的网段的地址172.16.1.1,然后路由器查找路由表,根据IP地址,找到通过E2口可以达到目标网络。于是,路由将数据包从E1口读入,穿过路由器,从E2口写出。
所谓的穿过路由器,应该是指:两个网卡上都分别运行着TCP/IP协议,穿过路由,即从路由的内存中,将数据从网卡1的IP程序拷贝到网卡2的IP程序。 |
至此,关于路由中的部分,我们就几乎讲完了,我们再来总结下:
【路由器都有哪些功能?】
1.交换和转发功能:将数据从路由器的进入接口,穿过路由器,送到输出接口。
(将一个数据包从一个网段,发送到另外一个网段。)
2.路由功能:即寻址,通过IP数据包决定正确的下一跳路径
(通过哪个网卡写出。)
【路由器实现跨网段传输的基础?】
1.硬件基础:有多个网卡,同时在多个网段上,同时属于多个局域网。
2.软件基础:代理ARP(主机将目的地址都配置为本网段,路由器代理回应ARP请求)
|
在实际中的很多情况下,两个局域网之间可能不仅仅隔了一个网段,同理,我们可以在多个网段之间,通过多个路由器而使彼此连接起来。其实路由器就是将世界各地的各个局域网都连接起来,得到了我们现在的互联网。
|
十三:路由过程:
1.主机A的传输层将数据交给网络层,网络层加上双方IP地址,TTL等IP报头信息,成为IP数据包,网络层将IP数据报交给数据链路层。
2.数据链路层根据IP地址,通过ARP得到MAC,封装为物理帧,通过网卡发出。
3.主机B接收物理帧,根据MAC地址判断:如果目的MAC地址不是本网卡MAC地址,则丢弃;如果是发给自己的,则交给网络层处理。
4.网络层通过IP地址判断:如果是发给自己的,则交给上层协议处理;如果不是发给自己的,则在路由表中查找此IP合理的下一跳地址(即通过哪个网卡发送到下一个网段),并将数据通过内存,从接收数据网卡的IP程序拷贝到需要发送数据网卡的IP程序。在发送网卡中,IP程序将数据包交给链路层,链路层发送ARP请求,得到下一跳的目的MAC地址,封装为帧,发送。
如此反复,直到IP数据包到达最终正确的接收主机。
好了,关于ARP和IP都讲了挺多了,可是,为什么有ICMP协议呢?这个协议是干嘛的呢?
|
预知详情,请看下篇《TCP/IP网络层谜云之ICMP》 http://java-mzd.iteye.com/blog/1019089
相关推荐
总结起来,这份文网文业务发展报告详尽展示了XX公司在网络文化领域的业务规划和产品优势,包括其核心产品"中土迷云"的特色玩法和内城建筑系统,反映出公司在网络游戏市场上的竞争力和未来发展的蓝图。通过这样的报告...
简单的基于 Kotlin 和 JavaFX 实现的推箱子小游戏示例代码。这个游戏包含了基本的地图布局、玩家控制角色推动箱子到目标位置的功能,不过目前还只是一个简单的控制台版本,你可以根据后续的提示进一步扩展为图形界面版本并添加推流相关功能(推流相对复杂些,涉及到网络传输和流媒体协议等知识,需要借助如 FFmpeg 或者专门的流媒体库来实现,这里先聚焦游戏本身的逻辑构建)
基于simulink建立的PEMFC燃料电池机理模型(国外团队开发的,密歇根大学),包含空压机模型,空气路,氢气路,电堆等模型。 可以正常进行仿真。
Web端功能1.文件分类管理(文件、图片和视频),可以检索文件(按照分类查看,也可以根据名字检索),可以删除和添加文件,文件可以下载,图片和视频可以在线查看播放2.文件有个物理位置的属性,例如“A柜14排”3.文件可以被用户借阅,可以查看到文件的借阅状态。4.可以查看借阅历史列表信息。(任何借阅的记录都保存下来,用列表的方式展现出来)。5.目标角色分教师、教学秘书、专业负责人、教学院长及管理员6.角色教师通过系统提供的界面,(1)输入教学成果,包括项目、论文、著作封面、获奖证书等,提供成果作证材料,秘书审核后再提交给专业负责人及教学院长审核;(2)输入教学资料,包括教学日历、教学大纲、考试考核方法改革申报表、课程试卷及答案等,上传图片或者PDF文档,提交给教学秘书、专业负责人及教学院长审核。7.教学秘书审核教师提交的教学成果,依据作证材料逐条审核,然后提交给专业负责人及教学院长再作审核。8.专业负责人和教学院长相继审核,给出通过意见或者退回。9.管理员角色负责管理维护系统内部教师信息。10.系统界面设计美观,具有较高的易用性,能够进行角色权限控制...
物流工厂往复式升降机2018可编辑全套技术资料100%好用.zip
【资源说明】 基于USuperStar酒店管理系统(java web课程设计)、全部资料+详细文档+高分项目.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
在信息技术飞速发展的今天,我们正生活在一个信息大爆炸的时代。随着计算机技术的进步和移动终端的普及,国内信息技术已经走在了世界前列。在这样的背景下,传统的手工信息处理方式已经无法满足现代社会的需求,必须依靠计算机技术来提高信息处理的效率。 本次开发的小区物业管理系统采用Java技术,旨在通过计算机化管理提升小区物业信息管理的效率。系统实现了报修管理、房屋管理、收费管理、停车位管理、投诉管理和用户管理等多项功能。 小区物业管理系统的计算机化处理,确保了数据传输的即时性,无论是数据的获取还是输入,都能迅速反馈,极大提升了工作效率。同时,系统采用MySQL数据库,为数据提供了安全可靠的存储解决方案。
设计一个银行存取款管理系统,能够输入和查询客户存款取款记录。在客户文件中,每个客户信息是一条记录,包括编号、客户姓名、支取密码、客户地址、客户电话、账户总金额;在存取款文件中,每次存取款是一条记录,包括编号、日期、类别、存取数目、经办人。类别分为取款和存款两种。本系统能够输入客户存款或取款记录;根据客户姓名查询存款和取款记录
Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
在脚本之家的VBS栏目中,我们精心培育并推广了这一资源,使其逐渐被公众所熟知。我们所提供的代码资源,涵盖了从基础到高级技巧的广泛知识,是长期从网络收集和整理的结果,极具收藏价值,是学习VBS不可或缺的平台。 由于过去在查找和分类这些资料时存在不便,我们对内容进行了重新整理。在批处理之家站长的协助下,我们将这些资料转换成了更易于使用的CHM格式。尽管偶尔会出现乱码,且部分VBS代码可能会被杀毒软件误报,但我们确保这些资料是安全可用的。 我们对大家的支持表示衷心的感谢,并鼓励您访问脚本之家VBS栏目的最新内容。
基于改进A*算法融合DWA算法的机器人路径规划MATLAB仿真程序(含注释) 包含传统A*算法与改进A*算法性能对比?改进A*算法融合DWA算法规避未知障碍物仿真。 改进A*算法做全局路径规划,融合动态窗口算法DWA做局部路径规划既可规避动态障碍物,又可与障碍物保持一定距离。 任意设置起点与终点,未知动态障碍物与未知静态障碍物。 地图可更改,可自行设置多种尺寸地图进行对比,包含单个算法的仿真结果及角速度线速度姿态位角的变化曲线,仿真图片丰富
阈值分割是常见的直接对图像进行分割的算法,根据图像像素的灰度值的不同而定。对应单一目标图像,只需选取一个阈值,即可将图像分为目标和背景两大类,这个称为单阈值分割;如果目标图像复杂,选取多个阈值,才能将图像中的目标区域和背景被分割成多个,这个称为多阈值分割,此时还需要区分检测结果中的图像目标,对各个图像目标区域进行唯一的标识进行区分。阈值分割的显著优点,成本低廉,实现简单。当目标和背景区域的像素灰度值或其它特征存在明显差异的情况下,该算法能非常有效地实现对图像的分割。阈值分割方法的关键是如何取得一个合适的阈值,近年来的方法有:用最大相关性原则选择阈值的方法、基于图像拓扑稳定状态的方法、灰度共生矩阵方法、最大熵法和峰谷值分析法等,更多的情况下,阈值的选择会综合运用两种或两种以上的方法,这也是图像分割发展的一个趋势。
是一个包含英特尔公司(Intel Corporation,股票代码:INTC)从1980年至2024年历史股票数据的数据集。这个数据集提供了每日的股票价格信息,包括开盘价、最高价、最低价、收盘价以及调整后的收盘价,同时还记录了每天的交易量。这些数据对于分析英特尔的市场表现、股票价格趋势以及进行金融分析和预测模型的构建非常有用。 数据集的特点包括: 时间跨度长:覆盖了超过40年的时间,能够提供长期的股票市场趋势分析。 数据详细:包含了每日的股价和交易量,有助于进行深入的技术分析。 调整后的价格:提供了调整后的收盘价,考虑了股票分割、股息和其他公司行为,使得数据更加准确。 来源可靠:数据来源于Yahoo Finance,这是一个广泛认可的获取历史金融数据的平台。 使用这个数据集,分析师和投资者可以进行多种分析,如时间序列分析、股票价格预测和财务分析。这些分析有助于理解英特尔作为半导体行业领导者的发展和表现,以及其在个人电脑技术背后的推动作用。数据集的长期视角也为研究市场趋势和投资决策提供了宝贵的信息。
内容概要:包含温湿度、空气质量、用户交互菜单等功能设计的51单片机智能闹钟 适用人群:对51单片机有基础的了解,具备一定的C语言编程基础,学生与单片机爱好者 能学到什么:仅做借鉴参考,相关设计的思路,一些基础的单片机编程方法。 阅读建议:内置较详细注释可供理解查看,仍有许多不足之处,仅做参考,多多指教。。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。
【资源说明】 基于Java EE 课程设计 Java web 课程设计 基于spring Boot + Mybatis Plus + Vue + Android原生,前后端分离。附带设计报告、UML建模,团队协作赛鸽数据管理系统、全部资料+详细文档+高分项目.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
项目均经过测试,可正常运行! 环境说明: 开发语言:java JDK版本:jdk1.8 框架:springboot 数据库:mysql 5.7/8 数据库工具:navicat 开发软件:eclipse/idea
简介:money 是一个专为 Python 设计的货币类库,旨在帮助开发者更方便、更精确地处理货币相关的操作。 核心功能 精确的货币表示与计算:使用decimal类型来处理货币金额,避免了使用浮点数进行货币计算时可能出现的精度丢失问题,从而确保计算结果的高精度,适用于对精度要求极高的金融交易、电子商务、账单等领域. 多货币支持:内置了符合 ISO 4217 标准的世界各国货币数据,支持多种货币的符号、单位、汇率等功能,可轻松创建不同货币类型的货币对象,并对其进行各种数学运算,如加、减、乘、除等,且能确保精度的正确性,适合需要进行国际化货币处理的应用. CLDR 后端本地化格式:提供了可选的 CLDR(Common Locale Data Repository)后端本地化格式功能,通过format()方法,可根据不同的地区设置,将货币金额格式化为符合当地习惯的字符串形式,如$1,234.57(美国格式)、1.234,57\xa0$(西班牙格式)等,增强了货币显示的本地化和国际化适应性. 可扩展的货币兑换解决方案:通过 “安装” 实现了抽象基类。
管理员功能需求: 管理员登陆后,主要模块包括首页、个人中心、用户管理、教师管理、课程信息管理、班级信息管理、试题管理、在线试题管理、考试管理等功能。 用户功能需求: 用户登陆后,主要模块包括首页、个人中心、课程信息管理、班级信息管理、考试管理等功能。 环境说明: 开发语言:java JDK版本:jdk1.8 框架:springboot 数据库:mysql 5.7/8 数据库工具:navicat 开发软件:eclipse/idea
AppWizard has created this TcpClient application for you. This application not only demonstrates the basics of using the Microsoft Foundation classes but is also a starting point for writing your application. This file contains a summary of what you will find in each of the files that make up your TcpClient application. TcpClient.dsp This file (the project file) contains information at the project level and is used to build a single project or subproject. Other users can share the project (.dsp)