我们知道网路分层存在TCP/IP五层模型:

应用层:负责应用程序之间的数据沟通;自定制协议;知名协议(HTTP/FTP/SSH协议)

传输层:负责端与端之间的数据沟通(端口与端口之间);封装端口信息(TCP/UDP协议)

网络层:负责地址管理与路由选择;(选择最优路径);(IP协议,路由器)

链路层:相邻设备之间的数据传输(两个网卡之间,通过mac地址地址标识)(以太网协议(Etherne)交换机)

物理层:负责光电信号的传输(以太网协议,集线器(比如双绞线的长度直径,等等))

应用层和传输层,阿鲤在之前已经分享过了,链接再此:

http     https     tcp     udp

我们在这篇文章中会介绍网络层


提到ip,我想大家首先会想到的是ip地址,是的网络中的一个ip就是一个网络节点。但是ip地址只是ip协议中的一个标识而已,现在就让我们看看IP协议的格式是怎样的。

1:4位版本号:指定ip版本协议,对于ipv4而言就是4;

2:4位首部长度:ip头部长度是以4字节为单位的;而其首部长度是4bit,4bit表示最大的数是15;所以ip头部的最大长度为15*4=60字节

3:8位服务类型:3位优先权字段(弃用);4位tos字段,和1位保留字段(必须置为0);4位tos字段分别表示,最小延迟,最大吞吐量,最高可靠性,最小成本,这四者冲突所以只能选一个。eg:对于ssh/telnet这样的应用程序,最小延迟就比较重要,对于ftp这样的程序,最大吞吐量比较重要。

4:16位总长度:ip数据报整体占多少个字节

5:16位标识:唯一的标识主机发送的报文,如果ip报文在数据链路层被分片了,那么每一个片里面的这个id都是相同的。

6:3位标志字段:第一位保留(不知道干啥,先空下来);第2位置为1表示禁止分片,如果这时候报文长度超过mtu,ip模块就会丢弃报文。第3位表示”更多分片“,如果分片的话,最后一个分片置为1,其他为0,类似于结束标志。

7:13位片偏移:是分片相对于原始ip报文开始处的偏移,其实就是在表示当前分片在原始报文中的位置。实际偏移的字节数是这个值*8得到的。因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍。

8:8位生存时间:数据报到达目的地的最大报文跳数,一般为64,每次经过一个路由,TTL就会减一,如果减到0还没有到达,就直接丢弃了;这个字段就是用来防止出现路由循环的。

9:8位协议:表示上层协议(网络层)

10:16位首部校验和:使用CRC进行校验,来鉴别头部是否受损

11:32位源/目的端口:表示发送端和接收端

12:选项字段:。。。

ok,现在大家对ip协议的结构应该有了一定的认识,那么接下来让我们看看ip协议在网络层是怎样传输的

在网络中,数据的传递被成为一个路由的过程,而路由中的每一个点就是一个ip地址;而在我们日常生活中,负责路由的仪器就是路由器(主机虽然有ip节点,但是不能进行路由控制)

那路由的过程是怎样的呢?

唉,不着急,在讲解路由过程之前,让再看看ip地址的结构

一个ip地址被分为两个部分:网络号+主机号

网络号:保证相互链接的两个网段具有不同的标识

主机号:同一网段内,主机之间具有相同的网路号,但是必须有不同的主机号

其实不同的子网,就是把网路号相同的主机放在一起;如果在子网中新增一台主机,则这台主机的网络号和这个子网的网络号一致,但是主机号必须不能和子网中的其主机重复。

那么合理设置主机号和网络号,就可以保证在相互链接的网络中,每台主机的ip不相同。

那么问题来了,手动的管理子网ip,是一个相当麻烦的事情。但是!有一种技术叫DHCP

DHCP能够自动的给子网内新增主机节点分配ip地址,避免了手动管理ip的不便,一般的路由器都带有这个功能。

说了这么多,我们还不知道网络号和主机号是怎样划分的?

对于网络号和主机号的划分,可以分为两种,以前和现在

首先让我们看看以前的划分

A以前提出的网络号码的划分,将ip地址归为以下5类:

A类地址:0.0.0.0到127.255.255.255;高1位固定,7位网络号,24位主机号;一般用于组建超大型网络--可以包含一千多万的主机

B类地址:128.0.0.0到191.255.255.255;高2位固定,14位网络号,16位主机号;一般用于组建中型网络--可以包括65536个主机

C类地址:192.0.0.0到233.255.255.255;高3位固定;21位网络号,8位主机号;一般用于组建小型网络,可以包含256个主机

D类地址:224.0.0.0到239.255.255.255;高4位固定,28位多播组号

E类地址:240.0.0.0到247.255.255.255;高5位固定,27位保留

