常见网络协议OSI和TCP/IP

协议概览

1、国际标准化组织ISO所制定的OSI(Open System Interconnection Reference Model)开放系统互联基本参考模型

在这个模型中网络被划分为七层,OSI模型它层次划分的太过学术、太过精细,具体实施起来会存在以下问题:

  • 制定OSI网络模型的专家们偏学术,缺乏商业驱动能力
  • 协议实现太过复杂,运行效率低
  • 协议多,导致按照OSI协议实现的设备,从设计到进入市场的周期太长
  • 层次划分不太合理,有些层次的功能重叠了

2、TCP/IP四层网络模型

不同于OSI网络模型,在TCP/IP网络模型中,网络被划分为四层:把OSI网络模型中功能重叠、或者相似网络层次进行了合并,如图。最终,体系结构更加简单的TCP/IP网络体系结构,经过了商业化的洗礼取代了OSI网络体系结构最终成为事实上的标准(不过在学习计算机网络时,将OSI网络模型与TCP/IP网络模型进行了合并,在TCP/IP网络模型中的网络接口层,按照OSI网络模型划分为数据链路层物理层
请添加图片描述

  1. OSI 7层模型及协议

    在这里插入图片描述

物理层协议:5232C、R5 449/422/423、v.24和x.21、x.21bis

  1. TCP/IP 五层模型及协议
    在这里插入图片描述
    物理层协议:5232C、R5 449/422/423、v.24和x.21、x.21bis

五层模型介绍

1、物理层(建立物理连接,传输二进制流)。那么首先摆在面前的第一个问题就是主机A与主机B之间得有一条物理链路(有线、无线)进行数据传输,否则通信无从谈起;所以物理层的作用便是在主机之间搭建一条物理链路传输二进制流(即0与1,与协议无关)。

2、数据链路层(局域网,主机间通信)。物理链路联通以后主机之间就具备了数据传输的基础能力,但是物理链路上是无协议的,传输的是二进制流;二进制流意味着没有起始标识符,接收的主机不知道什么时候开始解析数据,也不知道什么时候终止数据的接收;于是在数据链路层上对发送的数据进行了封装:分装成帧(frame);这样主机在接收二进制流时就知道什么时候开始,什么时候结束。

3、网络层(网络路由,主机间通信)。当物理层和数据链路层准备就绪以后,另外的问题出现了:计算机网络中存在大量的主机,那么主机A如何找到主机B呢?即网络路由寻址能力;在网络层最出名的协议莫过于IP协议(Internet Protocol)。在特定的网络下,每台主机都分配了一个唯一IP地址,配合路由器的IP路由寻址,主机A就能通过IP协议找到主机B了;也就意味着主机A与主机B之间具备了数据传输能力。

4、传输层(进程间通信)。主机之间具备传输功能之后,那么更近一步把数据发送到指定端口即可完成一次不同主机间的进程通信了;记住传输层并不是数据传输的地方,而是控制数据如何传输的地方:面向连接还是无连接,传输的拥塞控制等。

5、应用层(发送&接收数据)。主机B上的进程b只要监听特定的端口号,那么就能够收到主机A上的进程a发送过来的数据了。

传输过程

在这里插入图片描述
在这里插入图片描述

数据包封装解封装过程

1、封装过程

  • 应用层:原始数据被转换成二进制数据
  • 传输层:二进制数据被分割成小的数据段,并封装TCP头部,TCP头部的关键信息–端口号(数据
  • 网络层:传输层传来的数据被封装上IP头部 (数据
    (IP头部的关键信息–IP地址)
    -数据链路层:网络层传来的数据被封装上MAC头部 (数据
    (MAC头部的关键信息–MAC地址)
  • 物理层:二进制数据组成的比特流转化为电信号在网络中传输 (比特
    在这里插入图片描述
    2、解封装
    在这里插入图片描述

补充:IEEE 802标准为LLC和MAC子层的帧格式作了详细规定。 下图描述了网络层PDU、LLC子层PDU和MAC子层PDU的关系。
在这里插入图片描述
LLC定义了三种帧:信息帧(I-帧)、监控帧(S-帧)和无编号帧(U-帧)。

完整的数据包传输过程

1、封装报文是从上层到下层(应用层 --> 传输层 --> 网络层 – > 数据链路层 --> 物理层),解封装报文是从下层到上层。

2、数据包传输的过程中,源IP和目标IP不会变,除非遇到NAT(SNET:将内网IP映射为公网IP,DNET:将公网IP映射为内网IP),源MAC和目标MAC遇到网关会变。

3、二层内通过MAC寻址,三层通过IP寻址。

4、当一个数据包的目的地址不是本机,所以需要查询路由表,当查到路由表中的网关之后,需要获取网关的MAC地址,并将数据包的MAC地址修改成网关地址,然后发送到对应的网卡。

5、协议数据单元在应用层、表示层和会话层被称做数据(Data),在传输层被称做分段(Segment),在网络层被称做包(Packet),在数据链路层被称做帧(Frame),在物理层被称做比特(Bit)。

6、PC或者Server上保留的arp表是:arp和ip的映射关系。
在这里插入图片描述

而二层交换机是arp和端口的映射关系,也就是这个arp 应该由哪个端口转发。三层交换机可以保留arp和ip的映射关系。

例子:PC1发送http请求到Server的详细流程
在这里插入图片描述
第一步:封装包
当数据包从PC1发出时,它已经是一个完整的包了,包含如下信息:
在这里插入图片描述
1、应用层:HTTP协议是生成针对目标WEB服务器的HTTP请求报文,该报文就是需要传递的数据

2、传输层:HTTP协议使用的是TCP协议,为了方便通信,将HTTP请求报文按序号分为多个报文段(segment),并对每个报文段进行封装。PC1使用本地一个大于1024以上的随机TCP源端口(这里假设是1030)建立到目的服务器TCP80号端口的连接,TCP源端口和目的端口加入到报文段中,学名叫协议数据单元(Protocol Data Unit, PDU)。因TCP是一个可靠的传输控制协议,传输层还会加入序列号、窗口大小等参数

3、网络层:下沉到网络层后,封装网络层的头部,主要就是添加源和目的IP地址,成为数据包。用户通常使用主机名或域名来访问服务器,这时就需要通过应用层的DNS服务来通过域名查找IP地址,或逆向从IP地址反查域名。这里的源IP地址是193.1.1.2,目的IP地址是195.1.1.2。

4、数据链路层:下沉到数据链路层,封帧的头部,源MAC和目标MAC。PC1比较去往的目标IP,发现Server IP 195.1.1.2不在本地网络中,PC1通过查找本地路由表,会有一条默认路由指向网关R1,知道数据包要先发到网关R1的Fa0/0口。PC1查找本地arp cache,如果找到193.1.1.1对应的MAC地址则进行封装; 如果在ARP cache中没有找到193.1.1.1对应的MAC地址,则用ARP协议,査询到网关对应的MAC地址 “00-11-BC-7D-25-03” 。于是,这里的源MAC地址是PC1的MAC地址“00-1B-24-7D-25-01”,目的MAC地址是网关的MAC地址“00-11-BC-7D-25-03。

从PC1发出的数据帧格式:

在这里插入图片描述
5、物理层:数据链路层封装后的数据帧下沉到物理层,转换成二进制形式的比特(Bit)流,从PC1的网卡发送出去。

  • 注:我们知道,数据在传输过程中可能会因为传输介质故障或外界的干扰而产生比特差错(使原来的0变为1,原来的1变为0),从而导致接收方接收到错误的数据。为尽量提高接收方收到数据的正确率,在接收数据之前需要对数据进行差错检测,仅当检测的结果为正确时才接收数据。差错检测的方式有多种,常见的有奇偶校验、求和校验、CRC校验等

第二步、数据包到达集线器
PC1发出的比特流到达集线器,集线器简单地对比特流转发,从除接收端口以外的所有端口转发出去。PC2接收到这个数据包,把比特流转换成帧上传到数据链路层,PC2比较数据帧的目的MAC地址,发现与本机网卡的MAC地址不同,PC2丢弃该数据帧,放弃处理,数据到达路由器。

第三步、数据包到达路由器R1
路由器R1收到该比特流,转换成帧上传到数据链路层,路由器R1比较数据帧的目的MAC地址,发现与路由器接收端口Fa0/0(快速以太网,简写成Fa0/0,指的是0号插槽上编号为0的接口)的MAC地址相同,路由器知道该数据帧是发往本路由器的。路由器R1的数据链路层把数据帧进行解封装,然后上传到路由器R1的网络层,路由器R1看到数据包的目的IP地址是195.1.1.2,并不是发给本路由器的,需要路由器进行转发。

路由器R1査询自己的路由表,发现数据包应该从串行接口S1/1发出。路由器R1把数据包从Fa0/0接口交换到S1/1接口。

此时R1并不能直接把这个数据包发出去,因为在R1的Fa0/0接口被解封装,现在需要被重新再封装。在路由器的入接口解封装,在路由器的出接口需要再封装。网络层的封装并没有被解开,但并不意味着网络层的信息一点都没有改变,其实网络层的数据包中源和目的IP地址都没有被改变(除非在网络地址转换的情况下),但TTL(生存周期)会减1。网络层把数据包交给下层的数据链路层,数据链路层需要封装二层的地址。串行链路不同于以太网,因为以太网是一个多路访问的网络,要定位到目的设备需要借助于MAC地址,但串行线路一般的封装协议都是PPP(Point-to-Point Protocol,点到点协议)或HDLC(High-Level Data Link Control,高级数据链路控制协议)封装,这种封装被用于点对点线路,也就是说,一根线缆只连接两台设备,一端发出,另一端肯定可以收到(有点像容器网络中用的veth)。假设串行线缆上使用的是PPP协议,则数据链路层封装的源和目的地址都是PPP。

数据链路层封装后的数据帧被传到物理层,转换成二进制形式的比特流,从路由器R1的S1/1接口发送出去

从R1的S1/1发送出去的包的数据帧格式:

在这里插入图片描述

第四步、数据包到达R2
路由器R2收到这个比特流,上传至数据链路层,数据链路层去掉PPP的封装。路由器R2査询数据包的目的IP地址,发现该IP网络直接连接在Fa0/0接口,路由器R2把数据包交换到Fa0/0接口。路由器查看本地的ARP缓存,如果找到195.1.1.2对应的MAC地址,则直接进行封裝;如果没有找到,则发送ARP的查询包。路由器R2发出数据帧的源地址是Fa0/0接口的MAC地址,目的地址是服务器网卡的MAC地址。

数据链路层封装后的数据帧被传到物理层,转换成二进制形式的比特流,从路由器R2的Fa0/0接口发送出去。
在这里插入图片描述
第五步、交换机处理
路由器R2发出的比特流到达交换机,根据源MAC地址进行学习,根据目的MAC地址进行转发。交换机根据数据帧中的目的MAC地址査询MAC地址表,把比特流从对应的端口发送出去,交换机把比特流发往服务器,并没有发往PC3。可以看到交换机并没有像集线器那样进行广播转发,而是有针对性的进行了转发。

第六步、服务器处理
服务器接收到这个比特流,把比特流转换成帧格式,上传到数据链路层,服务器发现数据帧中的目的MAC地址与本网卡的MAC地址相同,服务器拆除数据链路层的封装后,把数据包上传到网络层。服务器的网络层比较数据包中的目的IP地址,发现与本机的IP地址相同,服务器拆除网络层的封装后,把数据分段上传到传输层。传输层对数据分段进行确认、排序、重组,确保数据传输的可靠性。数据最后被传到服务器的应用层。

反向传输
服务器收到PC1发过来的数据后,对PC1进行响应。和PC1处理的过程类似,服务器也知道要发往一个远程的网络,数据链路层的目的MAC地址需要封装网关的MAC地址;网络层源和目的IP地址与PC1发送过来的包相反,即把源地址变成目的地址,目的地址变成源地址;传输层源和目的端口与PC1发送过来的包相反,即把源端口变成目的端口,目的端口变成源端口。

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值