网络原理TCP/IP(5)

IP协议

IP协议主要完成的工作是两方面:

  1. 地址管理,使用一套地址体系,来描述互联网上每个设备所处的位置
  2. 路由选择,一个数据包如何从网络中的某个地址传输到另一个地址

在这里插入图片描述
• 主机:配有IP地址,但是不进⾏路由控制的设备;
• 路由器:即配有IP地址,⼜能进⾏路由控制;
• 节点:主机和路由器的统称;

IP协议报头

在这里插入图片描述

  1. 4位版本号(version): 指定IP协议的版本,对于IPv4来说,就是4.对于IPv6来说就是6
  2. 4位头部长度(header length): IP头部的⻓度是多少个32bit,也就是length*4的字节数.4bit表⽰最大的数字是15,因此IP头部最⼤⻓度是60字节.
  3. 8位服务类型(Type Of Service): 3位优先权字段(已经弃⽤),实际上只有四位有效,4位TOS字段,和1位保留字段(必须置为0).4位TOS分别表⽰:最⼩延时,最⼤吞吐量,最⾼可靠性,最⼩成本.这四者相互冲突,只能选择⼀个.对于ssh/telnet这样的应⽤程序,最⼩延时⽐较重要;对于ftp这样的程序,最⼤吞吐量⽐较重要.
  4. 16位总长度(total length): IP数据报整体占多少个字节.包含了报头和载荷,虽然IP自身有长度限制,但是IP也提供了拆包和组包,当载荷很大时,在IP这一层会自动拆成多个IP数据报,每个IP数据报来携带载荷的一部分
  5. 16位标识(id):唯⼀的标识主机发送的报⽂.如果IP报⽂在数据链路层被分片了,那么每⼀个⽚⾥⾯的这个id都是相同的.用于组包。
  6. 3位标志字段:第⼀位保留(保留的意思是现在不⽤,但是还没想好说不定以后要⽤到).第⼆位置为1表⽰禁⽌分片,这时候如果报⽂长度超过MTU,IP模块就会丢弃报⽂.第三位表⽰"更多分片",如果分⽚了的话,最后⼀个分片置为1,其他是0.类似于⼀个结束标记.
  7. 13位分片偏移(framegament offset):是分片相对于原始IP报⽂开始处的偏移.其实就是在表⽰当前分⽚在原报⽂中处在哪个位置.实际偏移的字节数是这个值*8得到的.因此,除了最后⼀个报⽂之外,其他报⽂的长度必须是8的整数倍(否则报⽂就不连续了).描述了这些包之间的先后顺序
  8. 8位⽣存时间(Time To Live,TTL):数据报到达⽬的地的最⼤报⽂跳数.⼀般是64.每次经过⼀个路由,TTL-=1,⼀直减到0还没到达,那么就丢弃了.这个字段主要是⽤来防止出现路由循环
  9. 8位协议:表示在传输层使用哪个协议
  10. 16位头部校验和:使用CRC进⾏校验,来鉴别头部是否损坏.
  11. 32位源地址和32位⽬标地址:表示了发件人地址和收件人地址

地址管理

IP地址的本质就是一个32位整数(int)
为了方便,就会把IP表示成点分十进制的方式
通过3个点分成4个部分,每个部分1个字节,每个部分的取值都是0-255
IP地址的存在,目的就是为了能够区分网络上不同的设备

如何解决IP地址不够用?

  1. 动态分配IP地址
    全世界的设备,也不是同一时刻一起都在上网,更充分的利用现有的IP地址
  2. NAT机制(网络地址映射)
    先把IP地址分成两大类
    a)私网IP(局域网IP):IP地址是以10.* , 172.16.–172.31. ,192.168.* 这三类地址都是私网IP
    b)公网IP:除了私网IP,其他的都是公网IP

公网上的设备对应的公网IP都必须是唯一的,但是私网上/局域网上的设备使用私网IP只要保证局域网内部的IP不重复即可,不同的局域网之间的Ip允许重复

由于上述的设定,就有一个重要的限制:
1.公网设备访问公网设备没有任何问题,直接访问即可
2.局域网设备访问局域网设备(同一局域网中)也是没有任何问题的
3.局域网设备访问局域网设备(不同局域网中)不允许访问
4.局域网设备访问公网设备就需要对局域网设备的IP进行地址转换
5.公网设备访问局域网设备不允许主动访问
在这里插入图片描述
路由器进行NAT的时候就会把这次通信的相关信息记录下来

在这里插入图片描述
3. IPv6从根本上解决问题
增加IP地址的个数
IPv6使用了16个字节表示IP地址

网段划分

IP地址分为两个部分,网络号和主机号

• 网络号:保证相互连接的两个网段具有不同的标识;
• 主机号:同⼀网段内,主机之间具有相同的网络号,但是必须有不同的主机号;

在这里插入图片描述
• 不同的子网其实就是把⽹络号相同的主机放到⼀起.
• 如果在子网中新增⼀台主机,则这台主机的网络号和这个子网的网络号⼀致,但是主机号必须不能和子网中的其他主机重复.
通过合理设置主机号和⽹络号,就可以保证在相互连接的⽹络中,每台主机的IP地址都不相同.
那么问题来了,⼿动管理⼦⽹内的IP,是⼀个相当⿇烦的事情.
• 有⼀种技术叫做DHCP,能够⾃动的给⼦⽹内新增主机节点分配IP地址,避免了⼿动管理IP的不便.
• ⼀般的路由器都带有DHCP功能.因此路由器也可以看做⼀个DHCP服务器.

