草庐IT

IP协议+以太网协议

504 Gateway Time-out 2023-04-20 原文

在计算机网络体系结构的五层协议中,第三层就是负责建立网络连接,同时为上层提供服务的一层,网络层协议主要负责两件事:即地址管理和路由选择,下面就网络层的重点协议做简单介绍~~

IP协议

网际协议IP是TCP/IP体系中两个最重要的协议之一,简单来说就是负责使互连起来的许多计算机网络进行通信的协议。

计算机网络通过路由器进行互连,参加互连的计算机网络势必使用相同的网际协议IP,因此我们将互连以后的计算机网络看做是一种虚拟互连网络(逻辑互连网络),即互连起来的各种物理网络的异构性本来是客观存在的,但若我们使用了IP协议就可以将这些各异的网络在网络层上看做是一个统一的网络;

那么在这样一个虚拟网络上,我们如何进行寻址,进一步进行数据传输呢?

分类的IP地址

进行寻址,势必就要进行编址,我们给互联网上的每一台主机的每一个结口分配一个32位的标识符,就得到了用来寻址的IP地址。最早的IP地址的编址方法是对IP地址进行分类,大致分类方法如下:

最初的IP地址分为上面5类,使用最为广泛的是A、B、C三类;

IP地址都是32位的二进制代码,为了提高可读性,我们使用点分十进制记法来表示(每8位为一段,插入一个空格)

IP地址在整个互联网范围内是唯一的~

IP地址与硬件地址

前面提到IP地址实际是一种虚拟的地址,它与硬件地址又有什么区别呢?

硬件地址,即物理地址,是数据链路层和物理层使用的地址;
IP地址是网络层及以上各层使用的地址,是一种逻辑地址;

在发送数据时,数据从高层逐渐被下到低层,再通过通信链路进行传输。使用IP地址的IP数据报被交给数据链路层,就会被封装成MAC帧;因此IP地址是被放在IP数据报的首部的,而硬件地址则是被放在MAC帧的首部;

ARP地址解析协议

地址解析,即通过主机的IP地址来解析得到其对应的硬件地址;由于IP地址与硬件地址的数据格式不同(IP地址32位,硬件地址48位)两者之间并不存在映射的关系,为了数据的顺利传输,就需要通过IP地址来得到其对应的硬件地址。因此,ARP协议的用途就是:从网络层使用的IP地址,解析出在数据链路层使用的硬件地址;

下面是ARP协议工作流程的简单介绍:

对于每一台主机,都会内置有一个ARP高速缓存,其中存放了本局域网上各主机的IP地址对应的硬件地址(相当于一个映射表)。对于缓存内有的IP地址,主机可以直接通过其内部的映射表得到对应的硬件地址,若是其缓存中查不到某个IP地址的映射信息,ARP进程就会通过发送ARP请求分组来寻求其对应的硬件地址;

ARP进程是主机A在没有找到需要的映射信息时自动运行的一个进程,该进程会在本局域网上通过广播的方式去发送一个ARP请求分组(大致内容为:本主机A的IP地址为x.x.x.x,硬件地址为x-x-x-x-x-x,需要知道IP地址为x.x.x.x的主机的硬件地址),在本局域网上的所有主机的ARP进程都会都到该请求分组,若主机B的IP地址与请求分组中寻求的信息对应,就会收下这个ARP请求分组,同时向主机A发送ARP响应分组,这个ARP响应分组中就带有自己的硬件地址,待主机A收到这个响应分组,就将此条映射信息存入自己的缓存中去;若是寻求本局域网以外的IP地址的硬件地址,就会通过路由器来进行转发,这个过程需要通过转发表来进行~

使用ARP高速缓存可以有效避免每次通信都需要发送请求分组从而增加网络通信量的问题,同时ARP对保存在高速缓存中的每一个映射信息都会设置一定的生存时间,超出该时间就从缓存中删掉该映射信息,来避免由于主机B更换硬件地址而导致数据传输错误的问题~

IP数据报的格式

如下图:

一个IP数据报由首部和数据两部分组成。首部的前一部分固定20字节,下面是首部各字段的含义:

版本:指IP协议的版本,目前广泛使用IPV4版本;
首部长度:占4位,首部长度字段所表示数的单位是32位字(一个32位字长是4字节),首部长度字段的最小值是5(首部的固定长度是20字节);
总长度:首部和数据长度之和;
标识:数据报被分片时,相同的标识字段的值视为同一个数据报;
标志:最低位为MF,MF=1表示后面还有分片,MF=0表示后面没有分片;中间的一位为DF,DF=0时表示允许分片;
片偏移:表示相对于用户数据字段的起点,该片从何处开始;
生存时间:TTL,数据报每被路由器转发一次,该值减一,TTL为零,该数据报被丢弃;
协议:表示此数据报携带的数据是使用何种协议;

IP层分组转发

对于不在同一局域网上的数据传输,需要使用路由器来进行转发分组,具体的转发流程如下:

  1. 通过数据报的首部得到目的主机的IP地址,通过ARP协议得到目的网络地址;
  2. 若其网络地址是与该路由器直接相连的某个网络地址,进行直接交付;
  3. 不满足第2条,若路由表中有目的地址的特定主机路由(对特定的目的主机指明一个路由),将数据报交给路由表中所指明的路由器;
  4. 不满足2,3条,将数据报传送给路由表中所指明的默认路由器;
  5. 报告转发分组出错;

划分子网

经过时代的不断发展,两级IP地址的弊端逐渐显现,为了更好的进行网络通信,将两级IP地址发展为三级IP地址;

通过划分子网的方式来达到三级IP地址的目的,即从网络的主机号借用若干位作为子网号,记为IP地址::={<网络号>,<子网号>,<主机号>};

子网掩码和IP地址进行“与”操作就可以得到其对应的网络地址~

CIDR(无分类编址)

前面的编址方法都不可避免IP地址被分配完毕的问题,因此又引入了无分类编址,无分类即消除了传统的ABC类地址及划分子网的概念,而是将32位的IP地址划分为前后2个部分 IP地址 ::={<网络前缀>,<主机号>};同时在IP地址后面加上斜线“/”,来表示网络前缀所占的位数(斜线记法),斜线后面的数字就是地址掩码中1的个数;

网络地址转换NAT

NAT是为了解决专用网内部的主机与互联网上的主机进行通信的问题;这种方法需要在专用网连接到互联网的路由器上安装NAT软件,装有NAT软件的路由器称为NAT路由器,它至少有一个有效的外部全球IP地址,具体的转换过程就需要这个全球IP地址;

具体的工作流程如下:
假设专用网内部的主机A需要向互联网上的主机B发送数据,当NAT路由器收到主机A的数据报时,就将该数据报的源IP地址转换为新的源IP地址(即NAT路由器的全球IP地址),再转发出去。当互联网上的主机B收到该数据报时,就仍以这个全球IP地址为目的地址发送应答数据,待应答数据到达NAT路由器时,再由该路由器使用NAT地址转换表对应答数据的目的地址进行转换,如此使数据顺利到达主机A;

当然,解决IP地址不够用的问题,最优的办法就是使用IPV6,今天,IPV6的使用也逐渐广泛~

数据链路层是计算机网络体系结构中的第2层,数据链路层的三个基本问题是:封装成帧(在一段数据的前后分别添加首部和尾部),透明传输、差错检测(循环冗余检验CRC);

以太网的MAC层

在局域网中,硬件地址又称为物理地址或MAC地址,MAC地址是用在MAC帧中,下面是MAC帧的格式:

MAC帧的目的地址和源地址都是物理地址,而非IP地址,当数据字段的长度小于46字节时,MAC子层就会在数据字段的后面加入一个整数字节的填充字段,来保证以太网的MAC帧长不小于64字节;
FCS即栈检验序列;

数据字段的最大值为1500,即以太网的最大传输单元(MTU),用来通知对方所能接收数据服务单元的最大尺寸,若一个IP数据报的数据帧的长度大于MTU,将会对该数据报进行分片;

over!

