OSI模型和TCP/IP模型

OSI七层模型

OSI
应用层OSI参考模型中最靠近用户的一层,为应用程序提供网络服务
表示层提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别
会话层负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成
传输层提供面向连接或非面向连接的数据传递以及进行重传前的差错检测
网络层提供逻辑地址,供路由器确定路径。
数据链路层将比特组合成字节,再将字节组合成帧,使用链路层地址(以太网使用MAC地址)来访问介质,并进行差错检测
物理层在设备之间传输比特流,规定了电平、速度和电缆针脚

OSI模型的优点:

  1. 促进标准化工作,允许各个供应商进行标准开发,确保技术通用性;
  2. 各层相互独立,把网络通信分成低复杂单元;
  3. 灵活性好,某一层变化不影响到别层,设计者可以专心设计和开发模块功能;
  4. 简化教学。

TCP/IP四层模型

TCP
应用层通过各种协议向终端用户提供业务应用 HTTP,FTP,SMTP,SNMP
传输层传输层保证源端到目的端之间的可靠传输 TCP,UDP
网络层解决网络之间的逻辑转发问题 IP,ICMP,IGMP
网络接口层不关注底层物理介质,主要关注终端之间的逻辑数据流转发

相同点

  1. 两者都是以协议栈的概念为基础
  2. 协议栈中的协议彼此相互独立
  3. 下层对上层提供服务

