IP

基本认识

IP 在 TCP/IP 参考模型中处于第三层,也就是⽹络层。

⽹络层的主要作⽤是:实现主机与主机之间的通信,也叫点对点(end to end)通信。

IP的作用就是在复杂的网络环境中将数据包发送给最终的目的主机。

MAC 的作⽤则是实现「直连」的两个设备之间通信,⽽ IP 则负责在「没有直连」的两个⽹络之间进⾏通信输。

源IP地址和⽬标IP地址在传输过程中是不会变化的,只有源 MAC 地址和⽬标MAC ⼀直在变化。

IP地址

IP 地址(IPv4 地址)由 32 位正整数来表示,IP 地址在计算机是以⼆进制的⽅式处理的。

⽽⼈类为了⽅便记忆采⽤了点分⼗进制的标记⽅式,也就是将 32 位 IP 地址以每 8 位为组,共分为 4 组,以「 . 」隔开,再将每组转换成⼗进制。

实际上,IP 地址并不是根据主机台数来配置的,⽽是以⽹卡。像服务器、路由器等设备都是有 2 个以上的⽹卡,也就是它们会有 2 个以上的 IP 地址。

IP 地址的分类


有两个 IP 是特殊的,分别是主机号全为 1 和 全为 0 地址。

  • 主机号全为 1 指定某个⽹络下的所有主机,⽤于⼴播吗,⼴播地址⽤于在同⼀个链路中相互连接的主机之间发送数据包。

    (在本⽹络内⼴播的叫做本地⼴播。在不同⽹络之间的⼴播叫做直接⼴播。)

  • 主机号全为 0 指定某个⽹络

多播⽤于将包发送给特定组内的所有主机。

IP 分类的优点&缺点

分类地址的优点就是简单明了、选路(基于⽹络地址)简单。

  • 同⼀⽹络下没有地址层次,缺少地址的灵活性。

  • 不能很好的与现实⽹络匹配。

这两个缺点,都可以在 CIDR ⽆分类地址解决。

这种⽅式不再有分类地址的概念,32 ⽐特的 IP 地址被划分为两部分,前⾯是⽹络号,后⾯是主机号

形式 a.b.c.d/x ,其中 /x 表示前 x 位属于⽹络号, x 的范围是 0 ~ 32 ,这就使得 IP 地址更加具有灵活

性。

还有另⼀种划分⽹络号与主机号形式,那就是⼦⽹掩码,掩码的意思就是掩盖掉主机号,剩余的就是⽹络号。

将⼦⽹掩码和 IP 地址按位计算 AND,就可得到⽹络号。

为什么要分离⽹络号和主机号?

因为两台计算机要通讯,⾸先要判断是否处于同⼀个⼴播域内,即⽹络地址是否相同。

如果⽹络地址相同,表明接受⽅在本⽹络上,那么可以把数据包直接发送到⽬标主机。

路由器寻址⼯作中,也就是通过这样的⽅式来找到对应的⽹络号的,进⽽把数据包转发给对应的⽹络内。

怎么进⾏⼦⽹划分?

在上⾯我们知道可以通过⼦⽹掩码划分出⽹络号和主机号,那实际上⼦⽹掩码还有⼀个作⽤,那就是划分⼦⽹。

⼦⽹划分实际上是将主机地址分为两个部分:⼦⽹⽹络地址和⼦⽹主机地址

  • 未做⼦⽹划分的 ip 地址:⽹络地址+主机地址
  • 做⼦⽹划分后的 ip 地址:⽹络地址+(⼦⽹⽹络地址+⼦⽹主机地址)

公有 IP 地址与私有 IP 地址

公有 IP 地址由谁管理呢?

IANA 是 ICANN 的其中⼀个机构,它负责分配互联⽹ IP 地址,是按州的⽅式层层分配。

IP 地址与路由控制

IP地址的⽹络地址这⼀部分是⽤于进⾏路由控制。

在发送 IP 包时,⾸先要确定 IP 包⾸部中的⽬标地址,再从路由控制表中找到与该地址具有相同⽹络地址的录,

