图解tcp/ip中ip协议及相关技术 小结

1,300 阅读5分钟

最近兴致一起,看了一下《图解tcp/ip》,觉得特别好看,通俗易懂。遂认真观看,作此记录,若有不足,理解偏差,请多指教

功能背景

数据链路层的主要作用是在互链的同一种数据链接的节点之间进行包传递,而一旦跨越多种数据链路,就需要网络层来进行数据包传输。

因此,网络层的主要作用是实现终端节点之间的通信。

而通过背景可以了解,网络层协议和数据链路层协议的区别在于,数据链路层协议关注于在直连两个设备之间的通信,而网络层则关注于点对点,非直连设备之间的通信。

功能划分

那么我们开始想象一下,当我们关注点对点通信时,我们应该关注什么。当我们作为数据链路层的上一层的时候,我们应该兼容处理什么?我们又该如何处理在非直连设备的通信行为呢?

由此,我们功能点划分三大部分

  • ip寻址
  • 路由
  • ip分包与组包

ip寻址

首先是ip寻址,ip地址是用于在“连接到网络中的所有主机中识别出进行通信的目标地址“

ipv6出现的根本原因是为了解决IPV4地址不足的问题。顺带解决之前无法普及的ipv4的各种问题引发的各种hack处理,进行统一化。另外就是为了减轻负担,首部格式进行了调整,去掉了首部校验和字段

路由

路由控制,这是一个将分组数据全部发送到目标地址的功能

路由即为不同网络地址的ip通信所需要经历的转换。

网络在不同的数据链路是不通的,如果需要通信,需要通过路由进行转换数据链路。

而在ip的标识中,包括了网络地址和主机地址。目前主流的划分方式是通过子网掩码的方式进行划分网络地址。

路由相当于是有多个端口来接收不同的网络发送的信息,之后进行转发

ip分包与重组

不同数据链路的MTU(最大传输单元)值是不同的,因此,可能出现路由器转发之后,MTU就无法满足的传输值的情况。因此,需要在ip发送层,对传输数据进行分包,在接受层进行重组。

大体的流程是:发送一个包,遇到需要分片才能传输的情况,就直接扔弃包,通过ICMP得到MTU值,更新包的大小,不断的进行调整,最后得到MTU值,之后缓存一段时间,再进行更新。

ip层及相关的协议

按着逻辑来看,我们从发送一个请求和接收请求层面来了解网络层协议,发送请求层面我们都通过网络层进行分析

请求导向www.baidu.com,

  1. 首先通过DNS解析域名对应的ip地址。这里DNS解析也是分层进行的,一层一层进行分析,直至最终的根域名解析。
  2. 得到ip地址之后,我们还未知其mac地址。因此,在当前的数据链路层面发送ARP协议,通过广播,查看是否有进行响应的机器,如果有,就会通过广播返回,广播该ip对应的mac地址,存储mac地址并进行数据交换。如果没有,就会导向路由器,发包就会包含源地址和目标地址。
  3. 导向路由器,会区分当前是私有ip还是公有ip,如果是私有ip的话,是无法直接与外界进行通信的的,需要通过NAT路由器转换成公有ip,并形成私有ip与对应mac地址的映射表,通过公有ip进行请求。
  4. 路由器就会需要在路由表中,查看对应网络地址所需要走的数据链路,进行转发,一层一层的转发,这里引出一个TTL(Time To Live)的概念。在初始发包之前,会有一个TTL值,每转发一次路由,TTL就会减1,当TTL达到0的时候,就会停止转发,并会送一个ICMP包,通知对应的错误信息。
  5. 最后到达对应的数据链路层,找到对应mac地址的主机。进行通信。

这里的ip地址分配, 可分为静态设置和动态设置。动态设置的技术为DHCP。DHCP分配原理也分为两种,一种是初始设置好很多的ip地址,随机分配ip地址。另外一种是通过当前网络地址和主机对应mac地址来生成ip。

mobile ip

ip地址动态分配, 我们可以猜想是否有什么不妥之处?

想象一个场景,如果手机的ip地址频繁切换会怎样呢?因为手机经常切换不同的网络,如果通过动态设置ip地址的话,必然出现一种场景,源ip地址不断变化,tcp协议是面向连接的,如果源ip发生变化,必然导致通信失败。由此,引申出另一个概念——mobile ip。

mobile ip使得在子网ip发生变化的时候,主机的ip仍保持不变。工作流程为:

移动之后,通过外部代理转发数据包,来通知归属代理自己的地址。之后,发送的请求都使用归属代理发出,实际上讲请求转发到归属代理后,通过归属代理来进行。

这里有三个概念:

外部代理:用于通知归属代理主机地址发生变化(实际上这一层功能可以通过移动主机本身承担,mobile ipv6如此)

归属代理:转发数据包给移动主机

移动主机:位置变了,主机ip地址不变的移动设备