计算机网络.五层协议栈模型简介

Posted 木艮氵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机网络.五层协议栈模型简介相关的知识,希望对你有一定的参考价值。

  • OK,又进入了考试复习的阶段
  • 不知道我这样用博客来准备考试是不是有点
  • 不太好

复习纲要

  • 按照五层协议栈模型
    • 物理层
    • 链路层
    • 网络层
    • 传输层
    • 应用层

物理层

  • bit

    • 物理层解决如何在物理介质上传输bit的问题
    • 说到底,任何电脑中需要传输的数据,都是一堆0和1,那么物理层的任务,就是传输0和1
    • 最简单如以某个范围的高电压表示1、低电压表示0,或以电压由低变高表示1、由高变低表示0等等,也就是bit的编码方式
  • 调制/解调

    • 但是如此简单的方式,带来的后果就是无法进行远距离传输
    • 于是调制/解调就发挥作用了。什么传输得远?波~~~
    • 载波就是一正弦波,而顾名思义,“载”波就是用来携带数据的波
    • 调制的过程就是把01“写入”到载波中
      • 比如振幅调制,就用振幅大代表1,振幅小代表0;频率调制,就是频率大代表1,频率小代表0,诸如此类
      • (也可以振幅小代表0,这些都是约定好的。这种所谓的约定也就是“协议”)
    • 解调就是依据协议(比如双方都用某种振幅调制)来提取出01信息,接收方遇到振幅大就知道是1,小就是0
  • 设备

    • 工作在这一层的设备有中继器,其作用是放大信号来扩大传输距离、对信号进行整形来抵抗信号的衰减、变形等

链路层

    • 最关键的概念即“帧”
    • 物理层传输bit,链路层传输帧
    • 帧就是一块有相应格式的数据,通常可分为三部分:头部、数据部、尾部
    • 受最大传输单元MTU的限制,链路层能传输的一个帧有长度限制
  • 实现

    • 不同的链路层实现具有不同的帧格式,而其相应的MTU也不同
    • 最最最常见即以太网,以太网的帧也叫以太帧
    • 以太网是局域网的一种实现,通信采用CSMA/CD的多点接入协议,其余的局域网实现还有IBM的令牌环网络、ATM网、无线网等等,它们使用的帧格式也是也均不相同
    • 另一个很有用的即PPP协议,Point to Point Protocol,其帧为PPP帧,实现了点对点的通信,具有身份验证的功能。这个用来干什么呢?拨号上网。比如要用电信网就要有个电信账号和密码,拨号的时候用的就是PPP协议和电信的服务器通信,验证通过就把你的电脑接入到电信网中,于是就可以上网了。而现在一般用PPPoE协议,配置路由器也常会见到PPPoE。PPPoE即PPP over Ethernet。由于大多数局域网都是以太网,而位于以太网内的电脑采用的是以太网的帧格式,PPPoE协议则结合了PPP帧和以太网帧,实现了在以太网上传输PPP帧,实际上是把PPP帧作为数据部分封装成以太帧,在以太帧的头部的帧类型字段表明是PPP帧数据。于是大家在局域网里也就可以拨号上网了。
  • 理论上的分层

    • 再进一步,链路层通常可分为LLC层和MAC层,不过LLC似乎已经不怎么提及了,只要实现MAC层也就搞定了通信
    • 什么是MAC层?Media Access Control,媒体接入控制,简单来说就是解决如何标识每一台主机的问题。想到了什么?mac地址呗,全球唯一的网卡地址,完美解决主机的标识问题。
    • 以太网的MAC子层实现是基于网卡地址,由于以太网太过普及,干脆也就称为mac地址了
    • 以太帧的头部有源mac地址(发送数据的主机)和目标mac地址(接受数据的主机),这个帧一发出去,同一个局域网的主机都能收到,然后对比一下是不是应该由我来接受(即帧中目标mac地址和我的mac地址一不一样)
  • 设备

    • 工作在这一层的设备有网桥、交换机,它们可以识别帧并进行转发。(不同的协议有不同的帧格式,所以要能识别出来必须配置相应的协议)

