• [Linux] 网络层-----IP协议、ICMP协议、NAT技术


    ip协议头格式

    ip协议头格式

    • 8位生存时间: 一个数据报到达目的地的最大报文跳数,一般是64;每次经过一个路由,TTL 减 1,若一直减到0还没到达,那么就丢弃了,主要是用来防止出现路由循环

    关于报文分片问题

    • 为什么要分片:下层的mtu限制了其所能接受报文的大小;
    • 如何识别分片报文:分片报文的13位片偏移不为0,或3位标志中的更多分片位为1;
    • 如何确定最后一个分片:该分片报文的片偏移量不为0但更多分片位为0;
    • 如何组合分片报文:先根据16位标识聚合所有的分片报文,再按照片偏移大小进行升序排序;
    • 如何发现丢包问题:起始片偏移+自身分片的长度为下一个分片的起始片偏移;
    • 如何保证收到了所有的分片报文:开头没有丢失,中间没有丢失,收到了结尾报文。

    网段划分

    • DHCP技术:能够自动的给子网内新增主机节点分配IP地址,避免了手动管理IP的不便,一般的路由器都带有DHCP功能,因此路由器也可以看做一个DHCP服务器;

    1)把所有IP地址分为五类

    IP地址划分为5类

    2)CIDR划分方案

    • 引入子网掩码来区分网络号和主机号,子网掩码是一个32位的正整数,通常用一串 “0” 来结尾;将IP地址和子网掩码进行 “按位与” 操作, 得到的结果就是网络号;网络号和主机号的划分与这个IP地址是A类、B类还是C类无关;
    • CIDR在一定程度上缓解了IP地址不够用的问题:提高了利用率,减少了浪费,但是IP地址的绝对上限并没有增加。

    3)特殊的ip地址

    • 将IP地址中的主机地址全部设为0-----网络号:代表这个局域网;
    • 将IP地址中的主机地址全部设为1-----广播地址:用于给同一个链路中相互连接的所有主机发送数据包;
    • 127.*的IP地址用于本机环回测试,通常是127.0.0.1。

    4)解决ip不足的方法

    • 动态分配IP地址:只给接入网络的设备分配IP地址,因此同一个MAC地址的设备,每次接入互联网中,得到的IP地址不一定是相同的;
    • NAT技术:子网内的主机需要和外网进行通信时,路由器将IP首部中的IP地址替换成WAN口IP,这样逐级替换,最终数据包中的IP地址成为一个公网IP;
    • IPv6:用16字节128位来表示一个IP地址。

    ip数据包的传输过程

    当IP数据包,到达路由器时,路由器会先查看目的IP(通过路由表)-----路由器决定这个数据包是能直接发送给目标主机,还是需要发送给下一个路由器-----依次反复,一直到达目标IP地址。

    ICMP协议

    ICMP工作流程

    1)功能

    • 确认IP包是否成功到达目标地址
    • 通知在发送过程中IP包被丢弃的原因
    • ICMP基于IP协议工作的,但是它并不是传输层的功能;ICMP只能搭配IPv4使用,如果是IPv6的情况下,需要是用ICMPv6。

    2)报文

    • ICMP报文分为两类:一类是通知出错原因,一类是用于诊断查询。

    NAT技术

    1)是什么

    • NAT能够将私有IP对外通信时转为全局IP;
    • 在一个局域网内,如果有多个主机都访问同一个外网服务器,那么对于服务器返回的数据中,目的IP都是相同的;此时,NAT路由器无法判定将这个数据包转发给哪个局域网的主机,这时候NAPT使用IP+port来建立这个关联关系,这种关联关系也是由NAT路由器自动维护的。

    2)缺陷

    • 无法从NAT外部向内部服务器建立连接;
    • 转换表的生成和销毁都需要额外开销;
    • 通信过程中一旦NAT设备异常, 所有的TCP连接也都会断开。

    3)NAT和代理服务器的的区别

    • 从应用上讲,NAT设备是网络基础设备之一,解决的是IP不足的问题;代理服务器更贴近具体应用 比如通过代理服务器进行翻墙;
    • 从底层实现上讲,NAT工作在网络层,直接对IP地址进行替换;代理服务器往往工作在应用层;
    • 从使用范围上讲,NAT一般在局域网的出口部署;代理服务器可以在局域网做,也可以在广域网做,也可以跨网;
    • 从部署位置上看,NAT一般集成在防火墙、路由器等硬件设备上;代理服务器则是一个软件程序,需要部署在服务器上。
    • 广域网中的代理-----翻墙;局域网中的代理-----负载均衡。
  • 相关阅读:
    (七)什么是Vite——vite优劣势、命令
    方程、等式、函数
    electron打包前端项目
    iOS16 中的 3 种新字体宽度样式
    【2022年中总结】我走得很慢,但我从不后退
    【探索排序算法的魅力:优化、性能与实用技巧】
    vue-cli + APIcloud
    gitlab-runner 中的 Docker-in-Docker
    跟李沐学AI-深度学习课程05线性代数
    react跳转传参方式
  • 原文地址:https://blog.csdn.net/Darling_sheeps/article/details/127578155