20TCP IP 网络协议基础入门--IP网际协议

IP网际协议

IP 数据报:IP 协议位于网络层,它是 TCP/IP 协议族中最为核心的协议,所有的 TCP、UDP、ICMP 及 IGMP 数据都以 IP 数据报格式传输。IP 协议提供的是不可靠、无连接的数据报传送服务。

IP 数据报

我们已经知道了 IP 协议提供的数据传送服务是不可靠和无连接的,具体表现如下:
不可靠(unreliable):IP 协议不能保证数据报能成功地到达目的地,它仅提供传输服务。当发生某种错误时,IP 协议会丢弃该数据报。传输的可靠性全由上层协议来提供。
无连接(connectionless):IP 协议对每个数据报的处理是相互独立的。这也说明,IP 数据报可以不按发送顺序接收。如果发送方向接收方发送了两个连续的数据报(先是 A,然后是 B),每个数据报可以选择不同的路线,因此 B 可能在 A 到达之前先到达。

我们先看一下 IP 数据报的格式,其中没有一个字段是多余的,学习 IP 协议就应从学习它的报文字段意义和作用开始。


image.png

如上图所示,普通的 IP 数据报的报头长度 20 字节(除非有选项字段),各个部分的作用:
版本号:4 位,用于标明 IP 版本号,0100 表示 IPv4,0110 表示 IPv6。目前常见的是 IPv4。
首部长度:4 位,表示 IP 报头长度,包括选项字段。
服务类型(TOS):分别有:最小时延、最大吞吐量、最高可靠性、最小花费 4 种服务,如下图所示。4 个标识位只能有一个被置为 1。
总长度:16 位,报头长度加上数据部分长度,便是数据报的总长度。IP 数据报最长可达 65535 字节。
标识:16 位,接收方根据分片中的标识字段相不相同来判断这些分片是不是同一个数据报的分片,从而进行分片的重组。通常每发送一份报文它的值就会加 1。
标志:3 位,用于标识数据报是否分片。其中的第 2 位是不分段(DF)位。当 DF 位被设置为 1 时,则不对数据报进行分段处理;第 3 位是分段(MF)位,除了最后一个分段的 MF 位被设置为 0 外,其他的分段的 MF 位均设置为 1。
偏移:13 位,在接收方进行数据报重组时用来标识分片的顺序。
生存时间(TTL):8 位,用于设置数据报可以经过的最多的路由器个数。TTL 的初始值由源主机设置(通常为 32 或 64),每经过一个处理它的路由器,TTL 值减 1。如果一个数据报的 TTL 值被减至 0,它将被丢弃。
协议:8 位,用来标识是哪个协议向 IP 传送数据。ICMP 为 1,IGMP 为 2,TCP 为 6,UDP 为 17,GRE 为 47,ESP 为 50。
首部校验和:根据 IP 首部计算的校验和码。
源 IP 和目的 IP :数据报头还会包含该数据报的发送方 IP 和接收方 IP。
选项:是数据报中的一个可变长、可选的信息,不常用,多用于安全、军事等领域。

了解了上面的理论知识过后,我们可以使用 tcpdump 这个抓包工具来实际看一下。

sudo tcpdump -ntx -c 1

-n :显示 IP 地址而非域名地址
-t :不显示时间戳
-x :以十六进制显示包内内容
-c :tcpdump 将在接受到几个数据包后退出


image.png

首先看到开头的 192.168.42.3.3001 > 172.16.2.250.44632 代表的是源 ip 为 192.168.42.3,端口 3001,目的 ip 为 172.16.2.250,端口 44632。

然后看到 0x0000 那行:
协议版本: 0x4 表示的是协议版本为 IPv4;
首部长度: 0x5,5*4=20,表示 IP 报头长度为 20 字节。一个字节通常等于 8 位,所以这里可以知道 IP 报头为 4500 到 2a02;
TOS 服务类型:0x00,意味着是一般服务;
总长度:0x0136,换算下来为 310 字节;
标识:0x172a;
3bit 标志 + 13bit 片偏移:0x4000;
生存时间:0x40,值为 64;
协议:0x06,代表 TCP 协议;
首部校验和:0x88e2。

