在谈七层参考模型之前,我们先谈一谈为什么要分层,分层有怎样的原则。
分层的意义:
(1)使各层工作独立,层与层之间通过接口联系,降低了协议工作的复杂程度。
(2)灵活性好,只要它的接口维持不变,那么任何一层的改变也不会影响其他层。
(3)每层的实现技术可以不同,减少了实现的复杂度。
(4)便于维护,进行单独调试。
(5)利于实现标准化。
分层的原则:
信宿机(目的机)第n层收到的对象应与信源机第n层发出的对象完全一致。典型的分层由两类,一类是OSI七层参考模型,另一类是TCP/IP四层参考模型。
OSI(Open System Interconnection)七层参考模型,它是由国际标准化组织制定的用于计算机或通信系统间互联的标准体系。七层由低到高分别是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
(7)应用层:
应用层主要为各种各样的网络应用提供网络服务,该层主要将服务等转换为编码(ASCII),常见的应用有:EMAL、FTP、微信等
(6)表示层:
表示层将编码转换为一定形式和格式的数据流,之所以需要表示为数据流,是因为计算机并不认识信息,它只认识0、1的二进制数,因此需要将编码转换成二进制的0、1代码,好让计算机进行识别。在这层除了上述为该层的任务外,压缩解压缩、加密解密等都是表示层的任务。
(5)会话层:
它负责通信主机间的会话的建立、管理和拆除,在两个节点之间建立端链接,提供对话控制机制,建立、维持、终止会话进程。
(4)传输层:
参考模型上的核心层之一,它负责通信主机之间的端到端的数据传递。对于TCP来说,它还负责提供可靠的传输、差错恢复、拥塞控制等额外的功能。通过端口号区分不同的服务,对数据进行确认、重传、排序、流控和分段。
协议 | http | https | TFTP | dhcp | dns | telnet | ssh | ftp | smtp | imap |
---|---|---|---|---|---|---|---|---|---|---|
端口号 | 80 | 443 | 69 | 67/68 | 53 | 23 | 22 | 21/20 | 25 | 110 |
端口号总共有65535个,其中1~1023为著名端口号(静态端口)用于区别服务端的各个服务进程。1024 ~ 65535叫作高端口(动态端口),用于区别客户端的各个进程。
(3)网络层:
它负责把每一个分组或包从源机沿路送达到目的机。标识源机还是目的机用的是地址。路可以理解为到达目的机的最优的路径,最优路径是路由用来作寻径的。路过的中间设备都会为这些分组或者包找到一条最优路径。
(2)数据链路层:
它主要提供介质访问服务,通过物理地址识别通信主机,提供可靠的帧传递,并做好差错控制,流控等。
在这一层,又可分为逻辑链路控制层 LLC和媒介访问控制层 MAC 。
逻辑链路层LLC :为上层提供服务,提供FCS校验,为数据分帧。
媒介访问控制层MAC :识别目标是不是是我们要传输的对象靠的是MAC地址,MAC地址是物理地址是真实的烧录在网卡上的,一般情况下,每一台电脑上的MAC地址都是独一无二的,它是由48位二进制构成,表示为差分十六进制,例如:30-83-a8-20-47-8d;地址中的前24位由国际组织IANA统一分配,该组织给一个厂商前24位固定的地址,可以让厂商有2^24个MAC地址为自己的网卡烧录。
(1)物理层:
提供透明的比特流传递,比特流可以是光信号、电信号、无线信号。之所以说是透明,是因为它不关心该比特流是什么内容,它只保证信号能正常传输。
物理层说的就是传输介质,比如有线无线、它定义了电气、电压接口,规范光学特性。
总结:OSI七层参考模型中:每一层都完成特定的功能,除了第1层和第7层之外,每一层都利用它下层的服务,同时为它的上层提供服务;第7层为模型外的用户服务。
四层由上至下分别是:应用层、传输层 、Internet、网络接入层。也可以将网络接入层进行细化,变为5层。
相同点:都分层,都有应用层,且都有对应的传输层、网络层。
不同点:
(1)TCP/IP将表示层和会话层都包含到了应用层,且数据链路层和物理层都包含到了一层。
(2)TCP/IP更简洁,OSI由于分层清晰因此便于开发和排除故障。
(3)TCP/IP是在实践中产生的,是当今互联网Internet所采用的模型;OSI很完美,但仅仅停留在教科书里。
(4)OSI为7层,TCP/IP可以为4层或5层
(5)TCP/IP模型的第3层仅支持IP(IPv4和IPv6)协议,OSI支持所有的网络协议。、
(6)TCP/IP模型支持跨层封装。
问题:
Q:为什么完美的OSI模型却没有向TCP/IP流行起来?
A:因为TCP/IP已经流行起来之后,OSI才被制定出来。除此之外,OSI参杂了太多政策的考量,技术并不是太好,实现很庞大且笨拙,对于研发人员也是一件非常痛苦的事情。
每一层存在的协议:
层数 | 名称 | 存在协议 |
---|---|---|
7 | 应用层 | Telnet、FTP、HTTP、SNMP |
6 | 表示层 | ASCII、HTML、GIF、JPEG等 |
5 | 会话层 | SQL、NFS、AppleTalk等 |
4 | 传输层 | TCP、UDP、SPX |
3 | 网络层 | IP、ICMP、RIP、OSPF等 |
2 | 数据链路层 | STP、HDLC、PPP、帧中继、SDLC、ATM |
1 | 物理层 | RJ-45、EIA/TIA RS-232、EIA/TIA RS-449、V.35 |
传输过程涉及报文的封装与解封装,因此先谈谈报文的封装、解封装的过程具体是怎样的。
(1)报文封装与解封装:
以用户浏览网站为例说明数据的封装、解封装的过程:
①当我们在网站输入相关的信息后,就会在 应用层 产生相关的数据流,这些信息会在这层转换为ASCII码。
② 表示层 将ASCII码转换成二进制编码。
③ 会话层 产生相应的主机进程传给传输层。
④ 传输层 数据流被传到传输层,将被切割为适合传输的数据段,并为每个数据段加上段头,段头上包含定位应用进程的著名端口号等信息以便目的主机识别此报文,并告诉目的主机由哪个进程来处理。其中,MTU是最大传输单元为1500B,MSS是最大段长度1480B。
⑤网络层 为每段数据段加上包头(分组),包头中包含了源IP地址、目标IP地址、生存时间、长度等。
⑥数据链路层 为包头添加帧头形成帧,帧头中包含寻址主机所需的MAC地址、校验等信息
⑦最后帧到了 物理层 上被转成可供传输的比特流。
转成比特流信息后就可以在网络上传输,报文在网络上被各主机接受,通过检查报文的目的MAC地址是不是自己需要处理的报文,如果发现MAC地址与自己的不一致,则丢弃该报文,一致就去掉MAC信息送给网络层判断其IP地址,然后根据报文的目的端口号确定给这台主机的哪个进程,最后在解码展现出人类语言。
(2)传输过程:
首先要知道,这个过程涉及3个角色:发送方、中间的信号通道、接收方。由于计算机根本就不认得网页请求、收发EMAIL等网络服务,因此, 发送方 需要将信息进行封装打包,从最高层(应用层)开始逐渐下行到最底层(物理层);然后在每一层上,数据都被加上头部信息,用于传递信息。接收方 将收到的比特流解包,去掉每层的头部信息,从最底层(物理层)逐渐上行到最高层(应用层)提取出信息。任何一次通信,总是以发送方的封装开始,收方的解封装结束。
那么是谁负责完成封装解封装这些基本的功能?其实在每一层上有一个实体(每层中活动的元素),每一层的这个实体可能是个硬件,可能是个软件,由它来负责实现本层的功能,收发双方对应层上的实体互称作对等实体。我们还说过每一层都为它的上层提供服务,以接口的形式供上层调用;这个服务是以接口的形式,为上层来调用的。
(3)TCP/UDP详解:
①UDP:非面向连接的不可靠传输协议,协议号17,提供简单的传输,速度较快,例如视频、游戏等数据传输安全性要求不是很高,且即时性要求比较高的流量适用于UDP。
UDP报头总共64bit(位),相当于8B(字节)。
报头携带内容 | 注解 |
---|---|
16-bit source port | 16比特的源端口号,说明是哪个程序、或哪个服务发出的 |
16-bit destination port | 16比特的目标端口号 |
16-bit UDP length | UDP的长度:说明UDP的长度大小为8个字节,其实是个固定值 |
16-bit UDP checksum | UDP的校验和,比如一段MD5运算的值等,用于对方检验数据是否丢或被篡改 |
②TCP:面向连接的可靠的传输协议。
Ⅰ面向连接:三次握手、四次断开。
标志位 | 注解 |
---|---|
ACK | TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1。 |
SYN | 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此, SYN置1就表示这是一个连接请求或连接接受报文。 |
FIN | (finis)即完,终结的意思, 用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。 |
三次握手:ctl表示标志位,此时标志位是SYN为1,然后发送一串随机序列号seq,假设为100。服务端收到请求后,回复客户端,标志位为SYN,ACK,为了确认服务端就是客户端要见到的服务端,服务端会把客户端法国来的序列号+1作为确认标志,与此同时也会扔出去一段随机的序列号,只有真正收到该序列号的客户端之后将确认标志+1 发送给服务端,才能证实客户端就是服务端要建立会话的客户端。
四次断开:
四次断开就可以简单的理解为:
ⅰ客户端说:我该弄得都弄好了,我请求断开。
ⅱ服务端说:好,我知道了。
过了一段时间:
ⅲ服务端说:我要断了,你准备好了吗?
ⅳ客户端说:好,我准备好了。
Ⅱ可靠的传输机制:确认、重传、排序、流控(滑动窗口)
确认 :就是说接收者在接收数据包之后,要向发出者标识自己已经接收到了数据,让发出者放心。
重传 :发出者发出数据包之后,接收者始终没有给发出者做出应答。此时发出者会重新发送。
排序 :数据在发出时,由于大于窗口,因此需要将数据切片处理,切片时需要对数据进行序号标记以防止数据在重组时出现混乱。
MSS:最大传输层,表示能够接收数据的最大值,我们把它叫做窗口,1480B。
MTU:最大传输单元,意味着物理接口所能接受的最大数据长度,最大长度时1500B。如果当接收数据长度大于1500字节时,就会对数据进行切片。
从图中我们可以看到,用作TCP传递的数据分片之后,还需要为每一个片数据进行加上报头,而UDP不用, UDP只有第一个被加上了UDP报头,其余都没有。我们可以把数据进行拆解除掉UDP报头的8个字节加上528字节之后等于原数据2000字节。TCP再去掉TCP报头20个字节,再加上后面的540个字节也等于2000字节,但无形中分片之后会导致数据大小总体要比UDP的数据大了不少,因此TCP不适用于传递即时性流量的数据包。
流控 :流量控制,发送方默认发送3个包1、2、3,接收方回复ACK3表示它直接收到了1、2两个包,同时告诉发送方我一次只能接收2个包。
ⅢTCP包头:TCP总共20B
报头内容 | 内容详解 |
---|---|
源端口号 | 源端口和IP地址的作用是标识报文的返回地址。 |
目的端口 | 端口指明接收方计算机上的应用程序接口。 |
序号(确认号 | 是TCP可靠传输的关键部分。序号是本报文段发送的数据组的第一个字节的序号。在TCP传送的流中,每一个字节一个序号。e.g.一个报文段的序号为300,此报文段数据部分共有100字节,则下一个报文段的序号为400。所以序号确保了TCP传输的有序性。确认号,即ACK,指明下一个期待收到的字节序号,表明该序号之前的所有数据已经正确无误的收到。确认号只有当ACK标志为1时才有效。比如建立连接时,SYN报文的ACK标志位为0。 |
首部长度(数据偏移 | 4bits。由于首部可能含有可选项内容,因此TCP报头的长度是不确定的,报头不包含任何任选字段则长度为20字节,4位首部长度字段所能表示的最大值为1111,转化为10进制为15,15*32/8 = 60,故报头最大长度为60字节。首部长度也叫数据偏移,是因为首部长度实际上指示了数据区在报文段中的起始偏移值。 |
保留 | 为将来定义新的用途保留,现在一般置0。 |
URG | 紧急指针标志,为1时表示紧急指针有效,为0则忽略紧急指针。 |
ACK | 确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。 |
PSH | push标志,为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。 |
RST | 重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求。 |
SYN | 同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1。 |
FIN | finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流。 |
窗口 | 滑动窗口大小,用来告知发送端接受端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。窗口大小时一个16bit字段,因而窗口大小最大为65535。 |
校验和 | 奇偶校验,此校验和是对整个的 TCP 报文段,包括 TCP 头部和 TCP 数据,以 16 位字进行计算所得。由发送端计算和存储,并由接收端进行验证。 |
紧急指针 | 只有当 URG 标志置 1 时紧急指针才有效。紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。 |
选项和填充 | 最常见的可选字段是最长报文大小,又称为MSS(Maximum Segment Size),每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志为1的那个段)中指明这个选项,它表示本端所能接受的最大报文段的长度。选项长度不一定是32位的整数倍,所以要加填充位,即在这个字段中加入额外的零,以保证TCP头是32的整数倍。 |
数据部分 | TCP 报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。 |
(1) HUB :集线器是一个标准的共享式设备,也就是同一时刻只有一个端口下联的设备可以发送数据。正常工作时,集线器随机选出某一个端口设备并让它独占全部带宽与集线器上联设备(如交换机、路由器等等)进行通信。因此,集线器设备的所有端口形成了一个冲突域。解决冲突域靠的是CSMA-CD技术,但无法完全解决冲突。
(2)协议数据单元 PDU(Protocol Data Unit):数据在各层展现的形式(或者说各层处理的数据对象)叫做协议数据单元。
层数 | 应用层 | 上三层 | 传输层 | 网络层 | 数据链路层 | 物理层 |
---|---|---|---|---|---|---|
协议数据单元 | 信息(Information) | 数据流(Data stream) | 数据段(Segment) | 分组(数据包Packet) | 帧(Frame) | 比特流(Bits) |
(3) 交换机 :无限距离传输、一对一传播(MAC)、解决冲突域。
交换机工作原理:
①当一个交换机收到一个数据包时,该数据包包含源、目MAC地址,交换机收到包后,会记录包进来的 MAC地址 以及从交换机的哪个 端口 进来的,记录的这张表叫做MAC地址表。交换机会根据这张MAC地址表进行转发数据包,实现一对一的传播(单播)。如果在MAC地址表上查询没有结果,交换机会进行洪泛,将这个数据包从除了接收进来的端口之外的所有端口全部发出去,如果有设备发现这个数据包是给它发的,该设备会回复。之后将包扔给交换机,交换机同样的记录下来端口号和MAC地址,在查询MAC地址表后转发给目标。
②交换机在同一时刻可进行多个端口之间的数据传输,每一端口都是独立的物理网段,连接在端口上的网络设备独自享有全部的带宽。因此,交换机起到了分割冲突域的作用,每一个端口为一个冲突域。
(4)路由器 :
①用于不同网络间的互联
②为它所承载的数据做路径的选择——选路
当数据包进入路由器后,路由器将基于数据包中的目标ip地址,查看本地的路由表,查询后若存在记录将无条件按照记录转发流量,若不存在记录将丢弃该流量。
(5)CSMA-CD 带冲突检测的载波侦听多路访问技术:
工作原理:发送数据前先侦听信道是否空闲,若空闲,则立即发送数据。若信道忙碌,则等待一段时间至信道中的信息传输结束后再发送数据;若在上一段信息发送结束后,同时有两个或两个以上的节点都提出发送请求,则判定为冲突。若侦听到冲突,则立即停止发送数据,等待一段随机时间,再重新尝试。
(6)跨层封装 :应用程序(聊QQ、打游戏数据是远距离传输)工作不跨层封装。同一网段内用于沟通时,为更加快速的解读数据(跨层封装适用于近距离传输,路由器与路由器之间),进行跳层封装。跨层封装主要用于非终端设备间相互沟通的流量,正常的应用程序流量,必须全面封装。ICMP、ARP、OSPF、EIGRP跨层封装至3层,STP生成树协议主要用于二层交换机之间的防环通信机制,跨层封装至2层,除ICMP比较特殊,它虽然是跨层封装但是它可以ping很远,因为它只是一个测试包。
1、IPv4协议:
在互联网发明之后,最早是有有很多的协议,但最后只有IP留了下来,其余的都退出了历史舞台。IP地址是由32位二进制数表示的,平时我们看到IP地址是点分10进制表示的。一段IP地址包含网络位和主机位,网络位标识所在网段,主机位唯一标识某台主机。因此一个完整的IP地址是需要有东西来划分网络位与主机位的,这里就用到的是掩码。
由于IPv4最早设计的时候,没有考虑到之后互联网之后可以发展如此迅速,在分配IP的时候比较随意,造成大量的IP地址的浪费,不充分使用。为了缓解这一现象,IP出现了私有地址,使大家共同用一个公共IP进行上网,这样就缓解了IP地址不够用的情况,使用的技术叫做NAT,这个以后再讲。
公有地址:全球唯一性,需要付费使用。
私有地址:本地唯一性,无需付费。
IP地址分为ABCDE五类主类网,一般情况下通过第一个8位就可以辨别类别;
类别 | 保留位 | 最小值 | 最大值 | 十进制范围 | 地址类型 | 私有地址 |
---|---|---|---|---|---|---|
A | 0 | 0000000 | 0 1111111 | 0-127 | 单播地址 | 10.0.0.0/8 |
B | 10 | 000000 | 10 111111 | 128-191 | 单播地址 | 172.16.0.0/16~172.31.0.0/16 |
C | 110 | 00000 | 110 11111 | 192-223 | 单播地址 | 192.168.0.0/24~192.168.255.0/24 |
D | 1110 | 0000 | 1110 1111 | 224-239 | 组播地址 | |
E | 1111 | 0000 | 1111 1111 | 240-254 | 科研使用 |
特殊IP地址 | 注解 |
---|---|
0.0.0.0/0 | 无效地址,缺省地址 |
255.255.255.255 | 受限广播地址 |
127.0.0.1/8 | 本地环回地址,用于检测TCP/IP协议栈工作是否正常 |
169.254.0.0/16 | 本地私有地址,当主机通过自动获取地址失败时,主机会自动分配此类地址 |
192.168.1.00000000/24 | 代表本网段内所有主机——主机位全0 |
192.168.1.11111111/24 | 代表本网段内的广播地址——主机位全1 |
2、IPv4报头:
报头内容 | 注释 |
---|---|
Ver. | IP协议的版本,目前的IP协议版本号为4,下一代IP协议版本号为6。 |
IHL | IP报头的长度。固定部分的长度(20字节)和可变部分的长度之和。共占4位。最大为1111,即10进制的15,代表IP报头的最大长度可以为15个32bits(4字节),也就是最长可为15*4=60字节,除去固定部分的长度20字节,可变部分的长度最大为40字节。 |
Service Type | 用于说明流量包的优先级,数字越小,优先级越高。 |
Packet Length | IP报文的总长度,报头的长度和数据部分的长度之和 |
Identification | 标识,唯一的标识主机发送的每一分数据报。通常每发送一个报文,它的值加一。当IP报文长度超过传输网络的 |
Flag | 标志,共3位。R、DF、MF三位。目前只有后两位有效,DF位:为1表示不分片,为0表示分片。MF:为1表示“更多的片”,为0表示这是最后一片。 |
Frag.Offset | 本分片在原先数据报文中相对首位的偏移位。(需要再乘以8) |
TTL | 生存时间,IP报文所允许通过的路由器的最大数量。每经过一个路由器,TTL减1,当为0时,路由器将该数据报丢弃。TTL 字段是由发送端初始设置一个 8 bit字段.推荐的初始值由分配数字 RFC 指定,当前值为 64。发送 ICMP 回显应答时经常把 TTL 设为最大值 255。 |
Protocol | 指出IP报文携带的数据使用的是那种协议,以便目的主机的IP层能知道要将数据报上交到哪个进程(不同的协议有专门不同的进程处理)。和端口号类似,此处采用协议号,TCP的协议号为6,UDP的协议号为17。ICMP的协议号为1,IGMP的协议号为2. |
Header Checksum | 头部校验和,计算IP头部的校验和,检查IP报头的完整性。 |
Source Address | 标识IP数据报的源端设备。 |
Destination Address | 标识IP数据报的目的地址。 |
Options | 是一个长度可变的字段,并像其名字所表示的,它是可选的。可选项被添加在包头中,包括原点产生的信息和其他路由器加入的信息;可选项字段主要用于测试。 |
Padding | 该字段通过在可选项字段后面添加0来补充32位,这样保证报头长度是32位的倍数。 |
协议号 | 主机到主机层协议 |
---|---|
1 | Internet消息控制协议(ICMP) |
2 | Internet组管理协议(IGMP) |
4 | 被IP协议封装的IP |
6 | 传输层控制协议(TCP) |
17 | 用户数据报协议(UDP) |
45 | 域间路由选择协议(IDRP) |
46 | 资源预留协议(RSVP) |
47 | 通用路由选择封装(GRE) |
54 | NBMA下一跳解析协议(NHRP) |
88 | Cisco Internet 网关路由选择协议(IGRP、EIGRP) |
89 | 开放式最短路径优先(OSPF) |
VLSM:可变长子网掩码(子网划分)
·原理:从主机位的最高位借位作为网络位,借的主机位叫做 子网位 。
比如说我们要把172.16.0.0/16划成8个网段。
172.16. 000 00000 .0
因此我们需要将主机位的最高位的3位作为网络位,因为二的立方等于8。
我们将000进行0、1的排列组合,总共有8种,替换之后再带入可到以下网段:
000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 |
---|---|---|---|---|---|---|---|
172.16.0.0/19 | 172.16.32.0/19 | 172.16.64.0/19 | 172.16.96.0/19 | 172.16.128.0/19 | 172.16.160.0/19 | 172.16.192.0/19 | 172.16.224.0/19 |
其实划分网段,做的就是把一个大的网段划分成若干个小的网段,由于IP地址是2进制数,逢2进1,因此我们想象分地址就是一个且西瓜的过程,一个切成半个西瓜,半个西瓜再切成两大牙,最后切成两小牙的过程。我们划分网段的时候,也只能一次划分出固定的网段。如果我们要划分出5、11、18等不规则的网段是不可行的,剩余的网段可以作为预留,以便新加入的设备能有自己的IP,不至于再重新规划,费时费力。
子网汇总:将多个连续性子网,可以使用汇总的方式合并成一个大的网络范围。
汇总方式:取相同位,去不同位。
连续性子网:母网相同、网络掩码相同。
例如:
172.16.1.0/24、172.16.2.0/24、172.16.24.0/24 是连续性子网,汇总后为172.16.0.0/19(精确汇总)
172.16.1.0/24与192.168.1.1/24不是连续性子网
172.16.1.0/24与172.16.1.0/25不是连续性子网
超网:汇总后的网段掩码小于主类掩码。比如说汇总后的为192.168.0.0/19<24
CIDR无类域间路由:汇总后的网段掩码大于主类掩码。172.16.0.0/19>16