2.7.3 网络多层协议章 网络层协议

概念

  • 在复杂的网络环境中确定一个合适的路径。
  • 明确所谓的"网络数据报"往往就是由报头和正文(载荷)构成的所谓的报头,里面其实就是一些结构化数据,被赋予特定含义

IP协议构成

在这里插入图片描述

  • 4位版本号(version):指定IP协议的版本,对于IPv4来说,就是4。(现有的IP协议版本只有4和6)
  • 4位头部长度(header length):和tcp设定一样,IP报头可变长,IP头部的长度是多少个32bit,也就是 length * 4 的字节数。4bit表示最大的数字是15,因此IP头部最大长度是60字节。且可以通过选项部分,扩展长度
  • 8位服务类型(Type Of Service):3位优先权字段(已经弃用),4位TOS字段,和1位保留 字段(必须置为0)。4位TOS分别表示:最小延时(传输一个数据报的时间尽量短),最大吞吐量(一定时间内传输的数据量尽量多),最高可靠性(在传输过程中最不容易触发丢包 ),最小成本(在传输过程中消耗的硬件资源最低)。 这四者相互冲突,只能选择一个。对于ssh/telnet这样的应用程序,最小延时比较重要;对于 ftp这样的程序,最大吞吐量比较重要。
  • 16位总长度(total length):IP数据报整体占多少个字节。 IP报头+载荷的长度 ==> 总长度- IP报头长度 ==>载荷长度 ==> TCP报文总长度 ==> TCP报文总长度 - TCP 报头长度 ==> TCP载荷长度,16位总长度最大位64KB,但是IP协议自身支持"拆包组包"机制,这里的64KB 只是约束了一个IP数据报,如果要携带比较长的数据的时候,IP协议会自动把一个数据报拆成多个数据报,接收方进行分用的时候,也会把多个数据报合并成一个数据报(利用拆包和组包达到更大数据内容的传输)
  • 16位标识 3位标志字段 13位分片偏移 用于处理拆包和组包,即把一个大包拆成多个小包,多个小的IP数据报都会带有报头,载荷是TCP数据报拆分出的几个部分(UDP不能拆包和组包),拆除的多个包16位标识是相同的,13位分片偏移是不同的,用于确定小包组合成大包的先后顺序,三位标志位其中有一位是不用的还有一位表示是否允许拆包(大包拆成的小包这里都是1),剩下一位 表示结束标记,标识当前的小 包是否是最后一个
    • 16位标识(id):唯一的标识主机发送的报文。如果IP报文在数据链路层被分片了,那么每 一个片里面的这个id都是相同的。
    • 3位标志字段:第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到)。第 二位置为1表示禁止分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文。第三位表 示"更多分片",如果分片了的话,最后一个分片置为1,其他是0。类似于一个结束标记。
    • 13位分片偏移(framegament offset):是分片相对于原始IP报文开始处的偏移。其实就是 在表示当前分片在原报文中处在哪个位置。实际偏移的字节数是这个值 * 8 得到的。因此, 除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)。
  • 8位生存时间(Time To Live,TTL):单位是次,数据报到达目的地的最大报文跳数。一般是64(但也有32/128)。每次经过一个路由器,TTL 减去1,一直减到0还没到达,那么就丢弃了。这个字段主要是用来防止出现路由循环。正常的TTL足以支持数据报到达网络的任意位置,如果确实出现0了,基本可以认为目标IP不可达
  • 8位协议:表示上层(传输层)协议的类型。
  • 16位头部校验和:使用CRC进行校验,来鉴别头部是否损坏,应为载荷部分要么是UDP,要么是TCP,人家自己已经校验过自己了 。
  • 32位源IP地址和32位目标IP地址:表示发送端和接收端,数据报从哪来到哪去.网络上有这么多主机,需要有办法描述主机具体的位置,IP地址就是解决这个问题的关键,所谓ip地址其实是一个32的整数(4字节),点分十进制,由于按照32位的方式表示,就会使这个数字变得很大,很难理解和记忆,一般会把IP地址按照点分十进制的方式来表示(使用三个 . 把 32位分成4个部分,每个部分8位即1字节,每个字节的范围是0-255(不带负号))
  • 选项字段(不定长,最多40字节):略 。

IP地址分配问题

如何查看ip

  • cmd+ipconfig+看ipv6地址
  • ipconfig /all