IP 地址分类

为了便于寻址以及层次化构造网络,每个 IP 地址可被看作是分为两部分,即网络号和主机号。同一个区域的所有主机有相同的网络号(即 IP 地址的前半部分相同),区域内的每个主机(包括路由器)都有一个主机号与其对应。

IP 地址被分为 A、B、C、D、E 五类:
A 类给大型网络或政府机构等;
B 类分配给中型网络、跨国企业等;
C 类分配给小型网络;
D 类用于多播;
E 类用于实验。

各类可容纳的地址数目不同,其中我们最常见的为 A、B、C 这三类。
IP 地址用 32 位二进制数字表示的时候,A、B、C 类 IP 的网络号长度分别为 8 位、16 位、24 位:


image.png

A 类地址:
A 类地址网络号范围:1.0.0.0---127.0.0.0;
A 类 IP 地址范围:1.0.0.0---127.255.255.255;
A 类 IP 的私有地址范围:10.0.0.0---10.255.255.255 (所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址);
127.X.X.X 是保留地址,用做循环测试用的;
因为主机号有 24 位,所以一个 A 类网络号可以容纳 2^24-2=16777214 个主机号。

B 类地址:
B 类地址网络号范围:128.0.0.0---191.255.0.0;
B 类 IP 地址范围:128.0.0.0---191.255.255.255;
B 类 IP 的私有地址范围:172.16.0.0---172.31.255.255;
169.254.X.X 是保留地址;191.255.255.255 是广播地址;
因为主机号有 16 位,所以一个 B 类网络号可以容纳 2^16-2=65534 个主机号。

C 类地址:
C 类地址网络号范围:192.0.0.0---223.255.255.0;
C 类 IP 地址范围:192.0.0.0---223.255.255.255;
C 类 IP 的私有地址范围:192.168.0.0---192.168.255.255;
因为主机号有 8 位,所以一个 C 类网络号可以容纳 2^8-2=254 个主机号。

下面使用 ifconfig 命令来查看本机 ip:


image.png

思考:这是一个几类 ip 地址?
C 类

子网划分

IP 地址如果只使用 ABCDE 类来划分,会造成大量的浪费:一个有 500 台主机的网络,无法使用 C 类地址。但如果使用一个 B 类地址,6 万多个主机地址只有 500 个被使用,造成 IP 地址的大量浪费。
因此,可以在 ABC 类网络的基础上,进一步划分子网:占用主机号的前几个位,用于表示子网号。
这样 IP 地址就可看作 IP = 网络号 + 子网号 + 主机号。
子网号的位数没有硬性规定,于是我们用子网掩码来确定一个 IP 地址中哪几位是主机号,具体使用方法如图:


image.png

子网掩码中的 1 标识了 IP 地址中相应的网络号和子网号,0 标识了主机号。将 IP 地址和子网掩码进行逻辑与运算,结果就能区分网络号和子网号。
使用 ifconfig 命令也可以查看到子网掩码:


image.png

思考:根据上面所学知识表示出您本机的网络号,子网号,主机号。

IP 路由选择

如果发送方与接收方直接相连(点对点)或都在一个共享网络上(以太网),那么 IP 数据报就能直接送达。
而大多数情况则是发送方与接收方通过若干个路由器(router)连接,那么数据报就需要经过若干个路由器的转发才能送达,它是怎么选择一个合适的路径来"送货"的呢?

