加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 运营中心 > 网站设计 > 教程 > 正文

通俗易懂网络协议(IP)

发布时间:2019-06-20 09:03:29 所属栏目:教程 来源:我不想种地
导读:副标题#e# 之前写过一篇《通俗易懂TCP/IP(概述)》,广受欢迎和好评,有网友催更,便抽空续写IP章节,回应粉丝期待。 TCP/IP网络模型 TCP/IP网络模型分为4层,自下而上分布为链路层(又叫网络接口层)、网络层、传输层、应用层。 链路层:处理数据在媒介上的表

Socket抽象层位于应用层跟传输层之间,提供创建、绑定、监听、连接、发送、接收、关闭等常用方法。

通俗易懂网络协议(IP)

Internet协议

IP是TCP/IP协议族中的核心协议,为传输层提供IP数据报的交付能力,它负责将IP数据报从网络一端传递到另一端,实现数据转发。

IP的另一个作用是:在发送端,接收来自传输层的协议数据单元(PDU),添加IP首部封装为IP数据报,交给协议族的下一层链路层。

在接收端(包括中间路由器),接收来自链路层的PDU,去掉IP首部,根据IP首部中的协议类型,将数据分发给TCP、UDP或者其他。

IP只是完成分组交换(转发),如果你希望得到可靠性保证,IP会说:对不起,做不了。

发送一个IP数据报犹如寄一个快递,只需把目的地收件人写在快递上,快递公司会路由分发,但中间有可能丢件,丢了不管,而且到了,也不会有确认,一切随缘。

基于TCP/IP协议族构建的网络,可以区分为端系统(两边的主机)和中间系统(中间路由器),端主机实现网络所有层,而路由器实现传输层之下的所有层,IP使用逐跳协议,IP之上的各层使用端到端协议。

路由器

路由器工作于网络层,是IP层的核心设备。

路由器有两个或两个以上的网络接口,用于连接两个或多个网络,负责将IP数据报(分组)从一个网络接口转发到另一个网络接口。

带有多网络接口(网卡)的主机也能承担转发分组的功能,这种主机称为作为路由器使用的主机。

通俗易懂网络协议(IP)

如果把一个村庄比喻成一个小的局域网,那路由器就相当于连接村庄的桥梁,路由器属于中间系统,所以连接不同网络的路由器需要实现不同的链路层协议,完成不同链路层的翻译转换功能。

另一方面,路由器实现链路层+网络层这2层就够了,而不必实现传输层和应用层,这是由它的功能(实现分组交换)决定的。

每个IP分组都是一个IP数据报,包含发送方和接收方的第三层地址(IP地址),即32位的IPv4或128位的IPv6,IP数据报首部中的目的地址决定将该数据报发往何处,而做出决定和发送数据报到下一跳的过程叫转发,转发依赖于路由表,是存储于内存中的一个数据结构。

IP协议格式

在贴出IP协议格式之前,我们可以设想一下,IP协议需要包括哪些信息,这比直接上图+死记硬背要好。

根据之前封装的描述,显然,IP数据报应该是包括IP首部+数据负载,而这个不透明的负载(Payload)来自于TCP、UDP或者其他。

所以我们讲IP数据报格式,其实就是IP首部的组成和结构,因为数据负载来自于上层,而封装的本质要求上层的数据对下层隐藏、无须解释,既然IP的Payload对于IP层透明,那自然没什么可讲的。

IP首部由各种不同用途和含义的字段组成。

因为IP分32位的IPv4和128位的IPv6,所以IP首部需要包括版本号字段用来区分这两种情况。

因为IP负责分组转发,所以IP首部应该包括目的IP地址,用于路由转发逻辑的处理,另外接收端可能需要找到该分组的来源,所以也应该包含来源IP地址。

TCP、UDP、ICMP、IGMP都通过IP数据报传输,所以在IP首部,需要包含一个协议字段,用于区分该IP数据报承载的是哪种类型的协议。

IP不纠错,但是需要检查错误,数据在传输过程中,有可能出错,导致接收到的数据跟发送的不一样,所以接收端需要有方法知道传输过程中,数据是否跟发送端一致,所以头部校验和字段也是必要的。

因为IP要处理分片和重组,所以IP首部需要包含相关信息,以支持该功能。

IP分IPv4和IPv6两种,协议格式不同,本文讲述以IPv4为主,先给一个IPv4的数据报图,不带选项的IP数据报头部为20字节。

通俗易懂网络协议(IP)

  • 版本,IP协议的第一个字段都是版本字段,这也是IPv4和IPv6唯一相同的字段,IP数据报的版本字段为4对应IPv4,为6对应IPv6,主机或者路由器可以根据版本字段,分别处理IPv4或IPv6(称为双栈)。
  • IHL,Internet头部长度,该字段为4位,表示头部(包括选项)32位字的数量,也就是说,真正的用字节表示的头部长度应该是IHL的值,再乘以4(32位=4字节),因为4位能表示的最大2进制为1111,对应十进制15,所以IPv4的首部最多60(15*4)字节。
  • DS,服务类型字段占6bit,显示控制通知(ECN)占2bit,一共8bit,该8bit用来替换了最初版本的服务类型(ToS)字段,原因是ToS其实没怎么被用。
  • 总长度字段,是IP数据报的总长度,包括首部和数据。

接下来的32位字(4字节),标识(16bit)+标志(3bit)+分片偏移(13bit)用于分片和重组逻辑。

  • TTL,生存期字段用于设置数据报可经过路由器数量的上限。超此上限的IP数据报将被丢弃。
  • 协议字段,8bit,提供多路分解功能,满足IP协议可用于携带多种(TCP、UDP、ICMP、IGMP等)协议类型的有效载荷的要求,TCP对应值17,UDP对应值为6。
  • 头部校验和字段,仅计算IPv4头部,不包括数据,数据(Payload)的校验由传输层协议去保证,校验和的含义很简单明了,在发送端根据IP头部的各位计算出一个数值,接收端根据接收到的IP头部的各位重算一个数值,如果该值等于校验和字段,那就哦了,否则,传输过程中出错了,这个IP数据报不靠谱,扔了吧。

分片和重组

链路层对可传输的帧有一个最大长度的限制,以太网对数据帧的长度上限是1500字节,链路层可传输帧的长度限制叫做最大传输单元(MTU)。

如果IP层有一个数据报要传,且数据长度比链路层的MTU还大,那么IP层就需要对该数据报分片(fragmentation),把超限的数据报切分为若干片,使得每片都小于MTU限制。

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读