网络层

  • 异构网络与IP地址
    • 说的绕一点:网络层解决的是异构网络的通信问题
    • 什么是异构网络?就是链路层有很多很多种不同的实现(也大致可以等同于局域网也不仅仅有以太网),各种不同的网络之间用来通信的帧格式不同,又如何能通信呢?
    • 于是IP地址就出现了,网络层采用IP地址来标识每一个主机(更具体的说是每一个网络连接点)
      • 哎,你说,以太网用的MAC地址,也就是网卡地址,不也是全球唯一的么?是啊,没错啊,但是这个地址只有以太网在用(虽然好像其实大家都在用网卡地址来标识主机,但最主要的是帧格式的不同),也就是异构网络的MAC子层不一样,尽管现在绝大部分都是以太网
  • IP数据报

    • 于是大家都用IP地址来通信,传输的是IP数据报。这个IP数据报即作为链路层的数据部分,加上帧头部和帧尾部,即封装成一个数据帧,但数据帧的数据部分不仅仅是IP数据报,还可以是其他链路层的协议所使用的数据,比如PPP协议中的LCP和NCP
    • 而实际上,如果一个IP数据报要想传输成功,就必须封装成帧(具体怎样的帧格式要看在怎样的网络中,若在以太网中就封装成以太帧),然后送到目标主机,而网卡只认MAC地址,只认帧,网卡收到一个帧后,发现确实是发给自己的,于是把帧拆开取出数据部分(IP数据报),在向上提交给网络层
    • IP数据报也有格式,即IP首部和数据部。IP首部至少应当包括三个信息:发送方的IP地址,接收方的IP地址,总长度。
    • 最终的效果就是,站在网络层的视角,我并不需要知道帧格式是怎样的、MAC地址是几,我只需要知道对方的IP地址,我就可以把数据传过去了。
  • 问题1:IP地址与MAC地址

    • 那么问题就来了:网卡可是只认MAC地址的啊,我如何实现IP地址到MAC地址的转换(映射)呢,即IP数据报最终一定是作为链路层帧的数据部分,那帧头部还需要填入MAC地址的信息,我如何得知呢——ARP协议
    • ARP协议工作在链路层,即直接使用帧来通信,但是其解决的问题是网络层的问题,所以有些地方把它按照目的归入网络层,有些地方按照工作方式归入链路层
    • ARP协议解决的是局域网内的通信问题(因为使用帧来通信嘛),好现在有一个主机host_1,它的IP地址是ip_1,MAC地址是mac_1,同一局域网内有另一台主机host_2、ip_2、mac_2。此时host_1想向host_2发送数据,而它只知道对方的IP地址是ip_1,于是
      • *1.*host_1广播(目标MAC地址全1)一个帧,内容是“我是ip_1,mac_1,我想知道ip_2的MAC地址”
      • 2.本局域网上的所有主机都收到了这个帧,但是只有host_2会回答这个帧(因为它才是ip_2),此时它知道了host_1想要它的IP地址,也知道了host_1的MAC地址是mac_1
      • 3.于是host_2发送一个帧(目标MAC地址是mac_1),内容是“我是ip_2,我的MAC地址是mac_2”
      • 4.只有host_1才能收到这个帧(因为只有它才是mac_1),于是host_1也就知道了ip_2的MAC地址是mac_2
    • 每次都这样是不是很慢啊,慢就来个缓存呗——ARP高速缓存。好不容易厚着脸皮要到了mac地址,赶紧找个小本本记下来。
  • 问题2:路由器如何工作

    • 那么问题又来了:ARP解决的是局域网内的通信问题,那我平时上网都用路由器,主机位于我路由器内的局域网里,又怎么访问百度呢?
    • 这就牵扯到路由器了
    • 大致可以认为整个网络就是路由器在转发数据,从一个路由器到另一个路由器,最终到达目标主机
    • 于是整个过程就大致可以这样理解:
      • 1.首先你根据路由器的mac地址(它和你的主机在同一个局域网内),把数据发给路由器
      • 2.路由器收到这个帧(因为mac地址写的是它),拆开帧,得知你要发送数据给ip_baidu,于是路由器查找路由表,找到下一跳地址ip_next,然后用ARP协议解析到ip_next的mac地址(没错你的路由器和这个ip_next的路由器在一个局域网),于是数据到达了另一个路由器
      • 3.而这个ip_next的路由器又和其他路由器在同一个局域网,但是你的路由器不和它们在同一个局域网,所以只能把你的数据先给你的路由器、你的路由器再给ip_next这个路由器、这个路由器再给更远的路由器
      • 4.最终到达一个路由器,这个路由器和ip_baidu在同一个局域网里,然后你的数据就到达了目的地
    • 命令行下“tracert”命令可以追踪从你的主机到目标IP地址的主机之间经过了哪些路由器,命令的原理是利用了ICMP协议
  • 问题3:异构网络通信问题的解决

    • 注意到没,一个路由器连接了好几个局域网,而着好几个局域网并不一定都是以太网,也就是说它们的帧格式不一定相同
    • 所以路由器的任务很关键,这也就是解决异构网络通信的关键所在:路由器知道它连接了哪些局域网,也知道它们的帧格式分别是怎样的
    • 而路由器在转发的时候,拆开一个帧(怎么拆?根据帧格式。如何得知帧格式?看它来自哪个局域网)后只拿到了数据部分,从数据部分(IP数据报)中得知它的目的IP,通过路由表得知我要转发给那一个路由器,而它又位于哪种局域网中,再按照这种局域网的帧格式把数据封装起来,发过去
    • 路由器继续沉默着。“又一个帧来了”路由器撇了一眼,“又是以太帧,没劲”。说完便拆开了这个帧。以太帧对于路由器来说实在是太常见了,他甚至可以在半睡半醒的状态下闭着眼拆开它。看到这个帧要去的IP地址,路由器不厌其烦的翻阅着路由表,而找到的下一跳地址不由得让他眼前一亮。“很久没遇到一个要去这种局域网的帧了。IBM令牌环网络,有趣”。说罢路由器拿起了另一本厚厚的书,里面写满了IBM令牌环网络的知识。他飞快地翻着,略带生疏的把这个帧组装好,此时令牌恰好传到了他的手里。“下一个”
  • 网络层的结果

    • 解决了异构网络的通信问题:基于IP地址和路由器
    • 向上提供基于IP地址的通信
    • 尽最大努力交付:只发送一次,能不能到达看运气