ip如何分配和地址转化

  • 32位地址大约49亿9千万比较,现在世界上能上网的设备早就爆了 解决方法1:动态分配IP(DHCP) 你这个设备需要上网就分配IP,不需要就先不分配,但这种方法只能缓解不更根治 解决方法2:NAT机制(网络地址转换):把IP地址分为内网IP和外网IP
    • **内网IP:*允许不同局域网的设备ip可以重复,同一个局域网的内的设备ip不能重复 10. 与172.16.*–172.31. * 与 192.168. * 开头的就是内网ip
    • **外网IP:**外网ip不能重复
    • 如果局域网内的设备通信是ok的(ip不同),如果A局域网设备想和B局域网中的设备通信(这两个设备的ip可能相同),当前规则是直接禁止,如果想要通信,则需要一个带有外网ip的设备进行中转,像我们平时使用的电脑,手机,都是在局域网中使用,他们会有一个内网IP,还有一类设备,是"服务器"服务器是可以拥有外网ip,这个过程中就涉及到NAT的工作过程了
    • **NAT:**拥有外网ip的路由器会使用自己的外网ip替换掉当前ip数据报中的源ip(这个局域网中的源ip可能与别的局域网重复),这样就可以两个局域网的相互访问,且对于NAT设备(路由器),会在触发NAT的时候,维护一个映射表,包括替换前ip和替换后ip,方便访问别的局域网的服务器后返回数据报能找到原来发送这个数据报的局域网内的ip,因此每次经历路由器转发,都有可能触发NAT,NAT的缺点:1效率不高,2非常繁琐,3不方便直接访问局域网,但是NAT的最大优点:NAT是纯软件实现的方案
    • IPV6: ipv4是4个字节,32位表示ip地址,IPV6是16字节,128位表示IP地址,IPV6真正解决了IP的分配(足够多),IPV6和NAT诞生时期差不多,但NAT更为成功,这是应为IPV6和IPV4不兼容,要想升级IPV6就需要更换路由器(要花钱),相比之下,NAT方案,只需要路由器开发商开发出新版本的软件(成本低),ipV6摆脱ipv4(ipv4的分配权在usa,),且ipv6的发展也为了摆脱dns

IP的组成与识别

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

例子: 192.168.22.56 网络号192.168.22 主机号 56

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

主机号: 标识主机 同一个网段内(局域网中,同一路由器下,路由器连接着两个局域网lan连自己,wan连外部),主机之间具有相同网络号

同一局域网下: 网络号必须相同,主机号必须不同

两个相邻局域网下:网络号必须不同

子网掩码

  • 一个IP地址的网络号和主机号是通过子网掩码来识别的
  • 子网掩码和ip地址一样,也是4字节,32位的整数,但左侧必须是连续的1,右侧必须是连续的0
  • 1的范围描述了ip地址的哪些位 为网络号
  • 家用网的子网掩码通常为255.255.255.0

特殊的IP地址

  • 将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网;
  • 将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包,相当于往这个IP发数据报这个数据报就会转发给局域网中的所有设备(比如投屏软件,在局域网下搜索投屏设备,则往局域网发送广播,让其他设备做响应,此时手机显示可以投屏的相关设备),此外广播在传输层只能使用udp,不能使用tcp,应为tcp无法完成三次握手建立连接的过程
  • 127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1 (本机与本机通信可以使用这个ip), localhost 也可以表示本机,但是这是个域名,通常被解析成127.0.0.1,所以两者是等价的
  • 本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输), 对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通 信。

IP的路由选择功能

概念

  • 这里只简单了解,真正编程的时候用的少

  • 路由器无法做到全面理解,只能认识部分网络环境(路由器能够知道和它相邻的一些设备的的情况)

  • 在这个前提下,进行路由转发只能走一步算一步,相当于贪心,路由转发给的路径不一定是最优解,而是较优解

过程

每个路由器内部有一个数据结构"路由表"

数据报到达路由器的时候,就需要查询路由表(问路–这是个"启发式"的过程)

  1. 如果查到了,就可以直接按照这个方向继续转发,数据就能到达
  2. 如果没查到,路由器会给一个默认方向(下一跳的地址),沿着默认的方向走(往往是走到上级路由器这里)
    “路由表”

数据报到达路由器的时候,就需要查询路由表(问路–这是个"启发式"的过程)

  1. 如果查到了,就可以直接按照这个方向继续转发,数据就能到达
  2. 如果没查到,路由器会给一个默认方向(下一跳的地址),沿着默认的方向走(往往是走到上级路由器这里)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Ap0stoL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值