随着internet的飞速发展,这种划分方案的局限性很快就显现出来,大多数组织都申请B类网络地址,导致B类地址很快就分配完了,而A类却浪费了大量地址;

eg:申请一个B类地址,理论上一个子网能够允许6万5千多个主机。A类地址的子网数更多,然而实际网络假设中,不会存在一个子网内有那么多情况。因此大量ip地址都被浪费掉了。

为了针对这种情况提出了新的划分方案,成为CIDR(classless interdomain routing)

引入一个额外的子网掩码来区分网路号和主机号;

1:子网掩码也是一个32位的正整数。通常用一串“0”来结尾;

2:将ip地址和子网掩码进行 “按位与” 操作,得到的结果就是网络号;

3:网络号和主机号的划分与这个ip地址是A类,B类还是C类无关;

eg:

ip地址 140.252.20.68
子网掩码 255.255.255.0
网络号 142.252.20.0
子网地址范围 142.252.20.0~140.252.20.255

细心的同学根据例子可以看出:ip地址与子网掩码做与运算可以得到网络号,主机号从全0到全1就是子网的地址范围;

ip地址和子网掩码还有一种更简洁的表示方法,

eg:140.252.20.68/24,表示ip地址位140.252.20.68,子网掩码的高位是1,也就是255.255.255.0

在介绍完ip地址的划分后,让我们再看看几个特殊的ip地址散散心

1:将ip地址中的主机号全部设置为0,就成了网络号,代表这个局域网;

2:将ip地址中的主机地址全部设置为1,就成了广播地址,用于给同一个链路中相互链接的所有主机发送数据包

3:127.*的ip地址是用于本机回环测试的,通常是127.0.0.1

可是,以上的这些技术可以让我们拥有足够的ip地址吗?

答案是:不能的;因为现在通用的ip地址是ipv4,一共是4个字节,那么一共只有2的32次方个ip地址,大概是43亿左右,而tcp/ip协议规定,每个主机都需要有一个IP地址。

但是世界上的主机远不止43亿个,并且ip地址都是按照网卡分的;

虽然CIDR在一定程度上缓解了ip地址的不够,但是仍然不足。所以出现了下面的三种方法去解决ip地址不够用

1:动态分配ip地址:只给接入网络的设备分配ip地址,因此同一个mac地址的设备,每次接入互联网中得到的IP地址是不同的

2:IPV6:使用128bit来表达一个地址,现在还未推广开;因为和ipv4不兼容。

3:NAT技术:在介绍NAT技术之前,我们先看一下什么是私有ip地址和公网ip地址

私有IP地址:如果一个组织内部组建局域网,ip地址只用于局域网内的通信,而不是直接连到interent上,理论上,使用任意ip地址都可以,但是RFC1918规定了用于组建局域网的私有ip地址。

1:10.*,前八位为网络号,共16777216个地址

2:172.16.到172.31.,前12位是网络号,共1048,576个地址

3:192,168.*,前16位是网络号,共65536个地址

在这个范围中的,都称为私有ip,其余则称为公网ip;

每一个路由器可以配置两个ip地址,一个是wan口ip,一个是lan口ip(子网);

路由器的所有lan口连接所有主机,其网络号都是这个ip;

不同的路由器,子网ip都是一样的(因为对内),一般都是192.168.1.1;子网的主机ip不可以重复。但是子网之间的主机ip就可以重复了。

wan口ip就是公网ip了,lan对内,wan对外;wan口ip就不能重复了,所以子网之间的ip是可以重复的。

每次在子网内的主机需要和外网进行通信的时候,路由器将ip首部中的ip地址进行替换,这样逐级替换,最终将数据包中的ip地址转换成一个公网ip;这个转换技术被称为NAT(network address translation)

如果我们希望我们自己实现的服务器程序,能够在公网上被访问到,就需要把程序部署在一台具有外网ip的服务器上。比如阿里云,腾讯云等。

说了这么多,就是未我们介绍路由的过程打铺垫的,现在就让我们一起看看路由的过程;

路由选择就好比一个人问路的过程;

问路:当ip数据包,到达路由器时,路由器会先查看目的ip;

指路:路由器决定这个数据包是否可以直接发送给目标主机,还是需要发送给下一个路由器

重复:依次反复,一直达到目标IP

那你知道,路由器是如何判定这个数据该发送到哪里呢?

这是因为每个节点都会维护一个路由表;这个表格可以在linux中使用route命令查看。如果ip命中了路由表,就直接转发。

路由表中的最后一行,主要由一下次路由的地址和发送接口两部分组成。

eg:

destination:目的网络地址

gateway:下一条地址;(广播)

genmast:子网掩码

flags:U表示有效,G表示此条目的的下一条地址是某个路由器的地址。

Iface:发送链接接口

好了,以上是阿鲤总结的网络层的知识点了,若有误请慷慨指出!

