IP头部信息:IP头部信息存在每个IP数据报中,指定IP通信的源端IP地址和目的端IP地址,指导IP分片和重组,以及指定部分通信行为。
IP数据包的路由和转发:IP数据报的路由和转发发生在除目标机器意外的所有主机和路由器上,它们决定数据包是否应该转发以及如何转发。
IP服务的特点IP协议是TCP/IP协议族的动力,为上层服务提供无状态,无连接,不可靠的服务。
无状态是指IP通信双方不同步传输数据的状态信息,因此所有IP数据包的发送、传输和接受都是相互独立没有上下文关系的。如果发送端的第N个IP数据报可能比第N+1个IP数据报要早到,也有可能同一个IP数据报经过不同路径多次到达接收端,由于数据报之间相互独立,没有相互的上下文关系因此无法检测出乱序和重复。
因此IP模块收到IP数据报,就将其数据部分交给上层协议,从上层协议来看这些数据就可能是乱序的、重复的。而面向连接的协议,比如TCP协议,就能够自己处理乱序的、重复的报文段,那么经过TCP协议处理后的数据对于上层协议的内容来说就绝对是有序的、正确的。
无状态服务的优点简单高效:无需为保持通信的状态而分配一些内核资源,每次传输数据也不用携带状态信息。
无连接是指双方不会长久地维持对方的任何信息,这样上层协议每次发送数据时都需要指明IP地址。
不可靠是指IP协议不能保证IP数据报都能准确到达接收端,承诺经最大努力。比如如果路由器发现某个IP数据报在网络中存活时间太长,就把他丢弃掉。接收端发现收到IP数据报不正确,也会丢弃,返回ICMP错误信息。发送端的IP模块检测到IP数据报发送失败了,就通知上层协议发送失败,不会视图重传。因此对于上层协议来说,交给IP协议发送的数据是不能可靠地保证送到目的端的。因此使用IP服务的上层协议(比如TCP协议)会自己实现数据确认,超时重传等机制来达到可靠传输的目的。
IPv4头部结构[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EBg3WuCw-1654527703470)(C:UsersacerAppDataRoamingTyporatypora-user-imagesimage-20211022155657821.png)]
版本号为IP协议的不同版本,IPv4是4,还有其他的IPv4扩展版本等等。
表示IP头部可以用多少个32bit(4字节),因此IP头部最长是60字节。
8位服务类型:
16位总长度:表示整个IP数据报的长度,以字节为单位,但是实际在以太网中传播都是以以太网帧传播,长度超过MTU的数据报都会被分片传输。
16位标识:唯一地标识主机发送的每一个数据报,数据报分片时就会被复制到每个分片中。同一个数据报的所有分片具有相同的标识值。
3位标志:
13位分片偏移:分片相对于原始IP数据报开始处的偏移。
8位生存时间:是数据报到达目的地到达目的地之前允许经过的路由器跳数。
8位协议:/etc/protocols文件定义了所有上层协议对应的protocal字段数值。
16位头部校验和:发送端填充,接收端通过CRC算法检验IP数据报头部正确性。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oWmuA1LQ-1654527703471)(C:UsersacerAppDataRoamingTyporatypora-user-imagesimage-20211022163235489.png)]
使用telnet程序自己登陆自己,用tcpdump抓取这个过程中telnet客户端程序和telnet服务器程序之间交互的数据包。
telnet客户端使用临时端口号41621与服务器通信。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g4xyMxtq-1654527703472)(C:UsersacerAppDataRoamingTyporatypora-user-imagesimage-20211022163624561.png)]
4表示使用IPv4,5表示IP头部长度为5个32位(20个字节)。004d(77个字节),数据报总长度。
f9db是数据报标识。0x4,禁止切片。0x000,分片偏移。Ox40,TTL为64。0x11,协议字段为17,使用的是UDP(书上使用的是TCP)。0x428e,IP数据报的校验和。Ox7f000035是源端地址,后面的是目的端地址。
IP分片当IP数据报长度超过帧的MTU时,会被分片传输。分片可能发生在发送端,也可能中转被分片,最后在最终目标机器上被重新组装。
IP头部中三个重要的字段给分片和重组提供了足够的信息:数据报标识,标志和片偏移。
标识表示这些分片是不是同一个IP数据报的。
标志表示这个分片是不是最后一个分片。
片偏移表示他的数据偏移量。
IP路由IP协议的一个核心任务是数据报的路由,即决定数据报到目标机器的路径。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YmPET6Il-1654527703472)(C:UsersacerAppDataRoamingTyporatypora-user-imagesimage-20211023100337961.png)]
当IP模块接受到来自数据链路层的IP数据报,首先对数据报的头部做CRC校验,确认是正确的信息。
如果设置了源站选路选项,则会调用数据报转发模块。
如果目标IP地址是本机或者是广播地址,则该报文就是发给本机的,IP模块就会根据数据报头部的协议字段决定派发给哪个上层应用(分用),如果不是发给本机的,一样会调用数据报转发。
IP数据报应该发送给哪个下一跳路由(或者目标机器),以及经过哪个网卡来发送,就是IP路由过程。
虚线箭头显示了路由表更新过程,通过路由协议或者route命令调整路由表。
路由表[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t93dmRyJ-1654527703473)(C:UsersacerAppDataRoamingTyporatypora-user-imagesimage-20211023101350284.png)]
第一项的目标地址是fault,是默认路由项,下一跳目标是网关,其地址是192.168.1.1,另外一个路由项的目标地址是192.168.1.0,指的是本地局域网,路由项的网关地址为*,是因为数据报不需要路由中专,可以直接发送到目标机器。
首先‘网关’一个大概念,不具体特指一类产品,只要连接两个不同的网络的设备都可以叫网关;而‘路由器’么一般特指能够实现路由寻找和转发的特定类产品,路由器很显然能够实现网关的功能。当然电信行业说的‘路由器’又和家用的‘路由器’两个概念,这个暂且不表。
回到题目中你说问的默认网关是什么,默认网关事实上不是一个产品而是一个网络层的概念,PC本身不具备路由寻址能力,所以PC要把所有的IP包发送到一个默认的中转地址上面进行转发,也就是默认网关。这个网关可以在路由器上,可以在三层交换机上,可以在防火墙上,可以在服务器上,所以和物理的设备无关。
1)查找路由表中和数据报的目标IP地址完全匹配的主机IP地址,如果找到就使用该路由项。(先确认是否在本地局域网)
2)查找路由表中和数据报的目标IP地址具有相同网路ID的网络IP地址。(再确认是否在已知的本地网络)
3)选择默认路由项。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cElrkfEJ-1654527703473)(C:UsersacerAppDataRoamingTyporatypora-user-imagesimage-20211023102323777.png)]
sudo route add -host 192.168.1.109 dev eth0 sudo route del -net 192.168.1.0 netmast 255.255.255.0 sudo route del default sudo route add default gw 192.168.1.109 dev eth0
第一行表示添加主机192.168.1.109(Kongming20)对应的路由项,这么设置后所有发送到laptop的数据报,如果本应该发送给Kongming的话,那么IP数据报就会通过eth0网卡直接发送至目标机器的接受网卡。第二行表示删除192.168.1.0对应的路由项,表示的是本地局域网,因此laptop将无法访问该局域网上的任何其他机器(除了Kongming20)。第3行删除默认路由选项后将无法访问因特网,第4行重新设置了默认路由器选项,不过这次网关是Kongming20(是一台机器而不是直接访问因特网的路由器)。
IP转发路由器都能执行数据报的转发操作,而主机一般只发送和接受数据报。数据报转发子模块执行如下操作:
1)检查数据报头部的TTL值,如果已经是0,则丢弃该数据报。
2)查看数据报头部的严格源路由选择,如果被设置,则检测数据报目标IP是否是本机的某个IP,如果不是则发送ICMP源站选路失败给发送端。
3)如果有必要,则给源端发送一个ICMP重定向报文,告诉它一个更合理的下一跳路由器。
4)TTL–
5)处理IP头部
重定向ICMP重定向报文也能用于更新路由表,本节简要讨论ICMP重定向。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tjxDAPzx-1654527703473)(C:UsersacerAppDataRoamingTyporatypora-user-imagesimage-20211023104448632.png)]ICMP重定向报文数据部分含义很明确,给接收方提供如下两个信息:
引起重定向的IP数据报的源端IP地址。
应该使用的路由器IP地址。
接受主机根据这两个信息就可以断定引起重定向的IP数据报应该使用哪个路由器来转发,以此来更新路由表。一般来说主机只能接受ICMP重定向报文,而路由器只能发送ICMP重定向报文。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H1jS8Qoi-1654527703474)(C:UsersacerAppDataRoamingTyporatypora-user-imagesimage-20211023104957789.png)]
刚刚我们让laptop无法访问局部局域网(除了Kongming20),也把默认路由选项路由器删除了。因此laptop将通过Kongming20来访问因特网,
送ICMP重定向报文。
[外链图片转存中…(img-H1jS8Qoi-1654527703474)]
刚刚我们让laptop无法访问局部局域网(除了Kongming20),也把默认路由选项路由器删除了。因此laptop将通过Kongming20来访问因特网,