传输层

  • 端口概念

    • 实际上的网络通信的两个主机之间的应用(进程)之间的通信
    • 端口用来区分同一主机上的不同应用
    • 简单的理解就是一个进程占用一个端口号
  • 两个协议

    • UDP协议
      • 面向无连接:不需要对方主机在线,当然只有在线才能收到
      • 面向报文:一次发送一段数据
      • 不可靠:发出去就不管了(不管能不能到,不管能不能有序到达)
    • TCP协议
      • 面向连接:需要对方主机在线,并建立连接
      • 面向字节流:你给我一堆字节的数据,我给你发过去,但一次发多少我说了算
      • 可靠:我有机制可以保证你的数据一定会有序的到达对方主机
  • TCP

    • 一次发送一个TCP报文段,由TCP首部和数据部分组成
    • TCP首部至少包括三个信息:源端口,目标端口,序号,数据偏移
      • 序号是用来编号字节的。TCP是面向字节流,也就是你给我一段有序的字节,我对其编号,比如从x到x+n,TCP内部机制不一定全部发送出去,而会选择一部分,比如x到x+m这m个字节作为数据部分,加上TCP首部组成一个报文段,这个报文段又作为数据部分交给网络层
      • 数据偏移用来指出TCP的数据部分的起始位置在整个TCP报文段(首部+数据)的位置(也就是首部长度)
      • 什么?不知道数据部分多长?还记得网络层IP数据报的首部吗,长度可以根据这里面的总长度算出来,因为整个TCP报文段是作为IP数据报的数据部分。
    • 连接
      • TCP建立连接的两个点是(ip1,port1)和(ip2,port2)
      • ip1==ip2时,即在本主机的不同进程间通信,此时port1和port2一定不同
      • ip1!=ip2时,即在两台主机之间通信,port1和port2不一定不同
  • TCP很棒

    • 为什么?因为TCP可靠啊。
    • 那么TCP是如何实现可靠?简单的理解就是——编号+重传。
    • 重传保证数据一定能到
      • TCP每发一个数据,就会期待接收方的一个回复。如果在指定时间内收到了回复,就知道数据确实达到了
      • 如果超过一定的时间没收到回复,就认为对方没有收到,所以再发送一遍
    • 编号保证数据有序
      • TCP面向字节流,发送方每次选出一段字节发送的时候,都会带上一个序号,这个序号就是发送的这段字节中编号最小的字节的编号
      • 接收方回复的时候,也会带上一个序号,这个序号是接收方期望接收到的下一个字节的编号
    • 其他也很重要
      • 流量控制
      • 拥塞控制
  • 传输层的结果

    • 提供应用进行通信的socket编程接口,屏蔽了大量的传输细节,你只需要给它目的地和数据就好了~
    • 应用程序利用这个接口来进行网络通信
    • 有没有不基于socket的通信?有啊,在传输层之下的通信呗,比如ARP、ICMP等

应用层

  • www万维网

  • FTP文件传输协议

  • DNS协议:域名与IP地址的转换

  • 邮件传输

  • DCHP协议


思维导图

画了一张,xmind格式下载链接->link

以上是关于计算机网络.五层协议栈模型简介的主要内容,如果未能解决你的问题,请参考以下文章

网络协议栈基本知识

HTTP从入门到入土——五层网络模型

再探计算机网络

2017.3.16-morning

网络模型,IP命令,SS命令入门基础

计算机网络基础