根据该记录将 IP 包转发给相应的下⼀个路由器。

如果路由控制表中存在多条相同⽹络地址的记录,就选择相同位数最多的⽹络地址,也就是最⻓匹配。

环回地址是不会流向⽹络

环回地址是在同⼀台计算机上的程序之间进⾏⽹络通信时所使⽤的⼀个默认地址。

计算机使⽤⼀个特殊的 IP 地址 127.0.0.1 作为环回地址。

与该地址具有相同意义的是⼀个叫做 localhost 的主机名。使⽤这个 IP 或主机名时,数据包不会流向⽹络。

IP 分⽚与重组

每种数据链路的最⼤传输单元 MTU 都是不相同的,

如 FDDI 数据链路 MTU 4352、以太⽹的 MTU 是 1500 字节等。

其中,我们最常⻅数据链路是以太⽹,它的 MTU 是 1500 字节。

那么当 IP 数据包⼤⼩⼤于 MTU 时, IP 数据包就会被分⽚。

经过分⽚之后的 IP 数据报在被重组的时候,只能由⽬标主机进⾏,路由器是不会进⾏重组的。

在分⽚传输中,⼀旦某个分⽚丢失,则会造成整个 IP 数据报作废,

所以 TCP 引⼊了 MSS 也就是在 TCP 层进⾏分⽚不由 IP 层分⽚,

那么对于 UDP 我们尽量不要发送⼀个⼤于 MTU 的数据报⽂。

IPv6 基本认识

IPv6 的地址是 128 位的,这可分配的地址数量是⼤的惊⼈,

说个段⼦ IPv6 可以保证地球上的每粒沙⼦都能被分配到⼀个 IP 地址。

IPv6 的亮点

  • IPv6 可⾃动配置,即使没有 DHCP 服务器也可以实现⾃动分配IP地址,真是便捷到即插即⽤啊。

  • IPv6 包头包⾸部⻓度采⽤固定的值 40 字节,

    去掉了包头校验和,简化了⾸部结构,减轻了路由器负荷,⼤⼤提⾼了传输的性能。

  • IPv6 有应对伪造 IP 地址的⽹络安全功能以及防⽌线路窃听的功能,⼤⼤提升了安全性。

IPv6 地址的结构

  • 在同⼀链路单播通信,不经过路由器,可以使⽤链路本地单播地址,IPv4 没有此类型
  • 在内⽹⾥单播通信,可以使⽤唯⼀本地地址,相当于 IPv4 的私有 IP
  • 在互联⽹通信,可以使⽤全局单播地址,相当于 IPv4 的公有 IP

IPv4 ⾸部与 IPv6 ⾸部

  • 取消了⾸部校验和字段。 因为在数据链路层和传输层都会校验,因此 IPv6 直接取消了 IP 的校验。

  • 取消了分⽚/重新组装相关字段。 分⽚与重组是耗时的过程,IPv6 不允许在中间路由器进⾏分⽚与重组,

    这种操作只能在源与⽬标主机,这将⼤⼤提⾼了路由器转发的速度。

  • 取消选项字段。 选项字段不再是标准 IP ⾸部的⼀部分了,但它并没有消失,

    ⽽是可能出现在 IPv6 ⾸部中的「下⼀个⾸部」指出的位置上。

    删除该选项字段使的 IPv6 的⾸部成为固定⻓度的 40 字节。

IP协议

  • DNS 域名解析
  • ARP 与 RARP 协议
  • DHCP 动态获取 IP 地址
  • NAT ⽹络地址转换
  • ICMP 互联⽹控制报⽂协议
  • IGMP 因特⽹组管理协

DNS

DNS 中的域名都是⽤句点来分隔的,⽐如 www.server.com ,这⾥的句点代表了不同层次之间的界限。

在域名中,越靠右的位置表示其层级越⾼。

详细看:https://www.cnblogs.com/zwtblog/p/15267809.html#dns-域名解析

ARP

地址解析协议,即ARP(Address Resolution Protocol)

详细看 :https://www.cnblogs.com/zwtblog/p/15267809.html#如何获取对⽅的-mac-地址呢?

RARP 协议

