网络基础之网络层

在网络层中,有我们大名鼎鼎的IP协议,当然在网络层中,除了IP协议外还有很多其他的协议。比如ICMP协议,ARP协议,RARP协议等。我们会对这一层的这几个协议做简单的介绍,让我们了解他们都是干什么用的。

ICMP协议

ICMP是(Internet Control Message Protocol)网际控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

ICMP的包头只有8个字节,其中前四个字节是固定的,一个字是类型,一个字节是代码,两个字节是校验和。后4个字节根据ICMP包的类型而取不同的值。其中,在类型中如果type=8代表的是请求包,即发出的报文,如果type=0则代表返回包是我们访问的主机对我们的回应。


type


code


check sum


date

在我们ping的时候会发现一个参数ttl

ttl=生存时间,其实就是经过的路由器数量。每一个计算机都会有一个初始值,我们收到的别人的ttl可能和自己的不一样

我们可以使用一个命令查看我们和目的主机到底中间隔了几个路由器

traceroute 查看经过多少路由器

-d

tcpdump Linux的字符抓包工具

由于有些网络高手可以通过ICMP报文对计算机发起网络攻击,所以有一些公司会禁止ICMP的功能,让其他人在ping的时候收不到返回包,让人们误以为这个地址是不存在的,也就降低了主机的风险。其实,我们不仅可以关闭icmp,还可以伪造ttl,让别人查不到我们主机到底在哪里。

禁止ping

/proc/sys/net/ipv4/icmp_ignore_all 默认0

echo 1 > /proc/sys/net/ipv4/icmp_ignore_all

伪造ttl

echo 128 > /proc/sys/net/ipv4/ip_default_ttl

ping -f 发送大量的数据包

ping -f 172.17.251.97 -s 8000 –f

ARP协议

地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP、代理ARP。NDP用于在IPv6中代替地址解析协议。

由于ARP协议发送的是广播,所以它不能跨路由器,这一点很重要。

上图很好的说明了我们的ARP协议是如何工作的。如果我们想要给某一台主机发送数据,我们已经知道了它的IP地址,但是我们并不知道它的MAC地址,此时,我们需要先找出它的MAC地址才能真正的给它发送数据,这样就用到了我们的ARP协议。

首先,我们先发送ARP报文,在一个局域网内广播,如果找到了在此局域网内用于相应IP的主机,主机在收到报文后,会对相应的主机发送一个回应报文,告诉此机器它的MAC地址是什么,当源主机得到该MAC地址之后,会把它存在自己的ARP表中,将IP与相对应的MAC地址对应起来,等下一次需要找到这个诸主机时就不必再重新寻找。但是,ARP表示有限的,当表满了之后,如果有新的主机对应进来,就会把老的对应关系给顶替掉。只保留最常用的对用关系。

我们可以使用命令查看我们的ARP包

Windows:arp –a

Linux:ip neigh/arp –n

同样的,我们也可以向ARP表中删除和手动添加一个对应关系

删除命令:

    arp –d 137.23.76.23

添加命令:

    arp -s 192.168.1.123 d3.43.d4.a2.b7.dd

接下来我们以跨越两个路由的示例来说明,我们是如何使用ARP找到目的主机MAC以便于通信的。

A主机想要和B主机通信,主机A知道主机B的IP但是不知道主机B MAC,所以我们现在要获取的是主机B的MAC地址,但是ARP寻找主机MAC是通过广播的模式,这就意味着不能跨路由器,那么我们该如何实现呢?接下来我们进行讲解。

1.主机A知道路由的IP地址,因为离主机A配置有IP,所以是知道最近的路由的网关IP的。主机A先发一个广播找到最近路由的MAC:


165.23.231.11


IP (A)


00:0c:29:84:00:B4


00:00:00:00:00:00

2.主机A找到最近路由的MAC之后,开始向最近路由发送ARP广播:


165.23.231.11


172.22.127.32


00:0c:29:84:00:B4


MAC(A)

3.路由网关A点收到广播,看到IP不是找自己的,于是就在B口发送ARP广播,报文格式如下:


165.23.231.11


172.22.127.32


MAC(B)


MAC(C)

4.下一个路由在网关C处收到广播,路由器由于和主机B在一个网段,并且路由有记录功能,直接广播给主机B,格式如下:


165.23.231.11


172.22.127.32


MAC(D)


db:c0:13:66:f2:32

