入门知识
讲讲我这个小菜鸟是如何从对网络一窍不通到现在可以完整的说出一个报文是如何转发的初级水平,先看一下TCP/IP的介绍:
Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。
如此深奥的解释,相信没几个人能看的懂。。。,其实你可以简单理解为,互联网传输是分层的,就像盖房子一样,一层累一层。
举个简单的例子,就拿我们平时最常见的上网,打开浏览器,输入www.baidu.com,浏览器上就会显示百度的界面,可能一秒都不到的时间,事实上我们的报文已经走了个来回。这么说还是有点抽象,但是要给大家讲的一点就是,在互联网的世界,一切的数据都是以报文的形式传送的,而这份报文,大致是长这样的:
你可能过会说,这是什么玩意,但事实上报文就是这么的不讲道理,如果你面对的是这样一个个十六进制的字符,恐怕会疯的,因为你根本无从下手,所以我们需要分层次清晰得划分一下报文的结构,划分的层次如下:
那为什么要叫TCP/IP协议栈内,这些协议和栈有什么关系呢,大家应该都知道栈是一种先进后出的数据结构,那这和TCP/IP协议有什么关系呢?我们就拿一个HTTP报文来说吧,HTTP报文属于应用层协议的报文,我们输入网址,首先会调用到DNS协议(域名协议,后面会讲到),然后把我们输入的网址转换为IP地址,这个IP地址大致就相当于现实生活中每个人的身份证一样,是每个网页唯一的标识,关于IP地址,后续我会详细介绍,IP协议属于网络层的协议。
我们先将HTTP报文压入一个栈中(就好像是在分装报文),然后是IP,不对,我们貌似漏了一个传输层啊,别急别介,HTTP报文在传输层用的是TCP协议,好,我们把TCP压入栈中,再讲IP层也压入栈中,至于链路层的话,就用最常见的以太网就OK了,好了,现在我们的栈里面从头至尾依次是以太帧头-IP协议-TCP协议-HTTP协议,然后我们先忽略最底层的物理层,假设这个封装好的栈一样的报文漂洋过海,来到了它的目的地(至于怎么过来的,我们后续也会讲到),当对端收到这个报文以后,也就是我们封装好的这个栈一样的东西以后该怎么办呢?
会不会也是先拿HTTP呢?因为这个报文是我们构造的一个栈,所以说它的顺序肯定也是栈,因此拿取的顺序就是以太帧头-IP协议-TCP协议-HTTP协议,发现没,最先被封装入的HTTP报文是最后才被拿出来的,这中间的细节如果能全部掌握,那基本商就算是入门了,关于这部分东西,我会在后面详细介绍,现在有这个概念就可以了。
回顾一下,写的有点乱,总结起来就是互联网是分层的,协议是如何层层递进封装和解分装的,记得大学里计算机网络是自顶向下,也就是先从应用层讲起,我觉得这样不太好,所以我会从底层讲起,也就是自底向上的学习顺序,一步步解开网络的神秘面纱!
IP地址
先简单回顾一下,TCP/IP协议栈:
数据链路层->网络层->传输层->应用层
如果为每一层加上一个ID,就像每个人都有身份证那样,那么可以这样标记:
数据链路层(MAC地址)
网络层(IPV4地址,以下简称IP地址)
传输层、应用层(端口)
这样的标签并不能完全概括这一层所有特征,但是如果掌握这些标示,就相当于是一把钥匙,可以让你快速打开这一层协议的“大门”。
和我们生活关系最密切的IP地址:
作为网络层的标识,IP地址这个概念可以说大家肯定都有耳闻,IP地址是一个32位的二进制数,32位是个什么概念呢?相当于是4个字节,学过C语言的同学应该知道,一个int型数据就是32位,那么IP地址的个数应该就是int的最大值4294967296,看上去很多是不是,有43亿呢,但是在互联网爆炸式发展的今天,这点IP地址还真的不够分,因此IPV6因运而生,这都是后话,以后有机会在介绍。
试想一下,某个IP地址是:11000000101010000000000100000001
是不是看着有点晕,没办法,我们看惯了10进制的1,2,3,10,99之类的,看这些二进制数真是觉得极不友好,让你去背这样一个IP地址,估计得好久,而且估计记住没多久就会忘了,因此我们队IP地址采取一种特殊的表示方式——点分十进制表示法,上面的二进制IP地址转换后是:192.168.1.1,是不是很眼熟,这是大家在设置无线路由器时进入设置界面的IP地址。
说完IP地址的表示方式,我们再说一下IP地址的分类,IP地址通常分为5类:
A类地址 (1.0.0.0—127.255.255.255)
B类地址 (128.0.0.0—191.255.255.255)
C类地址 (192.0.0.0—223.255.255.255)
D类地址 (224.0.0.0 - 239.255.255.255)
E类地址 (240.0.0.0 - 255.255.255.254)
每一类地址后面就是其范围,如果只是死记硬背,那样不太好,只有知道这些地址都是如何分类的,才能更好地记住。
IP地址可以简单看成是由网络号和主机号组成的,但具体多少位网络号,多少位主机号,不同类别的IP地址有不同的划分情况:
A类地址:8位网络号,24位主机号
B类地址:16位网络号,16位主机号
C类地址:24位网络号,8位主机号
网络号是由ICANN统一分配的,而主机号则由该网络端的系统管理员进行分配的,有时候为了更好地划分网络,还可以将主机号细化,分配成主机地址+子网地址的形式,也就是子网划分。
当我们知道每一类地址的组成之后,相应的其范围也就非常明确了,就以网络号分配来看,A类地址要占到8位,因此其IP地址的首位肯定是0,这样它就吧00000000 – 01111111 (0 – 127)之间所有的网络号都占满,好了,A占满以后该B类地址了,B类地址虽然是16位的,但是你不能去抢A类地址的网络号是不,因此它的网络号的范围就是128-191,可以发现B类地址的前两位固定都是10,依次类推,C类地址的前三位就是110,所以其范围就是192-223.
IP地址的划分大致就是这样,作为网络层最重要的线索,我们会在之后的讲解中一步步介绍IP地址以及它所指向的网络层!
路由器简介
网络层转发最为重要的设备-路由器,讲到路由器,大家可能并不陌生,每家每户现在应该都有路由器,你可能以为我会介绍像这样的路由器:
image
这种无线路由器,每家每户现在应该都有,毕竟有了它,才能有无线网用是不~,但事实上我要介绍的不是这种路由器,而是下面这种大家可能没见过,但对我们上网来说更为重要的路由器:
image
大家一定觉得很陌生,毕竟TP-LINK已经深入人心,而这些长得像冰箱或者箱子的东西也能和路由器挂上钩?实际上如果没有这些路由器,咱们也就没办法愉快地上网了,举个简单的例子,普通的无线路由器,能够承载的流量峰值大概是300M,而图片上这些大型路由器,每一个端口,最小的承载能力也能达到10G,而一台大型的路由器,像这样的端口没有数千,也有上百,所以说这样的设备显然不是为某个家庭服务的,甚至一个小区也不在话下,它可以承载的业务,至少是一个城市,甚至整个省,甚至一个小型的国家,也只需要几十台这样的设备,就可以满足大家的上网需求,因此这样的设备一般都是为运营商提供的,比如说电信,移动,联通之类。
之所以要介绍这样的大型路由器,只是为了让大家有这么一个概念,大致了解一下,因为后面涉及到的路由器,都是这样的路由器,大家只需要知道运营商用的是这样的大型路由器就OK了。
好了,言归正传,我们先看一下路由器的主要功能是什么:
路由器的主要功能是路由选择和报文转发,这种功能的实现需用到路由协议。
路由协议是路由器之间维护路由表的规则,用于发���路由,并生成相应的路由表,同时知道报文的转发。路由协议决定路由表中存放那些路由信息。
简单点说,路由器的功能就是两点:路由,转发。其中路由就是说经过路由器的报文,决定它的去向,当然仅仅知道报文去哪儿是不行的,路由器还需要将报文发送到相应的位置,这样才算完成一次报文的转发,通俗点说就是,路由器对收到的报文,会做两件事,其中一件是根据路由表(后面会介绍到,是路由转发最重要的表项),决定它的去处,紧接着第二件事就是将报文转发过去。
后面我们会陆续介绍网络层究竟是如何转发报文的,而这一节对路由器的介绍,算是一种铺垫,写得也比较简单,大家只需要知道,路由器要做路由和转发这两件事就OK了。
IP协议解析
通过之前的网络层基础知识,IP地址以及路由器的简介,大家应该对于TCP/IP有一个大致的了解,在脑海里应该对于网络的几个基础概念有个大概的了解,简单点说整个协议栈就是在做一件事,规定网络报文(网络传输中的数据报)的发送和接收,而整个协议栈内的协议,也是可以分为之前介绍过的链路层-》网络层-》传输层-》应用层,在这每一层中都有很多不同的协议,但是最常用的协议,每一层就是一到两种,所以想学协议,先从每一层最常见,最常用的开始学起:
- 链路层——以太网、VLAN
- 网络层——IP协议
- 传输层——TCP/UDP协议
- 应用层——HTTP协议
上面的几种协议,如果都能熟练掌握,那基本上就是入门并且偏上的水平了,所以接下来我们就逐一介绍各个协议。
上面就是IP报文的模板,其中IP首部一般为20字节,也就是图中的第1行到第5行,第6行为可选字段,后续的就是报文所携带的数据。我们重点介绍IP首部,可以看到,每一行是4个字节,也就是32位,而对于每一行我们又根据位数分为不同的字段,先来看看每个字段具体的含义:
第一段:
- 4位版本号:取值为4时代表IPV4协议,取值为6时代表IPV6协议
- 4位首部长度:单位是4字节,一般取值为5
- 8位ToS字段:这个字段比较特殊,它相当于是报文的优先级或者是报文的服务类型,用来区分报文的业务类型,对于设备做QoS有着重大的意义。
- 16位总长度:代表这一个IP报文总的长度,后面我们会介绍一个MTU时会介绍该字段。
第二段:
- 16位标示符:用来唯一标记这一份IP报文
第三段:
- 8位生存周期TTL字段:报文的生存周期,报文每经过一次转发,该字段值减1,当减为0时,丢弃该报文。
- 8位协议:代表着这份IP报文承载着何种上层传输协议或者网络协议,常见的取值与对应关系如下:
- ICMP协议
- IGMP协议
- TCP协议
- UDP协议
- IGRP协议
- 16位首部校验和:用于检验收到的报文是否有差错。
第四段:
- 32位源IP地址:发送方IP地址
第五段:
- 32位目的IP地址:接收方IP地址
介绍完IP报文的格式以后,我们再来说一下IP报文的特点,其主要特点有以下几点:
- IP报文具有不可靠性,即不能发送方发送报文后,不保证接收方一定能收到该报文。
- IP报文的不保序性,既然IP报文是不靠靠的,那相应的,它也不保证发送出的报文的顺序性,也许发包顺序是1、2、3,但是收包顺序可能就是3、2、1
- IP报文的分片,若发送报文数据过大,则涉及到报文分片。
综上所述,我们对IP协议有一个大致的了解。
本文永久更新链接地址:https://www.linuxidc.com/Linux/2019-01/156508.htm