网络层_IP

传输层解决的是传输控制,而实际真正决定数据能否发送到对端的是网络层。网络层是有概率传输,而传输层是可靠性传输。所以传输层+网络层就可以做到将数据可靠发送到对端。网络层的常见协议有:IP、ICMP等,其中最重要的是IP协议,IP协议有IP4v和IPv6两种,目前用的最多的是IPv4.

一.IP协议

1.1 IP地址

一般每一个网卡都配有一个IP地址,而IP地址可以标识网络中的唯一一台主机,IP地址有网络号和主机号组成,按照网络号可以快速定位某一个主机在哪个网段,然后根据主机号进一步确认是哪个主机。

  • IPv4地址:32位,用点分十进制标识
  • IPv6地址:128位

环回地址:172.0.0.1 这个ip地址用于网络测试,从该ip发出的数据不会发送到网络中,而是贯穿自己的TCP/IP层,然后交给自己上层程序。

1.2 IP协议格式
  • 4位版本:4-IPv4
  • 4位首部长度:以4字节为单位,同TCP
  • 8位服务类型:表示IP提供哪种类型的传输方式
    • 最大吞吐量
    • 最小时延:路径选择最近
    • 最高可靠性:丢包概率最低路径路由
    • 最小成本:
  • 16位总长度:解决IP报文的粘包问题
  • 16位标识:用于区分不同IP报文
  • 3位标志:xxx 第一位x保留; 第二位x如果为1表示不能分片,0可以分片;第三位x表示更多分片:如果为1,则表示该分片后有分片。
  • 13位片偏移:该分片的数据在原始报文中的偏移量
  • 8位生存时间:最多可以经过几次路由器转发
  • 8位协议类型:交付给上层哪个协议,TCP or UDP
  • 16位首部校验和
1.3 网段划分

如果用MAC地址在网络中定位某一台主机,那么我们就必须得一台一台主机查,这样查找效率无疑是很低的。如果用IP地址在网络中定位某一台主机,根据网络号把所有主机划分为若干子网,每个子网都有其子网号,这样要查找一台主机,先查找目标主机的网络号,然后再确定具体是该子网中的哪个主机。这样的查找效率是很高的。举个例子,根据你的学号来找你,一定先是确定你的学院,然后确定你的专业,然后确定你的班级,最后找到你,这样查找效率一定是比一个一个找高的。

路由器:

  • 功能:构建子网,DHCP动态为当前子网内的主机分配IP地址

一般路由器就是你当前网段的入口主机,所以一般路由器的ip地址就是当前网段内的1号主机。例如:192.168.3.1 , 网络号:192.168.3,主机号:1。

Internet组织机构定义了五种IP地址,有A、B、C、D、E五类地址。但是由于这种划分子网的方式会导致大量的IP地址浪费,目前解决方案有CIDR,DHCP,NAT技术,IPv6。

  • CIDR方案:引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;子网掩码也是一个32位的正整数. 通常用一串 "0" 来结尾;将IP地址和子网掩码进行 "按位与" 操作, 得到的结果就是网络号;网络号和主机号的划分与这个IP地址是A类、B类还是C类无关;

模拟子网划分方式:在下面的划分方案中,只是为了弄清一些网络机制。

在两个网络之间,要有一个路由器,这个路由器至少包含有两个IP地址,一个是对内的,一个是对外的。划分到一定程度上,运营商不会按照上述这样一直增大子网掩码,而是建立一个私网。
公网IP与私网IP:

标志规定私网IP有三种,且不能出现在公网中。私有IP可以相同

  1. 10.x.x.x 大型局域网用的私网IP
  2. 192.168.x.x 小型局域网用的私网IP,比如一个家庭
  3. 172.16.x.x - 127.31.x.x 中型局域网用的私网IP,比如一个学校

任何一台路由器都有两个IP,私有IP(LAN口IP)和公网IP(WAN口IP)。当用户要给公网的一个主机发送消息时,由于私网IP不能出现在公网上,所以报文在经过当前局域网的出口路由器时会将报文的私有IP换为路由器的WAN口IP,然后传输到公网上,经过路由后找到对应的主机。这种技术就是NAT技术(源ip不断被替换)。

1.4 路由

IP数据包的转发是不断进行查找路由表的过程,通常一个路由器会直连两个子网,如果查找路由表发现目的IP地址不是这两个子网,路由器就会将该IP数据包转发到默认路由,进行下一次查找;如果查找路由器发现目的IP在级联的两个子网中,就会将该IP数据包发送给目的子网

路由表:route命令查看路由表

路由表的Destination是目的网络地址,Genmask是子网掩码,Gateway是下一跳地址,Iface是发送接口,Flags中的U标志表示此条目有效(可以禁用某些条目),G标志表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发;

1.5 分片与组装

由于MAC协议规定,一次传输的字节数(MTU)不超过1500字节。因此,如果IP数据包的大小超过1500字节,就要进行分片传送,然后到达对端主机的网络层再进行组装成一个完整的报文。在IP协议中有三个字段:16位标识,3位标志,13位片偏移。通过这三个字段可以实现对同一个包的分片进行组装。但IP数据包如果分片了,那么就会增加丢包概率,所以TCP向下交付的数据尽量不要过大,一般应该为1480。其中TCP报头20字节,有效载荷1460字节(MSS,最大段尺寸),最终加IP报头20字节,最后传输到数据链路层的总大小为1500字节。

相关推荐
BingoGo1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
DianSan_ERP5 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
呉師傅5 天前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