ARP 协议是已知 IP 地址求 MAC 地址,那 RARP 协议正好相反,它是已知 MAC 地址求 IP 地址

通常这需要架设⼀台 RARP 服务器,在这个服务器上注册设备的 MAC 地址及其 IP 地址。

然后再将这个设备接⼊到⽹络:

DHCP

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)

我们的电脑通常都是通过 DHCP 动态获取 IP 地址,⼤⼤省去了配 IP 信息繁琐的过程。

DHCP 客户端进程监听的是 68 端⼝号,DHCP 服务端进程监听的是 67 端⼝号。

DHCP 交互中,全程都是使⽤ UDP ⼴播通信。

如果 DHCP 服务器和客户端不是在同⼀个局域⽹内,路由器⼜不会转发⼴播包

DHCP 中继代理

有了 DHCP 中继代理以后,对不同⽹段的 IP 地址分配也可以由⼀个 DHCP 服务器统⼀进⾏管理。

NAT

IPv4 的地址是⾮常紧缺的,在前⾯我们也提到可以通过⽆分类地址来减缓 IPv4 地址耗尽的速度,

但是互联⽹的⽤户增速是⾮常惊⼈的,所以 IPv4 地址依然有被耗尽的危险。

于是,提出了⼀种⽹络地址转换 NAT 的⽅法,再次缓解了 IPv4 地址耗尽的问题。

简单的来说 NAT 就是同个公司、家庭、教室内的主机对外部通信时,把私有 IP 地址转换成公有 IP 地址。

普通的 NAT 转换没什么意义。

由于绝⼤多数的⽹络应⽤都是使⽤传输层协议 TCP 或 UDP 来传输数据的。

因此,可以把 IP 地址 + 端⼝号⼀起进⾏转换。

这样,就⽤⼀个全球 IP 地址就可以了,这种转换技术就叫⽹络地址与端⼝转换 NAPT。

两个私有 IP 地址都转换 IP 地址为公有地址 120.229.175.121,但是以不同的端⼝号作为区分。

⽣成⼀个 NAPT 路由器的转换表,就可以正确地转换地址跟端⼝的组合,

令客户端 A、B 能同时与服务器之间进⾏通信。这种转换表在 NAT 路由器上⾃动⽣成。

例如,在 TCP 的情况下,

建⽴ TCP 连接⾸次握⼿时的 SYN 包⼀经发出,就会⽣成这个表。

⽽后⼜随着收到关闭连接时发出 FIN 包的确认应答从表中被删除。

缺点

由于 NAT/NAPT 都依赖于⾃⼰的转换表,因此会有以下的问题:

  • 外部⽆法主动与 NAT 内部服务器建⽴连接,因为 NAPT 转换表没有转换记录。
  • 转换表的⽣成与转换操作都会产⽣性能开销。
  • 通信过程中,如果 NAT 路由器重启了,所有的 TCP 连接都将被重置。

如何解决 NAT 潜在的问题

第⼀种就是改⽤ IPv6

IPv6 可⽤范围⾮常⼤,以⾄于每台设备都可以配置⼀个公有 IP 地址,就不搞那么多花⾥胡哨的地址转换了。

第⼆种 NAT 穿透技术

客户端主动从 NAT 设备获取公有 IP 地址,然后⾃⼰建⽴端⼝映射条⽬,然后⽤这个条⽬对外通信,就不需要 NAT 设备来进⾏转换了。

ICMP

ICMP 全称是 Internet Control Message Protocol,也就是互联⽹控制报⽂协议。

ICMP 主要的功能包括:确认 IP 包是否成功送达⽬标地址、报告发送过程中 IP 包被废弃的原因和改善网络设置等。

ICMP 类型

  • ⼀类是⽤于诊断的查询消息,也就是「查询报⽂类型」
  • 另⼀类是通知出错原因的错误消息,也就是「差错报⽂类型」

IGMP

IGMP协议(Internet Group Management Protocol)

组播地址,也就是 D 类地址,既然是组播,那就说明是只有⼀组的主机能收到数据包,