不同点
4. OSI是先有模型;TCP/IP是先有协议,后有模型
5. OSI适用于各种协议栈;
6. TCP/IP只适用于TCP/IP网络
7. 层次数量不同
帧格式
封装与解封装
封装(encapsulation):数据要通过网络进行传输,要从高层一层一层的向下传送。
封装分为:切片加控制信息。解封装:上述的逆向过程。
Ethernet_II的帧中各字段说明如下:
DMAC(Destination MAC)是目的MAC地址。DMAC字段长度为6个字节,标识帧的接收者。
SMAC(Source MAC) 是源MAC地址。SMAC字段长度为6个字节,标识帧的发送者。
类型字段(Type) 用于标识数据字段中包含的高层协议,该字段长度为2个字节。类型字段取值为0x0800的帧代表IP协议帧;类型字段取值为0806的帧代表ARP协议帧。
数据字段(Data) 是网络层数据,最小长度必须为46字节以保证帧长至少为64字节,数据字段的最大长度为1500字节。
循环冗余校验字段(FCS) 提供了一种错误检测机制。该字段长度为4个字节。
EEE802.3帧格式 类似于Ethernet_II帧,只是Ethernet_II帧的Type域被802.3帧的Length域取代,并且占用了Data字段的8个字节作为LLC和SNAP字段。
Length字段定义了Data字段包含的字节数。
逻辑链路控制LLC(Logical Link Control) 由目的服务访问点DSAP(Destination Service Access Point)、源服务访问点SSAP(Source Service Access Point)和Control字段组成。
SNAP(Sub-network Access Protocol)由机构代码(Org Code)和类型(Type)字段组成。Org code三个字节都为0。Type字段的含义与Ethernet_II帧中的Type字段相同。
数据帧传输:
以太网在二层链路上通过MAC地址来唯一标识网络设备,并且实现局域网上网络设备之间的通信。MAC地址也叫物理地址,大多数网卡厂商把MAC地址烧入了网卡的ROM中。发送端使用接收端的MAC地址作为目的地址。以太帧封装完成后会通过物理层转换成比特流在物理介质上传输。
在这里插入图片描述
网络设备的MAC地址是全球唯一的。MAC地址包含两部分:前24比特是组织唯一标识符(OUI,Organizationally Unique Identifier),由IEEE统一分配给设备制造商。例如,华为的网络产品的MAC地址前24比特是0x00e0fc。后24位序列号是厂商分配给每个产品的唯一数值,由各个厂商自行分配(这里所说的产品可以是网卡或者其他需要MAC地址的设备)。
帧的发送方式
单播,指从单一的源端发送到单一的目的端。每个主机接口由一个MAC地址唯一标识,MAC地址的OUI中,第一字节第8个比特表示地址类型。对于主机MAC地址,这个比特固定为0,表示目的MAC地址为此MAC地址的帧都是发送到某个唯一的目的端。在冲突域中,所有主机都能收到源主机发送的单播帧,但是其他主机发现目的地址与本地MAC地址不一致后会丢弃收到的帧,只有真正的目的主机才会接收并处理收到的帧。
广播,表示帧从单一的源发送到共享以太网上的所有主机。广播帧的目的MAC地址为十六进制的FF:FF:FF:FF:FF:FF,所有收到该广播帧的主机都要接收并处理这个帧。
组播,组播比广播更加高效。组播转发可以理解为选择性的广播,主机监听特定组播地址,接收并处理目的MAC地址为该组播MAC地址的帧。
组播MAC地址和单播MAC地址是通过第一字节中的第8个比特区分的。组播MAC地址的第8个比特为1,而单播MAC地址的第8个比特为0。
数据帧的发送与接收
帧从主机的物理接口发送出来后,通过传输介质传输到目的端。共享网络中,这个帧可能到达多个主机。主机检查帧头中的目的MAC地址,如果目的MAC地址不是本机MAC地址,也不是本机侦听的组播或广播MAC地址,则主机会丢弃收到的帧。
如果目的MAC地址是本机MAC地址,则接收该帧,检查帧校验序列(FCS)字段,并与本机计算的值对比来确定帧在传输过程中是否保持了完整性。如果帧的FCS值与本机计算的值不同,主机会认为帧已被破坏,并会丢弃该帧。如果该帧通过了FCS校验,则主机会根据帧头部中的Type字段来确定将帧发送给上层哪个协议处理。本例中,Type字段的值为0x0800,表明该帧需要发送到IP协议上处理。在发送给IP协议之前,帧的头部和尾部会被剥掉。
在这里插入图片描述
IPv4协议族是TCP/IP协议族中最为核心的协议族。
IPv4协议族主要包括
地址解析协议ARP(Address Resolution Protocol)
用来将IP地址解析为MAC地址的协议,可以分为动态和静态两种类型。另外ARP还有扩展应用功能,包括Proxy ARP功能、免费ARP、ARP安全以及ARP-Ping。
逆地址解析协议RARP(Reverse Address Resolution Protocol)
RARP和ARP正好相反,是将MAC地址解析为IP地址的协议。
互联网控制报文协议ICMP(Internet Control Message Protocol)
为了更有效地转发IP数据报文和提高数据报文交付成功的机会,在网络层使用ICMP协议。ICMP允许主机或设备报告差错情况和提供有关异常情况的报告。ICMP报文作为IP报文的数据部分,再封装上IP报文首部,组成完整的IP报文发送出去。
传输控制协议TCP(Transmission Contronl Protocol)
用户数据报协议UDP(User Datagram Protocol)。
IPv4地址
在IP网络上,如果用户要将一台计算机连接到Internet上,就需要向因特网服务提供方ISP(Internet Service Provider)申请一个IP地址。
IP地址是在计算机网络中被用来唯一标识一台设备的一组数字。IPv4地址由32位二进制数值组成,但为了便于用户识别和记忆,采用了“点分十进制表示法”。采用了这种表示法的IPv4地址由4个点分十进制整数来表示,每个十进制整数对应一个字节。例如,IPv4地址使用二进制的表示形式为00001010 00000001 00000001 00000010,采用点分十进制表示法表示为10.1.1.2。
IPv4地址由如下两部分组成:
• 网络号码字段(Net-id):用来标识一个网络。
• 主机号码字段(Host-id):用来区分一个网络内的不同主机。对于网络号相同的设备,无论实际所处的物理位置如何,它们都是处在同一个网络中。
IPv4地址的主要特点有:
• IP地址不能反映任何有关主机位置的地理信息,只能通过网络号码字段判断出主机属于哪个网络。
• 当一台主机同时连接到两个网络上时,该主机就必须同时具有两个相应的IP地址,其网络号码Net-id是不同的,这种主机称为多地址主机(Multihomed Host)。
• 在IP地址中,所有分配到网络号码Net-id的网络都是平等的
IPv4地址分类
在这里插入图片描述
在这里插入图片描述
公共IP地址

公共IP
A1.0.0.0-9.255.255.255 11.0.0.0-126.255.255.255
B128.0.0.0-172.15.255.255 172.32.0.0-191.255.255.255
C192.0.0.0-192.167.255.255 192.169.0.0-223.255.255.255

私有IPv4地址
为了解决IP地址短缺的问题,提出了私有地址的概念。私有地址是指内部网络或主机地址,这些地址只能用于某个内部网络,不能用于公共网络。RFC1918描述了为私有网络预留的3个IP地址段。