网络基础——网络层(ip协议详解)相关推荐

  1. 网络基础网络层--IP协议

    网络基础网络层--IP协议 一.IP协议解析 (一)4位版本 (二)4位报头长度 (三)8位服务类型 (四)16位数据报长度 (五)16位分片标识 (六)3位分片标志 (七)13位分片偏移 (八)8位 ...

  2. WinSock API网络编程——TCP/IP协议详解

     WinSock API网络编程--TCP/IP协议(http://www.impcas.ac.cn/usr/lujun/browse.asp?id=winsock_tcp)            ...

  3. TCP/IP网络协议栈:ARP协议详解

    <TCP/IP网络协议栈:以太网数据包结构.802.3> <TCP/IP网络协议栈:ARP协议详解> <TCP / IP攻击:ARP缓存中毒的基本原理.TCP序列号预测和 ...

  4. TCP/IP协议详解---概述

    工作之后,才发现以前在学校里学的东西忘得太快太干净了,现在需要一点点地捡起来了,要不然写几行程序会闹很多笑话会出现很多bug的.从今天开始,翻一翻<TCP/IP协议详解 卷1>这本书,希望 ...

  5. 《TCP IP协议 详解》思考总结 · 三

    前言 这一篇文章主要围绕了IP协议,ICMP协议和UDP协议展开,希望可以在这里大概做一个总结,将<TCP/IP协议详解 卷一>书中TCP相关章节前面的内容做一个结束,在下一篇文章专心的去 ...

  6. TCP /IP协议详解【转】

    转自:https://www.jianshu.com/p/0cf648510bce?utm_campaign=maleskine&utm_content=note&utm_medium ...

  7. IP协议详解及IPv4与IPv6协议的区别

    IP协议是在TCP/IP协议模型中的重要组成部分,目前我们使用最多的是IPv4协议,IPv6协议的用户量也在慢慢增加,苹果在几年之前就已经开始支持IPv6协议了.我们先来了解一下IPv4和IPv6协议 ...

  8. TCP/IP协议详解、TCP三次握手

    TCP/IP协议详解:TCP/IP协议详解_王佳斌-CSDN博客_tcp/ip协议认识HTTP协议它是互联网协议(Internet Protocol Suite),一个网络通信模型,是互联网的一个基本 ...

  9. 入木三分学网络第一篇--VRRP协议详解-----(1)

    原帖:http://blog.chinaunix.net/uid-11654074-id-2857384.html 目录 入木三分学网络第一篇--VRRP协议详解 1. VRRP产生背景及应用环境 1 ...

  10. SOME/IP协议详解「2.0·服务化通信概述」

    SOME/IP协议详解「2.0·服务化通信概述」 点击返回雪云飞星的SOME/IP协议详解「总目录」 SOME/IP协议详解「2.0·服务化通信概述」 1 SOME/IP服务的组成 2 Method| ...

最新文章

  1. 传真故障排除示例--编码不一致导致传真失败
  2. 解惑(一) ----- super(XXX, self).__init__()到底是代表什么含义
  3. python linux教程_在RedHat系统Linux上部署Python的Celery框架的教程
  4. python中用来回溯异常的模块_python中的异常处理使用说明
  5. [剑指offer][JAVA]面试题第[21]题[调整数组顺序使奇数位于偶数面前][双指针]
  6. 自动化运维环境搭建过程
  7. Python中使用xpath获取Scrtpt里面的内容
  8. xcode 快捷_您必须知道的Xcode快捷方式
  9. button按钮的四种监听及实例
  10. 全国银行SWIFT代码查询
  11. mysql批量插入跟更新_mysql批量插入以及批量更新
  12. 计算机制图视频教程,机械制图视频教程
  13. 一张表格分成两页打印_word一页内容怎么分成两页打印
  14. echarts 关系图 力引导布局
  15. 2017年一季度工作回顾及感悟
  16. 制作二维码过程的详解(基于python)_基于opencv+python的二维码识别
  17. 历史周期律 多久_什么是“历史周期律”?
  18. Flutter中的多选按钮组件Checkbox
  19. 一个C#写的爬虫程序
  20. 洛谷 T6476 涂色游戏

热门文章

  1. 用计算机刻录光盘,教你怎么用电脑刻录数据光盘
  2. 什么是报表工具?和 EXCEL 有什么区别?
  3. JavaMail:使用163,QQ和本地服务器邮件发送
  4. 以大学生活为主题html,大学生活散文800字范文-以校园生活为话题的抒情散文800字?...
  5. VMware vCenter Server 7.0U3
  6. 女博士被骗85万 长年泡实验室不知道“徐玉玉”案
  7. 天才小毒妃 第966章 不死不灭的痛苦
  8. 计算机网络学习笔记(持续更新)
  9. Linux 用户和用户组管理
  10. 呼叫中心新座席必修课