1.IP基础知识
IP协议主要作用在网络层
1)网络层与数据链路层的关系
网络层的下一层数据链路层的主要作用是互联同一种数据链路的节点之间进行包传递。而一旦跨越多种数据链路,就需要借助网络层。网络层可以跨越不同的数据链路。
Mac地址是用来标识同一个链路中不同计算机的一种识别码;
IP地址用于在连接到网络中的所有主机中识别出进行通信的目标地址。
举例说明:去一个很远的地方,我们需要坐飞机、火车、公交车,最终达到终点。机票只在特定区间有效。就好比主机A请求主机B,中间经过多个路由器,每个路由之间由特定的数据链路层处理。网络层用于指引具体下一个路由器地址,而真正传送数据的是数据链路层,缺一不可
2)路由控制
路由控制指将分组数据发送到最终目标地址的功能。
一个数据包之所以能够成功的到达最终的目标地址,全靠路由控制。
多跳路由:路由器或主机在转发IP数据包时只指定下一个路由器或主机,而不是将到最终目标地址为止的所有通路全部指定出来。因为每一个区间在转发IP包的时候都会指定下一跳的操作,直至包达到最终的目标地址。
3)数据链路的抽象化
IP是实现多个数据链路之间通信的协议。数据链路根据种类不同各有特点。对这些不同数据链路的相异特性进行抽象化也是IP的重要作用之一。
不同链路的最大区别就是:各自的最大传输单位不同。
为了解决这个问题:IP进行分片处理
4)IP面向无连接型
在发包之前,不需要建立与对端目标地址之间的连接。
采用无连接型主要原因:简化发送过程;提速
注意:为了提高可靠性,上一层的TCP采用面向有连接型
2.IP地址
在TCP/IP通信中,用IP地址识别主机和路由器,为了保证正常通信,有必要为每个设备设置正确的IP地址。
1)IP组成结构
IPv4由32位正整数表示,以二进制方式处理,每8个为一组,总共分4组,每组以.隔开,再将每组数转化为十进制。
IP地址由网络标识和主机标识两部分组成。网络标识必须保证相互连接的每个段的地址不相重复,而相同段内的主机必须具有相同的网络标识,IP地址的主机标识则不允许在同一个网段内重复
2)网络标识和主机标识的表示方式
* 192.168.128.10/24
*
192.168.128.10 子网掩码:255.255.255.0
两者同样表示:网络标识为192.168.128.0 主机标识为10
3.广播地址
广播地址用于在同一个链路中相互连接的主机之间发送数据包。
将IP地址中的主机地址全部置为1,就成了广播地址(如上一个地址的广播地址就是 192.168.128.255)
* 本地广播
在本网络内的广播
* 直接广播
在不同网络之间的广播
4.IP多播
多播用于将包发送给特定组内的所有主机。
多播相对于广播发送的优势:
* 在多播之前,人们一直使用广播来发送数据,那时广播将数据发送所有终端主机,再由这些主机IP的上一层判断是否要接收数据,否则丢弃。然而这种方式会给那些毫无关系的网络和主机带来影响,造成网咯上不必要的流量。
* 广播无法穿透路由,若想给其他网段发送数据包,则需要采取另一种机制。
由于以上原因,多播这种即可以穿透路由,又可以实现那些只给必要的组发送数据的技术就称为必选。
5.全局地址与私有地址
起初,互联网中的任何一台主机和路由器必须有一个唯一的IP地址。这种就叫做
全局地址
。
随着互联网的迅速普及,IP地址不足的问题日渐显著,于是出现了一种新的技术。它不要求为每一台主机或路由器分配一个固定的IP地址,而是在必要的时候只为相应数量的设备分配唯一的IP地址,对于那些没有连接互联网独立网络的主机,只要保证在这个网络内的地址唯一,这种地址就叫做
私有IP
。地址范围如下:
192.168.0.0-192,168.255.255 (C类)
172.16.0.0-172.31.
255.255(B类)
10.0.0.0-10.255.255.255(A类)
6.路由控制
发送数据包时仅有IP地址还不足以实现将数据包发送到对端目标地址。在数据发送中还需要类似于 指明路由器或主机的 信息,以便真正发往目标地址。
保存这种信息的就是路由控制表。
1)路由控制表的形成方式
* 静态路由控制(管理员手动设置)
* 动态路由控制(路由器与其他路由器交换信息时自动刷新)
2)IP地址与网络路由
IP地址的网络部分用于进行路由控制,下图是发送IP包的示例
路由表记录这网络地址与下一步应该发送的路由器的地址。
在发送IP包时,首先确定IP首部包中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将IP包转发给相应的下一个路由器
3)默认路由
如果一张表中包含所有的网络及其子网的信息,将会是一种浪费。默认路由是个不错的选项。
默认路由指路由表中任何一个地址都能与之匹配的记录。
默认路由一般标记为0.0.0.0/0或default,由于最后是/0,所以该路由并没有标识IP地址
4)主机路由
IP地址/32一般称为主机路由。
主机路由多用于不希望通过网路地址路由的情况
5)环回路由
在同一个主机上的程序之间进行通信所使用的一个默认地址。
计算机使用127.0.0.1作为环回地址,与该主机具有相同意义的是一个叫做localhost的主机名。在使用这个IP或主机名时,数据包不会流向网络。
7.IP分割处理与再构成处理
每种数据链路的最大传输单元(MTU)都不同(以太网一般为1500字节...)
由于IP属于网络层的上一层,它必须不受限于不同链路的MTU大小(IP最大MTU 65535字节、最小68字节)
1)IP报文的分片与重组
分片往往在网络上遇到比较大的报文无法一下子发送出去的时候才进行处理
经过分片的IP数据报在被重组的时候,只能由目标主机进行。路由器虽然会做分片但不会进行重组。
2)路径MTU发现
路径MTU是指发送端主机到接收端主机不需要进行分片时的最大MTU大小。
进行路径MTU发现后,可以避免在中途的路由器上进行分片处理,也可以在TCP中发送更大的包
8.IPv4首部
通过IP进行通信时,需要在数据的前面加入IP首部信息。
IP首部中包含着用于IP协议进行发包控制时所有的必要信息。结构如下
1)版本(version)
用于标识IP首部的版本号(IPv4即4,IPv6即6,还有其他版本),4bit构成。
2)首部长度(Internet Header Length)
表示IP首部的大小,4bit组成,单位为4字节(指明IPv4协议包头的长度的字节数包含多个少32比特
位
)
3)区分服务(TOS:Type Of Service)
表示服务类型,8bit组成
4)总长度(Total Length)
IP首部与数据部分合起来的总字节数,16bit,故IP包的最大长度为65535字节
5)标识(Identification)
用于分片重组,每一个分片的标识值相同,不同分片的标识值不同。此外,即使ID相同,如果目标地址、源地值或协议不同的话,也被认为是不同的分片。16bit
6)标志(Flags)
包被分片的相关信息。3bit
7)片偏移(FO:Fragment Offset)
分片的每一个分段相对于原始数据的位置,13bit,可以最多表示8192个相对位置
8)生存时间(TTL:Time To Live)
记录当前包在网络上应该生存的期限,以秒为单位,8bit,在实际中指可以中转多少个路由器的意思,每经过一个路由器,TTL减1,直到为0则丢弃该包
9)协议(Protocol)
表示该包的网络协议类型,8bit
10)首部校验和(Header Checksum)
用于校验数据报的头部,确认封包被准确无误的接收,16bit
11)源地址(Source Address)
发送端IP地址,32bit
12)目标地址(Destination Address)
接收端IP地址,32bit
13)可选项(Options)
长度可变,通常只在实验或诊断时使用,包含:安全级别、源路径、路径级别、时间戳
14)填充(Padding)
在有可选项的情况下,首部长度可能不是32bit的整数倍,为此,通过向字段填充0,调整为32bit的整数倍
15)数据(Data)
存入数据,将IP上层协议的首部也作为数据处理
五:IP协议相关技术
1.DNS
TCP/IP网络要求每一个互联的计算机有衣蛾唯一的IP地址,并基于这个IP地址进行通信,但是直接使用IP地址由很多不便之处,为此,出现一个叫做主机识别码的东西,这种识别方式为每台计算机赋以一个唯一的主机名,在进行网络通信时直接使用主机名而不是IP地址信息
网络的快速扩张,使得产生一个有效管理主机名和IP地址之间关系的系统,就是DNS系统。
1)域名的构成
域名是为了识别主机名称和组织机构名称的一种具有分层的名称。
例如:
www.eclipse.org
DNS分层像是一颗倒挂的树,树根为org,第二层为eclipse,叶为www
2)域名服务器
管理域名的服务器和软件。可以管理所在分层的域的相关信息。如下所示,每层都设置一个域名服务器
针对kusa.ac.jp域名,具有以上域名服务器分层
3)解析器(Resolver)
进行DNS查询的主机和软件叫做DNS解析器。
4)DNS查询
* 解析器向域名服务器进行查询处理,接收这个查询的服务器先在自己的数据库中查询,如果没有,则向上一层根域名服务器查询
* 从根开始对这颗树按照顺序进行遍历,直到查到指定的域名服务器,并由这个服务器返回想要的数据
* 将相关信息保存在缓存中,下次查询相同的域名时直接从缓存中取即可
2.ARP(Address Resolution Protocol)
ARP是一种解决地址问题的协议,以目标IP地址为线索,用来定位下一个应该接收数据分包的网络设备对应的MAC地址。
如果目标主机不在同一个链路,可通过ARP查找下一跳路由器的MAC地址。ARP只适用于IPv4
1)ARP工作机制
* 主机A为了获取主机B的MAC地址,首先通过广播发送一个ARP请求包,里面包含了B主机的IP地址
* 广播被同一个链路上所有的主机和路由器接收
* 当主机B解析该请求包后,发现自己的IP地址与包里的IP地址一致,则间自己的MAC地址塞入ARP响应包返回给主机A
3.ICMP(Internet Control Message Protocol网络控制报文协议)
ICMP用于传输出错报告控制信息,主要在主机和路由器之间传递控制信息。它是一个非常重要的协议,对于网络安全具有重要意义。
1)控制信息主要包括:
* 网络通不通
* 主机是否可达
* 路由是否可用等网络本身的消息
有了这些功能之后,就可以获得网络是否正常、设置是否有误以及设备有何异常等信息,从而便利与进行网络上的问题诊断。
2)主要的ICMP消息
ICMP消息大致分为两类:通知出错原因的错误消息;用于诊断的查询消息;
* 目标不可达消息 (IP路由器无法将IP数据包发送给目标地址时,会给发送端返回一个目标不可达信息)
* 重定向消息 (如果路由器发现了发送端主机使用了次优的路径发送数据,那么它就会返回一个重定向消息,消息包含了最合适的路由消息和源数据)
* 超时消息 (当IP包中TTL减为0的时候,该包被丢弃,IP路由器发送一个ICMP超时的消息给发送端主机,通知该包已被丢弃)
* 回送消息 (上述类型0/8,用于进行通信的主机和路由器之间,判断所发送的数据包是否已成功发送到对端)
4.DHCP(Dynamic Host Configuration Protocol)
逐一的为每一台主机设置IP是非常繁琐的事,为了实现自动设置IP管理、统一管理IP地址分配,就产生了DHCP
有了DHCP,计算机只要连接到网络,就可以进行TCP/IP通信
1)DHCP工作机制
* 架设一台DHCP服务器,将所要分配的IP地址设置到服务器上,此外还需要对应的子网掩码、路由控制信息、以及DNS服务器的地址等,都需要设置到DHCP服务器
* 从DHCP获取IP信息流程图如下
5.NAT(Network Address Translator)
用于在本地网络中使用私有地址,在连接互联网时转而使用全局IP地址的技术。
除转换IP外,还出现了可以转换TCP、UDP端口号的NAPT技术,因此可以实现一个全局IP地址与多个主机的通信。
NAT实际上是为面临地址枯竭的IPv4而开发的技术
1)NAT工作机制
当客户端A想与服务器进行通信时,NAT路由器将客户端A的地址转换为202.244.174.37再发送数据
同样,数据返回时,需要先将
202.244.174.37转换为私有地址10.0.0.10后再进行通信
注意:在NAT的内部,有一张自动生成的用来转换地址的表
当私有地址的多台机器同时要与外部进行通信时,仅仅转换IP是不够的,需要包含端口号一起进行转换,如下图所示
6.IP隧道
当使用IPv4想与使用IPv6的网络进行通信时,就需要使用IP隧道
IP隧道可以将从从网络A(IPv6)发过来的包统合为一个数据,然后再追加一个IPv4首部,就可以转发给网络B(IPv4)
六:TCP与UDP
TCP/IP中有两个具有代表性的传输层协议,TCP和UDP。TCP提供可靠的通信传输,而UDP常被用于让广播和细节控制交给应用的通信传输。
1.传输层
IP首部有一个协议字段,用来标识网络层的上一层所采用的是哪一种传输层协议。根据这个字段的协议号,就可以IP传输的数据部分究竟是TCP的内容还是UDP的内容
同样,传输层的TCP和UDP,为了识别自己所传输的数据部分应该发给哪个应用,也设定了这样一个编号。
2.端口号
MAC地址:用来识别同一链路中不同的计算机
IP地址:用来识别TCP/IP网络中互联的主机和路由器
端口号:用来识别同一台机器中进行通信的不同应用程序
1)通过IP地址、端口号、协议号进行通信识别
TCP/IP或UDP/IP通信中,采用5个信息来识别一个通信。
分别是:源IP地址、目标IP地址、协议号、源端口号、目标端口号。只要有一项不同,则被认为是其他通信
2)端口号如何确定
* 标准既定的端口号 (知名端口号如HTTP、TLENET、FTP等一般由1-1023的数据之间分配而成)
* 时序分配法 (此时,服务器有必要确定监听端口号,而客户端没必要确定端口号,客户端端口号全权交给操作系统进行分配)
3)端口号与协议
端口号由其使用的传输层协议所决定。因此,不同的传输层协议可以使用相同的端口号
3.UDP(User Datagram Protocol)
UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。它将应用程序发来数据的时候,立刻按照原样,发送到网络上。
UDP在传出过程中出现丢包或者乱序等问题 的时候也不负责重发,如果要控制这些细节,需要交给应用程序来处理
UDP面向无连接,可以随时发送数据,再加上UDP本身的处理简单高效,因此常用于以下几个方面:
* 包总量较少的通信(DNS、SNMP等)
* 视频、音频等多媒体通信(即时通信)
* 限定于LAN等特定网络中的应用程序
* 广播通信(广播、多播)
4.TCP(Transmission Control Protocol)
TCP与UDP不同,它充分实现了数据传输时的各种控制功能(连接的建立、断开、保持等管理工作),可以进行丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。
为了通过IP报文实现可靠性传输,需要考虑很多事情,数据的破坏、丢包、重复以及分片顺序混乱等问题,TCP通过校验和、序列号、确认应答、重发控制、连接管理以及窗口管理机制来实现可靠性传输
1)通过序列号和确认应答提高可靠性
确认应答(ACK):在TCP中,当发送端的数据达到接收主机时,接收端主机会返回一个已收到消息的通知
如果有确认应答,说明数据已经成功达到对端;如果在一段时间内没有收到应答,则进行重发
另一种情况:由于其他原因导致确认应答延迟到达,此时客户端重发数据,但是接收端不得不丢弃重复的数据包
为此必须提供一种机制,能够识别是否已经接收数据,又能够判断是否需要接收
上述这些确认应答处理、重发控制、重复控制的功能都可以通过序列号实现。
序列号:按顺序发送数据的每一个字节都标上号码的编号
2)重发超时如何确定?
重发超时:在重发数据之前,等待确认应答到来的那个特定时间间隔
最理想的是:找到一个最小时间,确保确认应答在这个时间内一定能返回。
实际做法:在每次发包时计算往返时间及其偏差,将这个往返时间和偏差相加,重发时间就是比这个时间稍大的值
3)TCP发送数据单位
在建立TCP连接的同时,也可以确定发送数据包的单位,称其为:最大消息长度(MSS:Maximum Segment Size)
最理想的情况是:MSS正好是IP中不会被分片处理的最大数据长度
实际做法:MSS在三次握手的时候,在两端主机间被计算得出。两端的主机在发出建立连接的请求时,会在TCP首部写入MSS选项,告诉对方自己的接口能够适应的MSS大小
4)利用窗口控制提高速度
TCP以1个段为单位,每发一个段进行一次确认应答的处理,这样的传输缺点是:包的返回时间越长,通信性能越差
解决方案:引入窗口的概念,即时在往返时间较长的情况下,也能控制网络性能的下降。
确认应答不再以每个分段,而是以更大的单位进行确认时,转发时间将会被大幅度的缩短
这个机制实现使用大量的缓冲区,通过对多个段同时进行确认应答的功能
5)窗口控制与重发控制
使用了窗口控制之后,某一些确认应答即便丢失也无需重发
当真正某段报文丢失的时候,如下所示
主机B会重复发送下一个是1001,主机A接收到响应后随即重发该段报文
6)流控制
TCP提供的一种机制,让发送端根据接收端的实际接收能力控制发送的数据量
7)拥塞控制
5.其他传输层协议
* UDP-Lite(Lightweight User Datagram Protocol 轻量级用户数据报协议)是扩展UDP机能的一种传输层协议
* SCTP(Stream Control Transmission Protocol 流控制传输协议)与TCP一样,
* DCCP(Datagram Congestion Control Protocol 数据报拥塞控制协议)辅助UDP的崭新的传输层协议
6.UDP首部的格式
1)源端口号
2)目标端口号
3)包长度(UDP首部的长度跟数据的长度之和)
4)校验和(为了提供可靠的UDP首部和数据而设计的)
7.TCP首部格式
1)源端口号
2)目标端口号
3)序列号(发送数据的位置,在建立连接时由计算机生成的随机数作为初始值,通过SYN传给接收端主机)
4)确认应答号(下一次应该受到的数据的序列号)
5)数据偏移(TCP所传输的数据部分应该从TCP包的哪个位开始计算)
6)保留(以后扩展时使用)
7)控制位(表明对应操作类型)
8)窗口大小
9)校验和(TCP伪首部)
10)紧急指针
11)选项(用于提高TCP传输性能)
参考: 图解TCP/IP(第5版)