私有IP
A10.0.0.0~10.255.255.255
B172.16.0.0~172.31.255.255
C192.168.0.0~192.168.255.255

IPv4报文各字段的含义

字段长度含义
版本4比特IP协议的版本号,分为IPv4和IPv6协议。
首部长度IHL4比特IPv4的首部长度。
区分服务Type of service8比特用来获得更好的服务。只有在使用区分服务时,这个字段才起作用。
总长度16比特指首部和数据之和的长度。
标识Identification16比特IPv4软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。
标志Flags3比特目前只有两位有意义。最低位为1表示后面“还有分片”的数据报,为0表示这已经是最后一个数据片;中间一位为1表示“不能分片”,为0才允许分片。
片位移13比特指出较长的分组在分片后,该片在原分组中的相对位置。
生存时间TTL(Time To Live)8比特表示数据报在网络中的寿命,功能是“跳数限制”。
协议 Protocol8比特指出此数据报携带的数据是使用何种协议。
首部检验和Header Checksum16比特数据报每经过一个设备,设备都要重新计算一下首部检验和,若首部未发生变化,则此结果必为0,于是就保留这个数据报。这个字段只检验数据报的首部,但不包括数据部分。
源地址Source Address32比特报文发送方的IPv4地址。
目的地址32比特报文接收方的IPv4地址。
选项字段Options0~40字节(长度可变)用来支持排错、测量以及安全等措施。在必要的时候插入值为0的填充字节。数据部分可变用来填充报文。

子网划分
网络地址:主机位全为0。 作用:表示是否属于同一子网。
网络地址相同:表示属于同一子网。网络地址不同:表示属于不同子网。
广播地址:主机位全为1。 作用:用于向整个子网发送消息。
知道IP和掩码,如何计算网络地址,广播地址和可用IP地址段
1: 看掩码,严格区分网络位和主机位;
2:主机位全0:网络地址,主机位全1,广播地址。网络地址和广播地址之间的就是可用的IP地址段。

ARP协议
通过目的IP地址而获取目的MAC地址的过程是由ARP(Address Resolution Protocol)协议来实现的。
一台网络设备要发送数据给另一太网络设备时,必须要知道对方的IP地址。但是,仅有IP地址是不够的,因为IP数据报文必须封装成帧才能通过数据链路进行发送,而数据帧必须要包含目的MAC地址,因此发送端还必须获取到目的MAC地址。每一个网络设备在数据封装前都需要获取下一跳的MAC地址。IP地址由网络层来提供,MAC地址通过ARP协议来获取。ARP协议是TCP/IP协议簇中的重要组成部分,ARP能够通过目的IP地址发现目标设备的MAC地址,从而实现数据链路层的可达性。
在这里插入图片描述
网络设备通过ARP报文来发现目的MAC地址。ARP报文中包含以下字段:
Hardware Type表示硬件地址类型,一般为以太网;
Protocol Type表示三层协议地址类型,一般为IP;
Hardware Length和Protocol Length为MAC地址和IP地址的长度,单位是字节;
Operation Code指定了ARP报文的类型,包括ARP request和ARP reply;
Source Hardware Address指的是发送ARP报文的设备MAC地址;
Source Protocol Address指的是发送ARP报文的设备IP地址;
Destination Hardware Address指的是接收者MAC地址,在ARP request报文中,该字段值为0;
Destination Protocol Address指的是指接收者的IP地址。
ARP表项的老化超时时间缺省为1200秒。

ARP工作过程