IP 层在内存中有一个路由表(输入命令 route -n 可以查看路由表),当收到一份数据报并进行发送时,都要对该表进行搜索:
搜索路由表,如果能找到和目的 IP 地址完全一致的主机,则将 IP 数据报发向该主机;
搜索路由表,如果匹配主机失败,则匹配同子网的路由器(这需要子网掩码的协助)。如果找到路由器,则将该 IP 数据报发向该路由器;
搜索路由表,如果匹配同子网路由器失败,则匹配同网络号路由器,如果找到路由器,则将该 IP 数据报发向该路由器;
如果以上都失败了,就搜索默认路由,如果默认路由存在,则发报;
如果都失败了,就丢掉这个包;
接收到数据报的路由器再按照它自己的路由表继续转发,直到数据报被转发到目的主机;
如果在转发过程中,IP 数据报的 TTL(生命周期)已经被减为 0,则该 IP 数据报就被抛弃。

实验环境中可以使用 route -n 查看路由表:


image.png

另外我们可以使用 traceroute 来追踪路由过程。首先需要安装一下:

sudo apt-get update
sudo apt-get install -y traceroute

接下来使用 traceroute 追踪本机到 www.shiyanlou.com 的路由:

image.png

记录按序列号从 1 开始,每个记录就是一跳,每跳表示一个网关,我们看到每行有三个时间,单位是 ms,这是探测数据包向每个网关发送三个数据包后,网关响应后返回的时间。用这三个时间来表示到达这个结点的网络速度。
我们会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了 ICMP 的返回信息,所以我们得不到什么相关的数据包返回数据。

还有一些其他选项,比如:
设置跳数为 8

traceroute -m 8 www.shiyanlou.com
image.png

探测包个数设为 4

traceroute -q 4 www.shiyanlou.com
image.png

显示 IP 地址,不查主机名

traceroute -n www.shiyanlou.com
image.png

NAT 技术

当你用 ifconfig 查看 IP 地址时,有时你会发现自己的 IP 地址是这样的———192.168.X.X 或 172.16.X.X。这是 C 类网和 B 类网的私有地址,就是俗称的内网 IP。这是因为你的路由器采用了 NAT 技术。
NAT(Network Address Translation,网络地址转换)是 1994 年提出的。当在专用网内部的一些主机本来已经分配到了内网 IP 地址,但现在又想和因特网上的主机通信时,NAT 技术将其内网 IP 地址转换成全球 IP 地址,然后与因特网连接,也就是说,内网的数台主机使用了同一个全球 IP 地址在上网。
NAT 技术实现了宽带共享,而且有助于缓解 IP 地址空间枯竭的问题。
使用 ifconfig eth0 查看内网 ip:


image.png

IP 的未来

我们现在使用的 IPv4 协议版本从理论上讲,可以编址 1600 万个网络、40 亿台主机。但采用 A、B、C 三类编址方式后,可用的网络地址和主机地址的数目大打折扣,以至 IP 地址已于 2011 年 2 月 3 日分配完毕。
其中北美占有 3/4,约 30 亿个,而人口最多的亚洲只有不到 4 亿个,中国截止 2010 年 6 月 IPv4 地址数量达到 2.5 亿,落后于 4.2 亿网民的需求。地址不足,严重地制约了中国及其他国家互联网的应用和发展。
随着网络技术的发展,计算机网络将进入人们的日常生活,可能身边的每一样东西都需要连入全球因特网,在这样的环境下,IPv6 应运而生。
IPv6 的地址长度是 128 位,通常将这 128 位的地址按每 16 位划分为一个段,将每个段转换成十六进制数字,并用冒号隔开,比如:2000:0000:0000:0000:0001:2345:6789:abcd 就是一个 IPv6 地址。
单从数量级上来说,IPv6 所拥有的地址容量是 IPv4 的约 8×10^28 倍,达到 2^128(算上全零的)个。这不但解决了网络地址资源数量的问题,同时也为除电脑外的设备连入互联网在数量限制上扫清了障碍。
随着 IPv4 不足,支持 IPv6 的网络迅速增长,现在全球已经有 5% 的网络使用 IPv6。

作业

查看 IP 路由表。
子网划分:现有两个 C 类网,202.203.204.0 和 202.203.224.0,分别把它们平均分成 4 个和 8 个子网,写出每个子网的起始、终结 IP 和子网掩码。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容