往期推荐
数据包的传输主要经过应用层、传输层、网络层、链路层。承接应用层HTTP、传输层TCP讲解,应用层数据被传输层包裹后接下来就需要被网络层包裹了,网络层的核心任务就是实现主机与主机之间的通信。讲解IP层之前需铺垫众多基础知识。
现实生活人能找到人是因为知道彼此的详细地址,在网络中要通讯就要知道对方的 IP 地址,IPv4 是由32位二进制数据来表示的,每4位算一组并换算成10进制数据,组与组之间通过 .
分割。
IPv4
为了便于寻址和层次化的构造网络,IP地址被分为A、B、C、D、E 五类。
IP分类
A、B、C三类 IP 中是有 网络号 跟 主机号共同组成的,我们常说的 IP地址 = 网络地址 + 主机地址
。A、B、C三类 IP 都有若干位固定值表示不同类型,并且网络号全为 0 的情况下网络不可用
,网络地址的主机位全部变成1被提前标记为是广播地址
,全部被标记为0表示是主机地址
,即是这个网络中的所有主机的地址。
广播地址
主机地址
在一个网络段中主机号全为 0 代表这个网络段本身,称之为网络号 。这个地址是不可以分配给主机的。
多播
多播
用于将包发送给特定组内的所有主机。单播
,主机之间一对所”的通讯模式叫广播
,主机之间一对一组的通讯模式叫多播
。Subnet Mask 又叫网络掩码、地址掩码,子网掩码只有一个作用,就是将某个IP地址划分成网络地址
和主机地址
。
用子网掩码可以得到网络地址跟主机地址。
反
。反
后的子网掩码与ip地址做与
运算,将答案化为十进制便得到主机地址。子网掩码一般分为两类,第一类是系统自带的:
第二类就是自定义子网掩码,将一个网络划分为几个子网,需要每一段使用不同的网络号或子网号,实际上我们可以认为是将主机号分为两个部分:子网号、子网主机号。形式如下:
未做子网划分的ip地址:网络号+主机号 做子网划分后的ip地址:网络号+子网号+子网主机号
也就是说ip地址在化分子网后,以前的主机号位置的一部分给了子网号,余下的是子网主机号。
IP分类划分的优点:
IP分类划分的缺点:
既然IP分类会导致有这么多不便,人们后面提出了无分类地址的方案,该方案会将32 比特的 IP 地址划分为两部分,前面是网络号,后面是主机号。
比如 10.100.34.33/24,这种地址表示形式就是 CIDR,/24 表示前 24 位是网络号,剩余的 8 位是主机号。此时具有如下信息:
内网跟外网
私网IP:一般是在局域网内使用,不同局域网可能有相同的私网IP地址。在电脑想访问外网上网时,必须使用公网,私网是不被允许的。 公网IP:公网IP世界只有一个,访问互联网需要公网IP作为身份的标识,公网 IP 是由 Inter NIC因特网信息中心负责。这些 IP 地址分配给注册并向Inter NIC提出申请的组织机构。通过它直接访问因特网。
经过TCP处理数据后,接下来就会通过主机的路由表或路由器的路由表来确定 IP 数据包下一跳到哪儿。这里需注意,数据传输的最底层是链路层,链路层是根据MAC
地址传输的,所以问题变成了如何通过目标IP获得下一跳的MAC
地址。
Address Resolution Protocol 协议是地址解析协议,ARP是通过解析IP地址得到 MAC 地址,ARP协议的主要工作就是建立、查询、更新、删除ARP表项。
ARP 协议引入了 ARP 缓存表的概念,每台主机或路由器在维护着一个ARP缓存表,这个表包含IP地址到MAC地址的映射关系,表中记录了对,称之为ARP表项,ARP表项里的数据一般都是含有TTL属性的,默认10分钟。可通过arp -a
查看服务器ARP缓存表信息。
ARP 的工作流程:
跳一跳
的方式最终把数据发送到目标机器。RARP
的功能正好跟ARP相反,它是已知 MAC 地址求 IP 地址。比如打印机等小设备会通过MAC 获得IP地址,RARP的工作流程大致如下:
ARP要找MAC,而MAC是在网卡上的。Network Interface Card
网卡工作在链路层组件,是局域网中连接计算机和传输介质的接口,网线插到网卡上,网卡插在电脑的主板上。起到连接你上网的作用。
网卡上的重要组成单元MAC, Media Access Control 地址是6字节数据烧录在网卡上的,MAC地址跟人的身份证号一样具有全球唯一性。网卡上面还装有处理器和存储器,包括RAM和ROM,网卡具有如下作用:
IP层拿到MAC地址后,接下来需要网卡将数字信号转换为电信号
,网卡一般通过网卡驱动程序工作。这里大致说下网卡工作流程:
物理层数据帧
数据传输真实流程
有人可能问既然MAC有唯一性,为什么不直接用MAC要用IP呢?Mac地址种类繁多,海量分布。IP地址就像是门牌号,Mac地址就像身份证号。如果只知道身份证号就只能在全世界查找,如果知道 IP地址,那就跟知道了这个人在世界上详细地址一样,逐层追踪即可,查找起来会快很多。
IP层屏蔽了下层很复杂的细节,让用户在抽象的网络层上讨论问题,让用户使用统一的、抽象的 IP 地址研究主机和主机或主机和路由器之间的通信。通俗一点来说就是有了IP地址,就只通过路由器找到目的主机,屏蔽了下层网络的异构型,由MAC地址完成下层的实际转发。
网关作用 网关
调制解调器
猫
,它的作用是将电脑想要发送的信息数字信号转换成网线中的电流脉冲模拟信号从而使信息在网线中传输。一般在早期通过电话线上完时候需要用到猫, 最大速度一般不超过56kps,现在几乎很少使用了。调制调解器
数据经过网卡操作到达交换机Switch,交换机工作在 MAC 层,也被为二层网络设备。
MAC
如果查找MAC地址表发现找不到所需信息,此时交换机会以广播
的形式把包转发到除源端口外的所有端口上,然后目标端口会自动接收数据,非目标自动屏蔽垃圾数据。这里需注意有个特殊的MAC跟IP地址属于广播地址。以下两个属于广播地址:
集线器 hub:
数据经过交换机如果发现要访问的IP不在局域网内就要找路由器了,路由器 Router 一般特指能够实现路由寻找和转发的特定类产品,路由器很显然能够实现网关的功能。一般说来,路由器作为不同网络之间互相连接的枢纽,路由器系统构成了基于TCP/IP 的国际互联网络Internet 的主体脉络,也可以说,路由器构成了Internet的骨架。
路由器根据接收到数据包中的网络层地址以及路由器内部维护的路由表决定输出端口以及下一跳地址,并且重写链路层数据包头实现转发数据包,路由器一般提供如下功能:
路由器做了2个普通交换机做不了的事:
路由器是基于IP设计的,俗称三层网络设备,路由器的每个端口都有MAC地址跟IP地址,路由器会检查数据帧目标地址字段中的数据链路标识。如果它包含了路由器接口标识符或广播标识符,那么路由器将从帧中剥离出数据包并传递给网络层。
当路由器收到电信号后也会转化为数字信号然后进行FCS校验,如果发现发送方的MAC地址是给自己的则接受该帧,否则丢失该帧。
根据目标IP及Routing Table 路由表
决定信息如何转发。路由表中保存着子网的标志信息、网上路由器的个数和下一个路由器的名字等内容。路径表可以是由系统管理员固定设置好的,也可以由系统动态修改,可以由路由器自动调整,也可以由主机控制。Linux服务器一般用 route -n 查询系统当前路由表。
路由规则
最后一行Destination和Netmask都是 0.0.0.0,表示是默认网关,如果其他所有条目都无法匹配,就会自动匹配这一行。并且后续就把包发给Gateway。
Dynamic Host Configuration Protocol 动态主机配置协议是一个局域网的网络协议,这是一个应用层协议。当我们将客户主机ip地址设置为动态获取方式时,DHCP服务器就会根据DHCP协议给客户端分配IP,不用用户自己去设置 IP地址 跟 子网掩码,然后客户机能够利用这个IP上网。
UDP获取IP流程 简单说下DHCP交互流程:
UDP
广播的形式发送 DHCP Discover包。DHCP中继代理
,对不同网段的IP地址分配也可以由一个 DHCP 服务器统一进行管理。DHCP 通常被应用在大型的局域网络环境中,主要作用是集中的管理、分配IP地址,使网络环境中的主机动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。
NAT
私网IP的服务器想要上网的时候需要转换成公网IP才能跟外界通讯,而 Network Address Translation
网络地址转换 就是负责干这事的。但需注意 NAT只是实现了IP转换,所以还是没有解决IPv4扩容的问题。NAPT 可以实现 IP 地址 + 端口一起进行转换。这就可以实现不同电脑公用一个公网IP,这种转换技术叫 网络地址与端口转换 。
这个转换用到的是 NAPT 路由器的转换表,现在路由器上一般会自动生成跟维护这个表。
缺点:
解决方法:
Internet Control Message Protocol
互联网控制报文协议 。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。日常你 ping 网络通不通底层基础就是ICMP。
ICMP提供一致易懂的出错报告信息。发送的出错报文返回到发送原数据的设备,发送设备随后可根据ICMP报文确定发生错误的类型,并确定如何才能更好地重发失败的数据包。但是ICMP唯一的功能是报告问题而不是纠正错误,纠正错误的任务由发送方完成。
ICMP ICMP 一般分为两类:
IPv4 中 ICMP 仅作为一个辅助作用支持 IPv4。也就是说,在 IPv4 时期,即使没有 ICMP,仍然可以实现 IP 通信。然而,在 IPv6 中,ICMP 的作用被扩大,如果没有 ICMPv6,IPv6 就无法进行正常通信。
其实经过上面IP层跟链路层必备知识的讲解,大家再看数据从TCP到IP层就简单多了,这里我们以IPv4大致说下网络层核心IP头
字段的含义。
IP头部
IPv4 的地址是 32 位的,大约可以提供 42 亿个地址,但是在 2011 年 IPv4 地址就已经被分配完了。于是又提出了IPv6, IPv6 的地址是 128 位, IPv6 相比于 IPv4 能带来更好的网络体验。
IPv6地址长度是128位,每16位算一组,组跟组之间用 :
分割,如果出现连续的 0 时还可以将这些 0 省略,并用两个冒号 ::
隔开。但是一个 IP 地址中只允许出现一次两个连续的冒号。
IPv6首部
IPv6改进:
按理来说IPv6那么牛应该马上投入使用替换IPv4,但是因为 IPv4 和 IPv6 不能相互兼容,所以不但要我们电脑、手机之类的设备支持,还需要网络运营商对现有的设备进行升级,所以目前 IPv6 普及率比较慢。
其实上面已经讲解到很多关于链路层的设备了,比如网卡、路由器等等。
MAC层
链路层主要解决的就是当出现并发的时候,如何解决先后顺序跟 数据混乱问题。
著名的以太网
用的就是这个方式。这个包是发给谁的?谁应该接收?发送时出错咋办?这里的解决办法是用一个物理地址,叫作链路层地址,也常被称作 MAC 地址。
MAC层简图
数据链路层最基本的服务是将源计算机网络层来的数据可靠的传输到相邻节点的目标计算机的网络层,为达到这一目的,数据链路层必须具备一系列相应的功能:
上述这些功能具体表现在以下几个方面。
为向网络层提供服务,数据链路层必须使用物理层提供的服务。而物理层是以比特流进行传输的,这时数据链路层为了能实现数据有效的差错控制,就采用了一种帧
的数据块进行传输。在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。
帧首跟帧尾将数据封装成帧
采用帧传输方式的好处是在发现有数据传送错误时,只需将有差错的帧再次传送,而不需要将全部数据的比特流进行重传,这就在传送效率上将大大提高。
帧同步需解决问题
帧同步
技术来识别了。帧同步技术既可使接收方能从以上并不是完全有序的比特流中准确地区分出每一帧的开始和结束,同时还可识别重传帧。由于帧的开始和结束的标记是使用专门指明的控制字符,因此传输的数据中的任何8比特的组合一定不允许和用作帧定界的控制字符的比特编码一样,否则就会出现帧定界的错误。
当传送的帧使用从键盘上输入文本文件组成的帧时,其数据部分显然不会出现像SOH或EOT这样的帧定界控制字符。可见不管从键盘上输入什么字符都可以放在这样的帧中传输过去,因此这样的传输就是透明传输。
非透明传输 问题是如果你传输的不是从键盘输入的,是二进制代码的计算机程序或图像,如果是中间存在EOT则会导致错误。解决办法就是在数据部分如果碰到了EOT或SOH 就添加个ESC转移字符。
填充ESC后帧
底层数据传输时候出现差错,主要分为两大类:
数据传输过程中的衡量指标就是误码率Bit Error Rate:就是在一段时间内,传输错误的比特占所传输比特总数的比率。
实际的通信链路并非理想的,它不可能使误码率下降到零。所以为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种检测措施,目前在数据链路层广泛使用了循环冗余检验CRC(Cyclic Redundancy Check)的检测技术。
HTTP讲解+ TCP讲解 + 本文IP讲解 + 链路层讲解 = 一个数据包的流浪日记,如果纯技术性文章感觉太枯燥,接下来我们以一个不太严谨的生活举例,将知识点串联下:
小S
你叫小S,跟很多小伙伴住在一个小区里,当你想跟小伙伴玩耍的时候就喊一喊(集线器),大家都听到后,想玩的下来陪你玩。不想跟你玩的人感觉听到噪音很烦躁,就让李大爷在传达室充当交换机,你想跟院子里人玩的时候,跟交换机李大爷说下,李大爷会告知你要找的小伙伴信息。
找人通讯 后来你被限足了,不允许出小区大门。此时你想跟外界小C交流,你把信息发给李大爷,李大爷看到想跟外面通讯。就让你按照外面统一通信的方式(TCP/IP)把信息写好,你发现信封收件地址写的小W收,这地址放到外面没法派送啊!你找小L问下真实地址,小L拿出了姓名-地址映射薄(DNS)查询后告诉了你小C真实地址,然后李大爷叫来了专门负责这个小区快递的快递员(路由器),这里需注意小区对外只暴露一个公共的地址(公网IP),但是小区不能只有一个人啊!小区里面被分成了N个房间(私网IP),因为小区里N个住户可能会调换房间,所以每当想对外通讯的时候,快递员路由器会给你动态的分配个内网IP,并且快递员牛逼之处在于即使两个住户用相同的方式(端口)把信息发出去快递员也会自动给你重新分配不一样的端口,这叫NAT技术。
快递员路由器把你的信息通过顺丰/韵达(猫)方式把信息由数字信号变为脉冲信号再发出去,信息不是直达小C小区的哦!就跟你的深圳快递发送到北京可能经过多个中转,虽然你的发件人收件人地址固定死了,但中间可能经过各种路由各种中转,这里其实就用到了ARP包跟根据MAC地址转发,提供路由功能是因为快递员有个小本(路由表)记录着下一站地址, 反正最终信息会到达小C小区的传达室,传达室王大爷在镇守,王大爷会按照相同的方法把信息最终发到小C手里。
派件快递
你还有个朋友小A,他住的小区由孙大爷看门,因为小A的院子刚盖好,孙大爷刚来不久,孙大爷没有李大爷跟王大爷办公室的电话,李大爷跟王大爷也没有孙大爷的的电话,这时会有两种情况:
有天小S要找小A,小S给李大爷说需求,孙大爷通过通讯录(路由表)查询到小A院子孙大爷管着呢,此时目标是找孙大爷,不过有两种途径
李大爷选择 1 还是 2 这叫做路由选择。李大爷当然选择 1 了,因为他遵循最少步骤原则。
相互联系
前几天小S和小C吵架了,恰好这些天小S老是给小A打电话,小C心想小S是不是在说我人品不行啊,于是小C决定偷听小S和小A的通话,但是他又不能出院子,怎么办呢?小C做了这样一个决定:首先小C告诉王大爷说 “你给李大爷打电话说小A搬到咱们院子了,以后凡是打给他的电话我来接”,王大爷迷迷糊糊就给李大爷打了电话,说:“现在我来管理小A,孙大爷不管了”,结果李大爷就把他的通讯录改了,这叫做路由欺骗
。
以后小S再找小A,李大爷就转给王大爷了,王大爷收到了这个信息就转给了小C,小C收到这个信息就假装小A和小S通信。因为小C作贼心虚,害怕明天小S和小A见面后当面问他,小C又自己以小S的名义给小A通了个复述了一遍刚才通讯信息,有这就叫数据窃听
。
再后来,小S还是不断的和小A联系,小C心里嘀咕 “你小S不是不给我打电话吗!那我让你也给小A打不了!
终于有一天,孙大爷忍不住了,大喊一声:“我受不了拉!!!!”,于是上吊自杀了!
这就是最简单的DDOS攻击,孙大爷心理承受能力弱的现象叫做数据报处理模块有BUG
,孙大爷的自杀叫做路由器瘫痪
。
如果孙大爷身体健壮可以应付这些垃圾信息,这叫健壮的数据报处理,能够抵御任何攻击。孙大爷瘫了之后,小S终于不再给小A打电话了,因为无论他无论如何发信息,对方都是拒绝服务,所以小C的做法还有一个名字叫做拒绝服务攻击
。
新人小B入住 几天后,小C的院子来了一个美丽的女孩,名字叫做小B,小C很喜欢她,可是小B有个很帅的男朋友,小C干瞪眼没办法。同时小B是不能出院子的。那个男的想追小B自然只能发信息,于是小C又蠢蠢欲动了。小C了解到王大爷之所以能管理电话是因为他有一个通讯录,因为同一个院子可能有2个孩子都叫小C,靠名字无法区分,所以通讯录上每一行只有两项:
门牌(MAC)电话(IP)
一号门 1234567 (一号门里面是小C)
二号门 7654321 (二号门里面是小B)
每次发信息人家都要说出要找的电话号码(IP),然后通过通讯录去院子里面敲门,比如人家说我找1234567,王大爷就去敲一号门收信息,如果是找7654321,那他就找二号门收信息。这里的电话号码就是传说中的IP地址
。这里的门牌号就是传说中的网卡的MAC
地址,每一块网卡的 MAC
地址都是不一样的,这是网卡的制造商写死在网卡的芯片中的。
小C为了泡妞打起了王大爷通讯录的主意,小C趁王大爷去上厕所时,偷偷的摸进传达室,小心翼翼的改了王大爷的通讯录。过了几天,小B的男朋友又给小B来了信息,对方报的是 7654321,王大爷一看通讯录:
门牌(MAC)电话(IP)
一号门 1234567 (一号门里面是小C)
一号门 7654321 (被修改成映射到一号门)
王大爷不知道改了啊,于是就去找一号门的小C了,小C以小B父亲的口吻严厉的教训了那个男的和小B之间不正当的男女关系,并责令小B男朋友立马跟小B分手。这里小C的行为叫做ARP欺骗
,因为在实际的网络上是通过发送ARP
数据包来实现的,所以叫做ARP欺骗。
这里要注意,王大爷现在有两个通讯录了,一个是记录每个院子传达室电话的本本,叫做路由表
,一个是现在说的记录院子里面详细信息的本本,叫做ARP表
,王大爷为了保证安全可以把表藏起来,这就对应程序加密解密。
王大爷的员工手册中有一条是这么写的每个月要重新检查一下门牌号和电话的对应本,也就是ARP表
,这个动作叫做刷新ARP表,每个月的时间限制叫做刷新ARP表的周期。这样小C为了让那个男的永远不能找到小B,之后每个月都要偷偷改一次那个通讯录,不过这样也是不得不做的事啊!
补充一点,小C是很聪明的,如果通讯录(ARP表)被改成了这样:
门牌(MAC)电话(IP)
一号门 1234567 (这个是小C的)
二号门 1234567 (注意:这个被小C改了,但是他一时头晕改错了)
计算机就会弹出一个对话框提示出现重复的IP地址
,最终会导致王大爷不知所措,于是通知一号门和二号门,你们的电话重复了。这样小B就知道有人在破坏她的好事,这个现象叫做骗局被揭穿了。
当然小S为了防止自己通话被人窃听,也可以对通话内容进行加密,这部分细节在 HTTP 中讲到了。