第五章 Internet协议 网络层

有TCP、 UDP、 ICMP和IGMP数据都通过IP数据报传输。

Internte 是特指使用tcp/ip协议的网络。而internet是泛指使用协议通讯的网络。

ip

使用一种“我尽力送”,“送完我就不管”的方式进行数据数据报的投递。
也就是,不可靠的传送,不保存状态的传送。
有了数据我就封装送出去,至于数据报的先后达到顺序,是否能够到达不是ip负责的事情。
其上层也就是传输层负责可靠性之类的。

ip数据报

IP数据报
IP数据报

至于为什么带了两个物理地址的头部,还有一个IPv4类型的值:0x0800
我就也不知道了。

从0800后面开始的是ip报的内容。

  1. 版本号 4bit是有半位
    ipv4为4,ipv6为6。
  2. IHL 4bit
    保存ipv4头部的32位字(也就是4字节大小)的数量。表示的值最大是15,所以头部最长为60字节。
    该值默认为5。也就是20。
    该字段控制了选项的最大大小:最长为15*4=60b的头部,所以选项的最大长度为40B
    也是记录了有效荷载部分从哪里开始
  3. Ds区分服务
    区分服务代码点
    没看懂
  4. ECN显式拥塞通知
    路由如果有探测流量拥堵的能力。当路由探测到当前流量拥堵,那么会将流经的数据报的改字段设置为2
    表示我这里的流量太大了。
    当目的主机收到该数据报的时候,检测到ECN为2,会通知发送方降低发送速度。
    这是避免和处理网络拥塞的方法之一。
  5. 总长度 16bit
    是IPv4数据报的总长。所以这个长度和IHL长度的差,可以计算出数据部分的起始位置和长度。
    因为长为16bit(一个int大小),所以可以携带65535字节数据。
    如果长度太小,会被填充。
    我的电脑上都被填充为66字节。还有54字节的。
    虽然可以携带65535字节的数据,但是数据链路层的MTU不允许。所以通常分组
    该字段指明了数据到哪里结束。
    ip数据报最小为48或46,如果小于就被填充,是在以太网帧中被填充。
    但是ipv4有一个576字节的限制,也一个ipv4数据报总大小为576,如果选项最大为60B,那么携带512B的有效荷载。
  6. 标识 16bit
    主要是数据报分片以后,不会和别的分片混淆,依然能够组装。
    后面讲
  7. TTL最大路由跳数(time to live) 8bit
    一个数据包可以经过的路由器个数。上图的是0x80,也就是128个。
    当该值为0时,被丢弃。会返回一个icmp
    主要是为了防止路由环路的。
  8. 协议 8bit
    数据报携带数据的类型。也就是TCP还UDP
    TCP为6
    udp为17
    ICMP为1
    现在主要用于识别其中封装的协议是否为一种传输层协议。
    还有其他的类型,其他的值。
  9. 头部校验和 16bit
    ip不检查数据报有效荷载(也就是携带数据的有效性。)
    只检测头部信息的正确性
    所以需要一种工具来检测数据的正确性。
    当数据报经过一台路由器时,TTL变,所以检验和也要变。
    在接收到ipv4数据报时,主机(或路由)从新计算一遍校验和,如果出错直接丢弃,并不会发送差错信息。
    高层需要实现重发。
  10. 两个ip地址64bit
  11. ip选项。
    该程度可变,最长320bit,40个字节。
    暂时没遇到啊

以上就是ip的报头了。

校验和

Internet校验和算法:
1.待校验的相邻字节成对组成16比特整数并计算其和的二进制反码(二进制反码求和).
2.生成校验和,校验和区域本身应当先置0,并和待校验数据相加,其和进行二进制反码运算后赋给校验和区域.
3.检查校验和,将所有字节,包括校验和,进行相加并求二进制反码.如果结果为全1(即二进制反码算术中的0),检查通过.

二进制反码求和:从低位到高位逐列进行和计算,如果最高位(16位)进位,则得到的结果加1,一直循环到最高位没有进位为止.最后把得到的结果取反.程序实现如下:

short checksum(unsigned short *buf, int nwords)
{
  //一个大于16位的变量
    unsigned long sum;
  //低位开始叠加,每次16bit
    for (sum = 0; nwords > 0; nwords--)
         sum += *buf++;
  //一个大于16位的值,如果左移16位不是0,表明发生进位
    while (sum >> 16)  
  //进位的值都是1,然后再加上原来的sum,但是使用0xffff将高位清空,也就是进位清空
  //只剩下低16位的值
         sum = (sum >> 16) + (sum & 0xffff);
    return ~sum;
}

ip转发

如果目的主机和发送方位于同一子网中,那么直接将数据帧扔该目的主机。(通常是最后阶段了)
如果不是位于同一网络中,那么扔给路由器,让路由器处理。

ip层包括一些位移内存中的信息成为路由表或转发表。每次转发都需要从中查找信息。

路由和主机的区别

主机只会发送他生成的数据帧,如果接收到数据帧要不接受,要么直接丢弃,不会转发。
路由会转发别的主机或路由发送来的数据帧。

设备接收到数据帧

当设备接受到一个数据帧以后,数据链路层模块判断:数据帧的目的地址(物理地址),如果是本设备地址或是广播组播之类的地址,那么接受,(否则直接丢弃)。交给ip模块。
ip模块在判断,数据报中的目的ip地址是否是本机地址(或是广播之类地址),如果是,那么接受。
如果不是:

  1. 本机是一台主机。
    直接丢弃数据报
  2. 本机是一台路由器
    路由器会转发该数据报。

ip转发

每个路由保存一个ip转发表(也就是路由表)。用于判断数据报的下一跳。
表中每条包含:目的ip地址,掩码,下一跳ip,接口。

当路由进行数据报转发时:
首先检查数据报中的目的地址(ip地址),然后进行最长前缀匹配算法
将该ip与转发表中的掩码进行与运算,结果中1最多的那个那条表示匹配最好。
将其下一跳地址作为该数据报的目的地址(ip)。

如果没有发现匹配条目,送到默认路由。再不行返回主机不可达。

ip数据报的主机处理

接受端 主机模式

  1. 强主机模式
    只有当目的ip地址与数据报到达的借口配置的ip地址相同时,才将数据包交付到本地协议栈
  2. 弱主机模式
    数据报的目的ip与主机的任意一个接口配置的ip地址相同时,就将数据报交付给本地协议栈

发送端

又是什么源地址选择算法

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

推荐阅读更多精彩内容