有关IP协议+以太网协议的更多相关文章

  1. ruby - 从 Ruby 中的主机名获取 IP 地址 - 2

    我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge

  2. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  3. ruby - 在 TCPServer (Ruby) 中,我如何从客户端获取 IP/MAC? - 2

    我想在Ruby的TCPServer中获取客户端的IP地址。以及(如果可能的话)MAC地址。例如,Ruby中的时间服务器,请参阅评论。tcpserver=TCPServer.new("",80)iftcpserverputs"Listening"loopdosocket=tcpserver.acceptifsocketThread.newdoputs"Connectedfrom"+#HERE!HowcanigettheIPAddressfromtheclient?socket.write(Time.now.to_s)socket.closeendendendend非常感谢!

  4. ruby - HTTP POST 上的 SSL 错误(未知协议(protocol)) - 2

    尝试通过SSL连接到ImgurAPI时出现错误。这是代码和错误:API_URI=URI.parse('https://api.imgur.com')API_PUBLIC_KEY='Client-ID--'ENDPOINTS={:image=>'/3/image',:gallery=>'/3/gallery'}#Public:Uploadanimage##args-Theimagepathfortheimagetoupload#defupload(image_path)http=Net::HTTP.new(API_URI.host)http.use_ssl=truehttp.verify

  5. 玩以太坊链上项目的必备技能(初识智能合约语言-Solidity之旅一) - 2

    前面一篇关于智能合约翻译文讲到了,是一种计算机程序,既然是程序,那就可以使用程序语言去编写智能合约了。而若想玩区块链上的项目,大部分区块链项目都是开源的,能看得懂智能合约代码,或找出其中的漏洞,那么,学习Solidity这门高级的智能合约语言是有必要的,当然,这都得在公链``````以太坊上,毕竟国内的联盟链有些是不兼容Solidity。Solidity是一种面向对象的高级语言,用于实现智能合约。智能合约是管理以太坊状态下的账户行为的程序。Solidity是运行在以太坊(Ethereum)虚拟机(EVM)上,其语法受到了c++、python、javascript影响。Solidity是静态类型

  6. 物联网MQTT协议详解 - 2

    一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su

  7. ruby - 没有 nginx 的 Puma - 同一 IP 上的多个 ruby​​ 应用程序 :PORT - 2

    Nginx在生产中的重要性通常基于它为慢速客户端提供服务的能力;在RESTfulAPI的设置中,它似乎是生产堆栈的一个不必要的层,尤其是Puma(不像广泛使用的unicorn可以处理nginx工作)。Pumacanallowmultipleslowclientstoconnectwithoutrequiringaworkertobeblockedontherequesttransaction.Becauseofthis,Pumahandlesslowclientsgracefully.HerokurecommendsPumaforuseinscenarioswhereyouexpect

  8. 网络实验之RIPV2协议(一) - 2

    一、RIPV2协议简介  RIP(RoutingInformationProtocol)路由协议是一种相对古老,在小型以及同介质网络中得到了广泛应用的一种路由协议。RIP采用距离向量算法,是一种距离向量协议。RIP-1是有类别路由协议(ClassfulRoutingProtocol),它只支持以广播方式发布协议报文。RIP-1的协议报文无法携带掩码信息,它只能识别A、B、C类这样的自然网段的路由,因此RIP-1不支持非连续子网(DiscontiguousSubnet)。RIP-2是一种无类别路由协议(ClasslessRoutingProtocol),支持路由标记,在路由策略中可根据路由标记对

  9. Java IP归属地查询(离线方式+在线方式,内附查询IP方法) - 2

    一、离线方式1.1.下载ip2region.xdbGitHub项目地址:https://github.com/lionsoul2014/ip2region我们首先需要下载一个ip2region.xdb的文件下载地址:https://github.com/lionsoul2014/ip2region/blob/master/data/ip2region.xdb打开后点击如图的Download图标即可下载。下载完成后,需要将该文件放到我们的项目中。ps:我是直接放到服务器的,因为放在项目的资源文件夹下,当我们调试的时候使用JavaSpring自带的工具去获取该文件的绝对路径时,没有任何问题,能够正

  10. IP数据报格式 - 2

    1、报文格式前几篇总结过较多网络层的知识,ARP,ip地址、子网掩码等等。这次总结一下IP数据报的报文格式IP数据报的格式能够说明IP协议都具有什么功能。在TCP/IP的标准中,各种数据格式常常以32位(4字节)为单位来描述的。wireshark中IP数据报文呈现一个IP数据报文由首部和数据两部分组成。首部的前一部分是固定长度,共20字节。是所有IP数据报文必须具有的。在首部的固定部分的后面是一些可选字段,其长度可变。2、首部个字段意义  1、版本占4位,指IP协议的版本。通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。版本号为6(即IPv6)  2、首部

随机推荐