通过ARP协议,网络设备可以建立目标IP地址和MAC地址之间的映射。网络设备通过网络层获取到目的IP地址之后,还要判断目的MAC地址是否已知。
网络设备一般都有一个ARP缓存(ARP Cache),ARP缓存用来存放IP地址和MAC地址的关联信息。在发送数据前,设备会先查找ARP缓存表。如果缓存表中存在对方设备的MAC地址,则直接采用该MAC地址来封装帧,然后将帧发送出去。如果缓存表中不存在相应信息,则通过发送ARP request报文来获得它。学习到的IP地址和MAC地址的映射关系会被放入ARP缓存表中存放一段时间。在有效期内,设备可以直接从这个表中查找目的MAC地址来进行数据封装,而无需进行ARP查询。过了这段有效期,ARP表项会被自动删除。
如果目标设备位于其他网络,则源设备会在ARP缓存表中查找网关的MAC地址,然后将数据发送给网关,网关再把数据转发给目的设备。
Internet控制报文协议ICMP(Internet Control Message Protocol)是网络层的一个重要协议。ICMP协议用来在网络设备间传递各种差错和控制信息,它对于收集各种网络信息、诊断和排除各种网络故障具有至关重要的作用。
在这里插入图片描述
ICMP消息封装在IP报文中。ICMP消息的格式取决于Type和Code字段,其中Type字段为消息类型,Code字段包含该消息类型的具体参数。后面的校验和字段用于检查消息是否完整。消息中包含32比特的可变参数,这个字段一般不使用,通常设置为0。在ICMP Redirect消息中,这个字段用来指定网关IP地址,主机根据这个地址将报文重定向到指定网关。在Echo请求消息中,这个字段包含标识符和序号,源端根据这两个参数将收到的回复消息与本端发送的Echo请求消息进行关联。尤其是当源端向目的端发送了多个Echo请求消息时,需要根据标识符和序号将Echo请求和回复进行一一对应。
ICMP的典型应用Ping命令的输出信息中包括目的地址、ICMP报文长度、序号、TTL值、以及往返时间。序号是包含在Echo回复消息(Type=0)中的可变参数字段,TTL和往返时间包含在消息的IP头中。
Ping利用ICMP Echo请求消息(Type值为8)来发起检测目的可达性。目的端收到ICMP Echo请求消息后,根据IP报文头中的源地址向源端发送ICMP Echo回复消息(Type值为0)。
如果IP数据报在到达目的之前TTL值已经降为0,则收到IP数据包的网络设备会丢弃该数据包,并向源端发送ICMP消息通知源端TTL超时。
ICMP的另一个典型应用是Tracert。Tracert基于报文头中的TTL值来逐跳跟踪报文的转发路径。为了跟踪到达某特定目的地址的路径,源端首先将报文的TTL值设置为1。该报文到达第一个节点后,TTL超时,于是该节点向源端发送TTL超时消息,消息中携带时间戳。然后源端将报文的TTL值设置为2,报文到达第二个节点后超时,该节点同样返回TTL超时消息,以此类推,直到报文到达目的地。这样,源端根据返回的报文中的信息可以跟踪到报文经过的每一个节点,并根据时间戳信息计算往返时间。Tracert是检测网络丢包及时延的有效手段,同时可以帮助管理员发现网络中的路由环路。

UDP
UDP是一种面向无连接的传输层协议,传输可靠性没有保证。
当应用程序对传输的可靠性要求不高,但是对传输速度和延迟要求较高时,可以用UDP协议来替代TCP协议在传输层控制数据的转发。UDP将数据从源端发送到目的端时,无需事先建立连接。UDP采用了简单、易操作的机制在应用程序间传输数据,没有使用TCP中的确认技术或滑动窗口机制,因此UDP不能保证数据传输的可靠性,也无法避免接收到重复数据的情况。

在这里插入图片描述
UDP报文分为UDP报文头和UDP数据区域两部分。报头由源端口、目的端口、报文长度以及校验和组成。UDP适合于实时数据传输,如语音和视频通信。相比于TCP,UDP的传输效率更高、开销更小,但是无法保障数据传输的可靠性。UDP头部的标识如下:

  1. 16位源端口号:源主机的应用程序使用的端口号。
  2. 16位目的端口号:目的主机的应用程序使用的端口号。
  3. 16位UDP长度:是指UDP头部和UDP数据的字节长度。因为UDP头部长度为8字节,所以该字段的最小值为8。
  4. 16位UDP校验和:该字段提供了与TCP校验字段同样的功能;该字段是可选的。
    UDP传输
    主机A发送数据包时,这些数据包是以有序的方式发送到网络中的,每个数据包独立地在网络中被发送,所以不同的数据包可能会通过不同的网络路径到达主机B。这样的情况下,先发送的数据包不一定先到达主机B。因为UDP数据包没有序号,主机B将无法通过UDP协议将数据包按照原来的顺序重新组合,所以此时需要应用程序提供报文的到达确认、排序和流量控制等功能。通常情况下,UDP采用实时传输机制和时间戳来传输语音和视频数据。

数据转发过程
数据帧封装
传输层:

主机A使用TCP进行报文封装时,必须填充源端口和目的端口字段,初始序列号和确认序列号字段,标识位,窗口字段以及校验和字段。
网络层:
主机A完成传输层封装后,一般会进行网络层数据封装,在使用IP进行封装时,需要明确IP报文的源和目的地址。
主机A在发送数据前需要先检查是否能够到达目的端,这个过程是通过查找路由来完成的。
由于数据包要被封装成数据帧,所以主机A需要获取下一跳的MAC地址,也就是网关的MAC地址。主机首先会查询ARP缓存表。本例中,主机A的ARP缓存表中存在网关MAC地址的表项。
如果没有查找到网关的MAC地址表项,主机A会通过发送ARP请求来获取网关的MAC地址。
数据链路层:
主机A发送数据帧到共享以太网,此网络中的所有网络设备都会收到该帧。设备收到帧之后,首先会进行FCS校验。如果FCS校验未能通过,则帧被立即丢弃。对于通过了FCS校验的帧,设备会检查帧中的目的MAC地址。如果帧中的目的MAC地址与自己的MAC地址不同,设备将丢弃帧,如果相同,则会继续处理。处理过程中,帧头帧尾会被剥去(也就是解封装),剩下的数据报文会被根据帧头中的类型字段的值来送到网络层中的对应协议模块去处理。
RTA收到此数据报文后,网络层会对该报文进行处理。RTA首先根据IP头部信息中的校验和字段,检查IP数据报文头部的完整性,然后根据目的IP地址查看路由表,确定是否能够将数据包转发到目的端。RTA还必须对TTL的值进行处理。另外,报文大小不能超过MTU值。如果报文大小超过MTU值,则报文将被分片。
网络层处理完成后,报文将被送到数据链路层重新进行封装,成为一个新的数据帧,该帧的头部会封装新的源MAC地址和目的MAC地址。如果当前网络设备不知道下一跳的MAC地址,将会使用ARP来获得。
数据帧解封装
服务器A成功收到该帧,并通过FCS校验。服务器A将利用帧中的类型字段来识别在网络层处理该数据的协议。该示例中,服务器A会将解封装后的此数据交给网络层的IP协议来进行处理。
服务器A通过IP协议来处理该报文,首先会通过校验和字段来验证报文头的完整性,然后检查IP报文头中的目的IP地址是否与自己当前的IP地址匹配。
如果在源与目的之间的数据传输期间数据发生了报文分片,则报文会被目的端重新组合。标识字段用于标识属于同一数据源的分片报文,偏移量表示该分片在原分组中的相对位置。标志字段目前只有两位有意义,标志字段最低位为1表示后面还有分片,为0表示这已经是最后一个数据片;中间一位为1表示不能分片,为0表示允许分片。所有的分片报文必须被目的端全部接收到后才会进行重新组合。
协议字段表示此数据包携带的上层数据是哪种协议的数据。需要注意的是,下一个报头并非总是传输层报头。例如,ICMP报文也是使用IP协议封装,协议字段值为0x01。
当IP报文头被处理完并剥离后,数据段会被发送到传输层进行处理。在此示例中,传输层协议使用的是TCP,且发送端和接收端已经通过三次握手建立了连接。传输层收到该数据段后,TCP协议会查看并处理该数据段头部信息,其中目的端口号为80,用于表示处理该数据的应用层协议为HTTP协议。TCP处理完头部信息后会将此数据段头部进行剥离,然后将剩下的应用数据发送到HTTP协议进行处理。

数据在进行二层和三层封装之前,主机需要了解哪些信息?
当数据帧发送到非目的主机时,非目的主机将会如何处理?
传输层如何能够准确的将数据交给特定应用

当两台主机同时访问服务器的HTTP服务,该服务器如何区分数据属于哪个会话?

  1. 主机在封装数据包之前,必须要知道目的端IP地址。在封装数据帧之前,必须要知道去往目的网络的路由以及下一跳的MAC地址。
  2. 如果主机接收到一个不是发往自己的数据帧,在检验帧头中的目的MAC地址之后会丢弃该帧。
  3. 传输层会检查TCP或UDP报文头中的目的端口号,以此来识别特定应用。
  4. 服务器可以只通过源IP地址识别两台主机的HTTP流量,另外TCP报文头中包含的源端口也可以被用来区分同一台主机通过不同的浏览器发起的不同的会话。例如,两个来自源IP为10.1.1.1的HTTP流量使用的目的端口号都是80,但源端口号为1028和1035。
  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值