不在⼀组的主机不能收到数组包,怎么管理是否是在⼀组呢?那么,就需要 IGMP 协议了。

IGMP 是因特⽹组管理协议,⼯作在主机(组播成员)和最后⼀跳路由之间

IGMP ⼯作机制

IGMP 分为了三个版本分别是,IGMPv1、IGMPv2、IGMPv3。

IGMPv2 作为例⼦:说说常规查询与响应和离开组播组这两个⼯作机制。


PING

IP协议的助⼿-ICMP 协议

ping-查询报⽂类型的使⽤

最简单的,同⼀个局域⽹⾥⾯的情况

traceroute-差错报⽂类型的使⽤

traceroute 作⽤一

traceroute 的第⼀个作⽤就是故意设置特殊的 TTL,来追踪去往⽬的地时沿途经过的路由器。

traceroute 的参数指向某个⽬的 IP 地址:traceroute 192.168.1.100

如何⼯作

它的原理就是利⽤ IP 包的⽣存期限 从 1 开始按照顺序递增的同时发送 UDP 包,强制接收 ICMP 超时消息的⼀种⽅法。

⽐如,将 TTL 设置 为 1 ,则遇到第⼀个路由器,就牺牲了,接着返回 ICMP 差错报⽂⽹络包,类型是时间超时。

接下来将 TTL 设置为 2 ,第⼀个路由器过了,遇到第⼆个路由器也牺牲了,也同时返回了 ICMP 差错报⽂数据包,如此往复,直到到达⽬的主机。

这样的过程,traceroute 就可以拿到了所有的路由器 IP。

当然有的路由器根本就不会返回这个 ICMP,所以对于有的公⽹地址,是看不到中间经过的路由的。

送⽅如何知道发出的 UDP 包是否到达了⽬的主机呢?

traceroute 在发送 UDP 包时,会填⼊⼀个不可能的端⼝号值作为 UDP ⽬标端⼝号(⼤于 3000 )。

当⽬的主机,收到 UDP 包后,会返回 ICMP 差错报⽂消息,但这个差错报⽂消息的类型是「端⼝不可达」。

所以,当差错报⽂类型是端⼝不可达时,说明发送⽅发出的 UDP 包到达了⽬的主机。

traceroute 作⽤⼆

traceroute 还有⼀个作⽤是故意设置不分⽚,从⽽确定路径的 MTU。

这样做的⽬的是为了路径MTU发现。

因为有的时候我们并不知道路由器的 MTU ⼤⼩,以太⽹的数据链路上的 MTU 通常是 1500 字节,但是⾮以外⽹的 MTU 值就不⼀样了,所以我们要知道 MTU 的⼤⼩,从⽽控制发送的包⼤⼩。

参考:图解网络

我这里只是一个自己的学习笔记,大家有兴趣一定去看原文!!! 谢谢大家的阅读!!

大家有兴趣一定去看原文,这只是我自己的一个笔记总结!!

大家有兴趣一定去看原文,这只是我自己的一个笔记总结!!

大家有兴趣一定去看原文,这只是我自己的一个笔记总结!!

