IP 协议简介

网络层


IP 协议属于网络协议栈的网络层。这一层的功能目标是将数据包从网络的一个位置传送到另一个位置,算是处理端到端传输的最底层。传输过程中间会经过许多跳(hop)中间路由器,因此路由算法是其设计的核心任务。(但很可惜不是本篇的核心任务)

隧道


当两个相同的网络被一个不同的网络隔开时,隧道就是一种跨协议通信的便利方法。即把 A 网络的数据包整个包成一个 B 网络的数据包,然后在 B 网络中传输,到达目的地后再取出来得到一个 A 网络数据包。

这种构建于基础网络上的一个新网络就称为覆盖(overlay),这是逐步部署新型网络的一个有效方法,比如在 IPv4 上构建 IPv6 网络。

IPv4


IPv4 的头就是下图这个样子,具体每个字段的作用就不说了。

值得注意的是它的源地址和目标地址的长度是 32 位,现在大家都知道这个长度不够用了。而其实 IP 地址在分配效率上也有问题,以至于实际情况比理论上更糟。

子网

因为 IP 协议主要解决的问题是网络间互联,以及考虑到网络间路由的复杂性。把 IP 地址分层是一种较好的处理方法。即一个 32 位的 IP 地址,有前 N 位来标识一个网络(子网),后 32-N 位来标识属于这个网络内的主机。这样路由器在转发数据包时,只考虑 N 位前缀就可以了,这样能大幅减少路由表的大小。想象一下 8.8.8.88.8.8.7 如果一个在美国一个在中国那路由器都要疯了。

而且这个 N 的值还可以是动态的,这个 N 的写法可以写作 /16 表示前 16 位是网络段,后 16 位是主机段。更一般的写法是写成 32 位的子网掩码的格式。比如 /16 等于 255.255.0.0 的子网掩码。

可以看出子网掩码造成了一种复用 IP 地址的可能性。即对于同一个 IP 地址,不同的子网掩码可以标记不同的网络端点。但因为子网掩码只是路由协议的一部分(可以看上面的 IP 头,并不含有子网掩码),以及其可能比简单增加 IP 地址位数带来更大的复杂性(我没算,猜的),这种复用技术并没有被用来增加公网上的可用 IP 地址。

分类寻址(classful addressing) 和 CIDR

很多人可能听说过公网 IP 地址有 A、B、C 三类之分。这其实就是子网按不同大小前缀划分的一种方法。如下图:

可以看到这种划分方式的主要缺点是网络地址和主机地址的划分太不合理了,对多数组织机构而言,B 类地址太大而 C 类太小(包含的主机数太少)。因此 CIDR - classless inter domain routing 无类域间路由被实际使用着。因为又回到了路由算法的范畴,这里略过。

NAT

那么这么少的公网 IP 到底是如何支撑起现在这么多的上网用户的呢?很多人可能想到了答案就在家里的路由器上。因为造成实际网络开放的就是它。

Network Address Translation 网络地址转换就是干这事的。这个功能存在于每个家用路由器里,他负责把用户数据包的 IP 地址从内网 IP 如(192.168.1.101)转换为一个合法的公网 IP,通过篡改 IP 数据包的方式。

这里的主要问题是,因为内网 IP 和 外网 IP 是个 多对一 的关系,所以转过去容易,转回来难。那么路由器在接收到来自外网的数据包时,如何决定把包头替换成哪个内网 IP 呢?答案是一个比较糟糕的方法。因为网络层的更上一层 - 传输层的两种主流协议,TCP 和 UDP 占据了传输层绝大部分流量,而这两种协议的头都具有一个标识源端口和目标端口的字段(用以标记连接对象的具体进程,或者说端口)。然后 NAT 就把这个端口号给替换掉了,换成了自己一个映射表里的键。然后在接收到外网数据包时,再通过这个数据包里的 TCP 端口号在映射表里查询到内网主机的 IP 和 真正 TCP 端口号,并替换回来。

显然这样做违反了网络协议栈的分层原则,并且依赖于传输层必须使用某些协议。但在 IPv6 普及之前,NAT 工作的效果还算好。

这种依赖很可能也是 TCP/IP 总被放在一起的原因。

IPv6


简单说,IPv6 和 IPv4 和区别在于拥有一个 128 位的地址,以及去掉了校验和,以及其他。

因为隧道的使用,IPv6 在部署上可以非常灵活,按需配置。因此 IPv6 普及的关键可能在于特定需求得到市场的广泛认可。

时间: 2024-10-08 22:18:07

IP 协议简介的相关文章

TCP/IP协议简介(二) 之 链路层介绍

链路层介绍 一.简介 上一节已经介绍过,网络层协议的数据单元是 IP 数据报 ,而数据链路层的工作就是把网络层交下来的 IP 数据报 封装为 帧(frame)发送到链路上,以及把接收到的帧中的数据取出并上交给网络层. 为达到这一目的,数据链路必须具备一系列相应的功能,主要有: 将数据封装为帧(frame),帧是数据链路层的传送单位: 控制帧的传输,包括处理传输差错,调节发送速率与接收方相匹配: 在两个网络实体之间提供数据链路通路的建立.维持和释放的管理. 数据帧的结构是这样的: 二.控制帧的传输