过去曾经提出⼀种划分⽹络号和主机号的⽅案,把所有IP地址分为五类,如下图所⽰。
在这里插入图片描述

• A类0.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到247.255.255.255
随着Internet的⻜速发展,这种划分⽅案的局限性很快显现出来,⼤多数组织都申请B类⽹络地址,导致B类地址很快就分配完了,⽽A类却浪费了⼤量地址;
• 例如,申请了⼀个B类地址,理论上⼀个⼦⽹内能允许6万5千多个主机.A类地址的⼦⽹内的主机数更多.
• 然⽽实际⽹络架设中,不会存在⼀个⼦⽹内有这么多的情况.因此⼤量的IP地址都被浪费掉了. 针对这种情况提出了新的划分⽅案,称为CIDR(Classless InterdomainRouting):
• 引⼊⼀个额外的⼦⽹掩码(subnet mask)来区分⽹络号和主机号;
• ⼦⽹掩码也是⼀个32位的正整数. 通常⽤⼀串 “0” 来结尾;
• 将IP地址和⼦⽹掩码进⾏ “按位与” 操作, 得到的结果就是⽹络号;
• ⽹络号和主机号的划分与这个IP地址是A类、B类还是C类⽆关;
在这里插入图片描述
可见,IP地址与子网掩码做与运算可以得到⽹络号,主机号从全0到全1就是⼦⽹的地址范围;
IP地址和⼦⽹掩码还有⼀种更简洁的表⽰⽅法,例如140.252.20.68/24,表⽰IP地址为140.252.20.68,子网掩码的高24位是1,也就是255.255.255.0

特殊的IP地址

• 将IP地址中的主机地址全部设为0,就成为了⽹络号,代表这个局域⽹;
• 将IP地址中的主机地址全部设为1,就成为了⼴播地址, 用于给同⼀个链路中相互连接的所有主机发送数据包;
• 127.*的IP地址⽤于本机环回(loop back)测试,通常是127.0.0.1

路由选择

网络结构太复杂且,每一个路由器都无法掌握全局的信息,只能掌握局部信息,此时路由器规划出来的路线,只能是一个“较优解”路由的过程,是⼀跳⼀跳(Hop by Hop) “问路” 的过程.
所谓 “⼀跳” 就是数据链路层中的⼀个区间. 具体在以太⽹中指从源MAC地址到⽬的MAC地址之间的帧传输区间.
在这里插入图片描述

以太网

• "以太网"不是⼀种具体的网络,而是⼀种技术标准;既包含了数据链路层的内容,也包含了⼀些物理层的内容.例如:规定了⽹络拓扑结构,访问控制⽅式,传输速率等;
• 例如以太⽹中的⽹线必须使⽤双绞线;传输速率有10M,100M,1000M等;
• 以太⽹是当前应⽤最⼴泛的局域⽹技术;和以太⽹并列的还有令牌环⽹,⽆线LAN等;
以太⽹帧格式
以太⽹的帧格式如下所⽰:
在这里插入图片描述
• 源地址和⽬的地址是指网卡的硬件地址(也叫MAC地址), ⻓度是48位,是在⽹卡出⼚时固化的;
• 帧协议类型字段有三种值,分别对应IP、ARP、RARP;
• 帧末尾是CRC校验码。

认识MAC地址

• MAC地址⽤来识别数据链路层中相连的节点;
• ⻓度为48位, 及6个字节. ⼀般⽤16进制数字加上冒号的形式来表⽰(例如: 08:00:27:03:fb:19)
• 在⽹卡出⼚时就确定了, 不能修改. mac地址通常是唯⼀的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些⽹卡⽀持⽤⼾配置mac地址).

对比理解MAC地址和IP地址

• IP地址描述的是路途总体的 起点 和 终点;
• MAC地址描述的是路途上的每⼀个区间的起点和终点;

DNS(域名服务器)

使用IP地址来描述网络设备的位置,域名是一串可读性很好的单词,DNS把域名自动的转化成对应的IP地址
TCP/IP中使⽤IP地址和端⼝号来确定⽹络上的⼀台主机的⼀个程序.但是IP地址不⽅便记忆.
于是⼈们发明了⼀种叫主机名的东西,是⼀个字符串,并且使⽤hosts⽂件来描述主机名和IP地址的关系.
在这里插入图片描述
• DNS是应⽤层协议
• DNS底层使⽤UDP进⾏解析
• 浏览器会缓存DNS结果

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-02-06 02:34:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-06 02:34:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-06 02:34:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-06 02:34:01       20 阅读

热门阅读

  1. 记一次Mysql加字段加不上问题排查过程

    2024-02-06 02:34:01       33 阅读
  2. NCCL 源码详解总目录

    2024-02-06 02:34:01       33 阅读
  3. 多线程与socket编程

    2024-02-06 02:34:01       35 阅读
  4. nginx负载均衡

    2024-02-06 02:34:01       34 阅读
  5. Blender 的重拓扑功能中的参数,

    2024-02-06 02:34:01       29 阅读
  6. salesforce flow 如何保存多选列表选中的值

    2024-02-06 02:34:01       28 阅读
  7. 【C语言】深入理解函数指针

    2024-02-06 02:34:01       38 阅读