计算机网络-IP篇的更多相关文章

  1. 计算机网络-HTTP篇

    目录 计算机网络-HTTP篇 HTTP的一些问题 HTTP 基本概念 常见状态码 常见字段 Get 与 Post HTTP 特性 HTTP(1.1) HTTP/1.1 HTTPS 与 HTTP HTT ...

  2. 计算机网络: IP地址,子网掩码,默认网关,DNS服务器详解

    楔子: 以Windows系统中IP地址设置界面为参考(如图1), IP地址, 子网掩码, 默认网关 和 DNS服务器, 这些都是什么意思呢? 学习IP地址的相关知识时还会遇到网络地址,广播地址,子网等 ...

  3. 计算机网络 - IP和端口

    计算机网络分层模型 OSI分层模型:物理层.数据链路层.网络层.传输层.会话层.表示层.应用层: TCP/IP分层模型:物理+数据链路层.网络层.传输层.应用层: IP地址 IP地址是一个32位的整数 ...

  4. 计算机网络: IP地址,子网掩码,网段表示法,默认网关,DNS服务器详解

    楔子: 以Windows系统中IP地址设置界面为参考(如图1), IP地址, 子网掩码, 默认网关 和 DNS服务器, 这些都是什么意思呢? 学习IP地址的相关知识时还会遇到网络地址,广播地址,子网等 ...

  5. c++ 实时通信系统(基础知识TCP/IP篇)

    编写前的基础知识 C/S结构: C/S是Client/Server,即客户端/服务器端架构,一种典型的两层架构.客户端包含一个或多个在用户的电脑上运行的程序服务器端有两种,一种是数据库服务器端,客户端 ...

  6. 计算机网络-TCP篇

    TCP篇 之前的总结文章:TCP简单版本介绍-三次握手等 基本认识 TCP 是⾯向连接的(⼀定是「⼀对⼀」才能连接).可靠的.基于字节流的传输层通信协议. RFC 793 是如何定义「连接」的:⽤于保 ...

  7. 计算机网络ip地址

    ip地址组成 IP地址 = 网络地址 + 主机地址(又称:主机号和网络号组成) 我们通常将网络也可以分为很多的子网络,每个子网络有自己的网络地址,每个子网络由很多的计算机组成(当然也可以包含另外一个子 ...

  8. 计算机网络 --- IP 地址

    概述 这一节主要了解网络中有关ip的知识,包括子网掩码等等,还有 ipv6的生成规则等等. 基本的ip结构 分类寻址 主要分为 ABCDE ,由两部分组成,网络号 + 主机号 . 可以看到 A 和 C ...

  9. 计算机网络基础篇-ppp协议

    所谓的PPP协议是点对点协议,是目前使用最广泛的数据链路层的协议.大部分用户使用电话线拨号入网的,从用户计算机到ISP的链路所使用的数据链路层协议就是PPP协议. 首先介绍下拨号入网的过程.因特网服务 ...

随机推荐

  1. StringBuffer类(增删改查及长度可变原理)

    1 package cn.itcast.p2.stringbuffer.demo; 2 3 public class StringBufferDemo { 4 5 public static void ...

  2. expect.sh

    #!/usr/bin/expect spawn /usr/bin/ssh root@192.168.43.43 -p 22 expect "password:" send &quo ...

  3. el表达式中的${param}用法

    el表达式中的${param}? 1. 2. ${param.name} 等价于 request.getParamter("name"),这两种方法一般用于服务器从页面或者客户端获 ...

  4. Java-在数组中遍历出最值

    在操作数组时,经常需要获取数组中元素的最值. 代码 public class Example31{ public static void main(String[] args){ int[] arr= ...

  5. Git起始操作之设置全局用户名和Email地址

    引自:廖雪峰老师的Git教程 因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址.你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无 ...

  6. linux下使用openssl生成 csr crt CA证书

    证书文件生成:一.服务器端1.生成服务器端    私钥(key文件);openssl genrsa -des3 -out server.key 1024运行时会提示输入密码,此密码用于加密key文件( ...

  7. C语言之清空缓存区

    感谢大佬:https://blog.csdn.net/qq_26768741/article/details/50933598 在C语言中,我们常常需要去清空缓存区,对于缓存区清空的重要性,接下来我们 ...

  8. HOOK API(二) —— HOOK自己程序的 MessageBox

    转载来源:https://www.cnblogs.com/hookjc/ 0x00 前言 以下将给出一个简单的例子,作为HOOK API的入门.这里是HOOK 自己程序的MessageBox,即将自己 ...

  9. OC和C对比

    1.源文件对比 C语言中常见源文件.h头文件,.c文件 文件扩展名 源类型 .h 头文件,用于存放函数声明 .c C语言源文件,用于实现头文件中声明的方法 OC中的源文件.h头文件,.m与.mm的实现 ...

  10. Shell数组以及排序算法(冒泡、直接选择、反转)

    Shell数组以及排序算法(冒泡.直接选择.反转) 目录 Shell数组以及排序算法(冒泡.直接选择.反转) 一.数组概述 1. 数组的定义 2. 下标的定义 3. 数组的特点 4. 数组定义的方法 ...