TCP/IP协议简介(三) 之 网络层

IP 网际协议 IP 协议位于网络层,它是 TCP/IP 协议族中最为核心的协议,所有的 TCP.UDP.ICMP 及 IGMP 数据都以 IP 数据报格式传输.IP 协议提供的是 不可靠 . 无连接 的数据报传送服务. 不可靠(unreliable):IP 协议不能保证数据报能成功地到达目的地,它仅提供传输服务.当发生某种错误时,IP 协议会丢弃该数据报.传输的可靠性全由上层协议来提供. 无连接(connectionless):IP 协议对每个数据报的处理是相互独立的.这也说明, IP 数据报

【精】TCP/IP协议简介(一) 之 TCP/IP简介

一.TCP/IP 背景和介绍 上世纪 70 年代,随着计算机技术的发展,计算机使用者意识到:要想发挥计算机更大的作用,就要将世界各地的计算机连接起来.但是简单的连接是远远不够的,因为计算机之间无法沟通.因此设计一种通用的"语言"来交流是必要可少的,这时 TCP/IP 协议就应运而生了.本文地址:http://blog.csdn.net/sunansheng/article/details/52054632 TCP/IP(Transmission Control Protocol/Int

TCP/IP协议简介

计算机网络是什么? 简单地理解,计算机网络的任务就是传输数据.为了完成这一复杂的任务,国际标准化组织ISO提供了OSI参考模型,这种模型把互联网网络氛围7层,分别是物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.每个曾有明确的分工,并且在层与层之间,下层为上层提供服务.这种分层的思想简化了网络系统的设计过程,例如在设计应用层时候只需要考虑创建满足用户实际需求的应用:在设计传输层时,只需要考虑如何在两个主机之间传输数据:在设计网络层时,只需要考虑如何在网络上找到一条发送数据的路径,即路

网络编程的基本概念,TCP/IP协议简介

8.1.1 网络基础知识 计算机网络形式多样,内容繁杂.网络上的计算机要互相通信,必须遵循一定的协议.目前使用最广泛的网络协议是Internet上所使用的TCP/IP协议. 网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯.网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输.在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机.而TCP层则提供面向应

【精】TCP/IP协议简介(四) 之 传输层UDP&TCP

传输层:UDP 协议 一.传输层协议 从之前介绍的网络层协议来看,通信的两端是两台主机,IP 数据报首部就标明了这两台主机的 IP 地址.但是从传输层来看,是发送方主机中的一个进程与接收方主机中的一个进程在交换数据,因此,严格地讲,通信双方不是主机,而是主机中的进程. 主机中常常有多个应用进程同时在与外部通信(比如你的浏览器和 QQ 在同时运行),下图中,A 主机的 AP1 进程在于 B 主机的 AP3 进程通信,同时主机 A 的 AP2 进程也在与 B 主机的 AP4 进程通信. 两个主机的传

TCP/IP协议简介(五) 之 应用层

应用层协议 在传输层之上,便是应用层.传输层的 UDP 报文和 TCP 报文段的数据部分就是应用层交付的数据. 不同类型的网络应用有不同的通信规则,因此应用层协议是多种多样的,比如 DNS.FTP.Telnet.SMTP.HTTP.RIP.NFS 等协议都是用于解决其各自的一类问题. 本节实验,介绍 DNS.FTP.HTTP 三个常用的应用层协议. 一.DNS DNS (Domain Name Service 域名服务) 协议基于 UDP,使用端口号 53. 由数字组成的 IP 地址很难记忆,所

OSI七层网络模型与TCP/IP协议

OSI(Open System Interconnection)是一个开放性的通行系统互连参考模型,他是一个定义的非常好的协议规范,共包含七层协议.OSI七层协议是由ISO (International Standards Organization)在1978年为网络通信制定的.但是,OSI七层模型是一个[理论模型],实际应用则千变万化,因此更多把它作为分析.评判各种网络技术的依据:对大多数应用来说,只将它的协议族(即协议堆栈)与七层模型作大致的对应,看看实际用到的特定协议是属于七层中某个子层,

TCP/IP篇--各协议简介

--百家菜 在学习网络方面的知识过程中,不可避免地要接触到各种协议,对于一开始接触协议的我们来说对于协议实在没有太多的概念和接触,如果你也是这样,那么博主的这一篇博文可能给你一些关于协议的概念.其中的部分介绍为博主自己总结而出,如有欠缺不当的地方,欢迎通过发表评论或线下交流的方式斧正. 关于协议数据的具体格式和数字表示可上网(百度等网站)或者抓包(抓包方式详细见博主的相关博文-<抓包篇--wireshark使用!>,链接http://powersource.blog.51cto.com/113