5.主机B看到ARP广播是找自己的,就把自己的MAC写入ARP,进行回复:


172.22.127.32


165.23.231.11


db:c0:13:66:f2:32


00:0c:29:84:00:B4

当主机A收到主机B的MAC的地址后就开始和主机B建立连接,传输数据,具体过程参考主机到主机的包传递

RARP反向地址转换协议

反向地址转换协议(RARP:Reverse Address Resolution Protocol) 反向地址转换协议(RARP)允许局域网的物理机器从网关服务器的 ARP 表或者缓存上请求其 IP 地址。网络管理员在局域网网关路由器里创建一个表以映射物理地址(MAC)和与其对应的 IP 地址。当设置一台新的机器时,其 RARP 客户机程序需要向路由器上的 RARP 服务器请求相应的 IP 地址。假设在路由表中已经设置了一个记录,RARP 服务器将会返回 IP 地址给机器,此机器就会存储起来以便日后使用。 RARP 可以使用于以太网、光纤分布式数据接口及令牌环 LAN

IP协议

版本:

占4位,指 IP 协议的版本目前的IP协议版本号为4

首部长度:

占4位,可表示的最大数值是15个单位,一个单位为4字节,因此IP 的首部长度的最大值是60字节

区分服务:

占8位,用来获得更好的服务,在旧标准中叫做服务类型,但实际上一直未被使用过.后改名为区分服务.只有在使用区分服务(DiffServ)时,这个字段才起作用.一般的情况下都不使用

总长度:

占16位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节.总长度必须不超过最大传送单元 MTU

标识:

占16位,它是一个计数器,通常,每发送一个报文,改值会加1, 也用于数据包分片,在同一个包的若干分片中,该值是相同的

标志(flag):

占3位,目前只有后两位有意义

DF: Don‘t Fragment,中间的一位,只有当 DF=0 时才允许分片

MF: More Fragment,最高位, MF=1表示后面还有分片。 MF=0表示最后一个分片

片偏移:

占12位,指较长的分组在分片后,该分片在原分组中的相对位置.片偏移以8个字节为偏移单位

生存时间:

占8位,记为TTL (Time To Live) 数据报在网络中可通过的路由器数的最大值,TTL 字段是由发送端初始设置一个 8 bit字段.推荐的初始值由分配数字 RFC 指定,当前值为64.发送 ICMP 回显应答时经常把 TTL 设为最大值 255

协议:

占8位,指出此数据报携带的数据使用何种协议以便目的主机的IP层将数据部分上交给哪个处理过程, 1表示为 ICMP协议, 2表示为 IGMP 协议, 6表示为 TCP 协议, 17表示为UDP 协议

首部检验和:

占16位,只检验数据报的首部不检验数据部分.这里不采用 CRC 检验码而采用简单的计算方法

源地址和目的地址:

都各占4字节,分别记录源地址和目的地址

有时候我们的IP数据报太长,为了保证数据能最大可能的到达目的主机,我们需要将IP数据报进行分片,因为片偏移是以8字节为单位的,所以我们在计算便宜量时需要除以8。

域协议

时间: 2024-10-18 00:49:31

网络基础之网络层的相关文章

网络基础笔记——OSI七层模型

OSI七层模型 由于整个网络连接的过程相当复杂,包括硬件.软件数据封包与应用程序的互相链接等等.如果想要写一支将联网全部功能都串连在一块的程序,那么当某个小环节出现问题时,整只程序都需要改写.所以我们将整个网络分成数层,每层都有自己独立的功能,而且每层的代码都可以独立撰写,因为相互之间不会干扰.如此一来,当某个小环节出现问题时,只要将该层的代码改写即可.并且这样可以让整个网络层次更加的清晰. 在网络上传输信息就像是一个发包裹的过程,从己方的应用程序开始往第七层的包裹里塞数据,再依次塞到第一层的包

【网络基础】ICMP报文和ping指令

ICMP报文: 作用: 为了更有效转发IP数据报和提高 IP 数据报交付成功的机会, 在网际层使用了网际控制报文协议 ICMP (Internet Control Message Protocol). 概念: ICMP 不是高层协议,而是 IP 层的协议.ICMP 报文作为 IP 层数据报的数据,加上数据报的首部,组成 IP 数据报发送. 格式: 种类(对应ICMP报文内的类型字段): ICMP 报文的种类有两种,即 ICMP 差错报告报文和 ICMP 询问报文. ICMP差错报告报文共有五种:

网络基础知识查询

第一章.基础网络概念 1.1 网络是个什么玩意儿 全世界的人种有很多,人类使用的语言种类也多的很.那如果你想要跟外国人沟通时,除了比手划脚之外,你要如何跟对方讲话? 大概只有两种方式啰,一种是强迫他学中文,一种则是我们学他的语言,这样才能沟通啊.在目前世界上的强势语言还是属于英语系国家, 所以啰,不管是啥人种,只要学好英文,那么大家都讲英文,彼此就能够沟通了.希望不久的未来,咱们的中文能够成为强势语言啊! 这个观念延伸到网络上面也是行的通的,全世界的操作系统多的很,不是只有 Windows/Li

网络基础知识、ASP.NET 核心知识(1)*

为什么要写网络? 我原本的计划是这样的,连续两天梳理ASP.NET开发的核心知识.说到这呢,有人问了.“不是说好了做ASP.NET笔记吗?为啥要写网络基础知识?是不是傻?” 原因是这样的.作为网站开发人员,你所开发的软件产品最终是要在网络上运行的.这就像一个生产商,要生产供给东北地区的产品,而生产商对东北的天气.地理.人文毫无了解.生产商的产品肯定是不可用的,或者低端的!产品质量不好,那是自然的.产品质量好,那算你点儿高.那么作为ASP.NET开发人员,如果一点不懂http协议.不晓得Ajax.

Python服务器开发二:Python网络基础

Python服务器开发二:Python网络基础 网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. HTTP是高层协议,而TCP/IP是个协议集,包过许多的子协议.包括:传输层的 FTP,UDP,TCP协议等,网络层的ip协议等,高层协议如HTTP,telnet协议等,HTTP是TCP/IP的一个子协议. socket是对TCP/IP协议的封装和应用(程序员层面上).也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如

网络基础---TCP/IP五层模型

网络基础---TCP/IP五层模型 计算机之间的通讯是通过互联网来进行的,各个计算机在internet上遵循它的一系列协议才能进行通讯,因此实际上可以把互联网本质看作是一系列的网络协议. 1.TCP/IP五层模型 (1)物理层功能:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0 (2)数据链路层的功能:建立逻辑连接.进行硬件地址寻址.差错校验等功能(由底层网络定义协议).并且将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正. 1)以广播的方式通

运维网络基础

对于系统运维人员,CCNA的学习难度不是很大,而且学习的周期较短,对于快速成为一个系统运维工程师中,网络搞的最好的,就足够了.如果时间精力有限,建议学习一下知识,作为步入网络知识的基石. 网络基础知识: n 涉及到网络的发展历程,网络的一些名词概念,路由,交换介绍 n OSI七层模型的介绍 n TCP/IP协议簇的简介,包含TCP/IP三次握手和四次挥手的过程 n VLSM可变长子网的概念 第1章 初识网络 网络的知识体系是一个庞大的体系,涉及到路由交换.安全.无线.语言.数据中心等多个方面,所

操作系统和网络基础的整理

操作系统 为何要有操作系统: 计算机系统非常庞大难懂,程序员写程序时需要搞懂计算机系统,效率很低. 操作系统的出现缓解了程序员的大部分工作,操作系统管理及优化计算机硬件,程序员不需要全部搞懂计算机系统就可写代码编写软件. 软件在操作系统的基础上运行,间接使用硬件. 操作系统的位置: 操作系统位于计算机硬件及应用程序之间,协调.管理和控制计算机硬件和软件系统的一个程序. 操作系统的功能: 操作系统协调.管理和控制计算机硬件和软件的一个软件. 操作系统的功能由操作系统运行内核态管理硬件和操作系统运行

鸟哥的私房菜的网络基础篇,好久没看了,重新看了一下子网划分简单很多

第二章.基础网络概念 目录 第二章.基础网络概念 1 2.1 网络是个什么玩意儿 2 2.1.1 什么是网络 2 2.1.2 计算机网络组成组件 5 2.1.3 计算机网络区域范围 6 2.1.4 计算机网络协议: OSI 七层协定 7 2.1.5 计算机网络协议: TCP/IP 11 2.2 TCP/IP 的链结层相关协议 12 2.2.1 广域网使用的设备 13 2.2.2 局域网络使用的设备-以太网络 14 2.2.3 以太网络的传输协议:CSMA/CD 16 2.2.4 MAC 的封装格