这两天把计算机网络复习了一遍,总结一下,方便之后查看;html
提及计算机网络,离不开IOS七层模型和TCP/IP四层模型,这里我会以IOS七层模型,逐层解释面试
1、物理层(这一层偏硬件,没有什么讲的)算法
2、数据链路层数据库
首先介绍这一层主要三个功能:封装成帧、透明传输和差错监测;编程
封装成帧:是在数据首尾加上帧首部(SOH)和帧尾部(EOT),而后交给物理层传输,这里会涉及到一个最大传输单元MTU(Maximum Transmission Unit)的概念,数据链路层的数据帧不是无限大的,以太网MTU通常为1500字节;windows
透明传输:其实就是解决若是在帧数据中也出现了帧首部(SOH)和帧尾部(EOT)标记时,怕引发偏差,破坏数据完整性,加上相似转义字符,实际处理是,若是提早出现EOT字符,则在前面加上一个ESC字符,若是数据中自己出现了ESC,则多加上一个ESC,相似在windows系统下编程时,字符中用两个“\\”来处理“\”的问题;缓存
差错监测:最简单的监测方法就是采用奇偶校验码,就是简单的将一个数据的全部0,1比特位求和,看最后是奇数仍是偶数,这种监测比较粗糙,好比若是出现了偶数次差错,最后的检验码仍然是正确的,针对这个问题,就引入了精确度更加高的循环冗余校验码CRC,首先要选定一个用于校验的多项式G(x),而后用多项式的系数采用模“2”除法,简单点理解。就是一次计算多项式最高项次数个比特位,显然,最高项次数越高,检测结果越准确,可是计算成本也高,具体计算细节在这就很少介绍了;服务器
数据链路层主要是管理相邻节点间的数据通讯,利用以太网协议解决数据当前一跳的问题网络
简单来讲,就是在帧数据报首部加上目标MAC地址和源MAC地址,每个路由器内部都有一个MAC地址表,能够查询到MAC地址对应的硬件接口,这样就能够完成将帧数据今后节点传送到下一节点的动做;测试
3、网络层
网络层主要解决数据在网络中具体传输路径的问题,首先看IP协议的位置和具体组成:
咱们来依次解释各关键部分表明的意思:
4位版本:指的是IP协议的版本,通讯双方必须版本一致,当前主流版本是4,即IPv4,也有IPv4;
4位首部长度:能够表示的最大数值是15,表示的是IP协议首部长度,单位是“4字节”,也就能够计算出IP协议首部最长也只能是60字节;
16位总长度:最大数值是65535,表示的是IP数据报的总长度(IP首部+IP数据);
16位标识:用来惟一地标识主机发送的每一份数据报。一般每发一份报文,它的值会加1;
3位标识:标志一份数据报是否要求分段。
13位位偏移:若是一份数据报要求分段的话,此字段指明该段偏移距原始数据报开始的位置。
8位生存时间(TTL:Time to Live):用来设置数据报最多能够通过的路由器数。由发送数据的源主机设置,一般为3二、6四、128等。每通过一个路由器,其值减1,直到0时该数据报被丢弃。
8位协议:占8比特。指明IP层所封装的上层协议类型,如ICMP
、IGMP
、TCP
、UDP
等。
源IP地址、目标IP地址:各占32比特。用来标明发送IP数据报文的源主机地址和接收IP报文的目标主机地址。
可选项:占32比特。用来定义一些任选项:如记录路径、时间戳等。这些选项不多被使用,同时并非全部主机和路由器都支持这些选项。可选项字段的长度必须是32比特的整数倍,若是不足,必须填充0以达到此长度要求。
总的来讲,IP协议主要包含了我从哪里来(源IP),要到哪里去(目标IP),我能存活多久,我是什么等这些问题,这里的IP地址和以太网的MAC地址不一样,在以太网协议中,在每一跳中,MAC地址都是变化的,指向当前节点和下一节点,可是IP协议的地址不发生变化,一直是发送方和接收方的IP地址;
那么我知道了目标的IP地址,可是我不知道他的MAC地址,如何解决IP地址和MAC地址相互映射的问题呢?接下来就要谈到ARP协议(地址解析协议)和RARP协议(反向地址转换协议)协议了;
这里就要介绍ARP缓存表了,ARP缓存表记录了IP地址和MAC地址的映射关系,当某一节点接受到消息以后,就会从IP协议中获得目标的IP地址,此时查询ARP缓存表,若是其中有对应的MAC地址,就直接获得了MAC地址,若是没有找到,则会广播发出包含ARP协议的信息,直到信息传达到目标的IP地址,此时接收方就会对该节点单一回传一个包含本身MAC地址的信息,而后再在ARP缓存表中记录上此条映射关系,简单点说,就是兄弟(接收方),我想给你寄快递,可是我不知道你的地址,我只知道你叫什么,能够把你的地址告诉我么,而后把这条信息广播出去,等到你兄弟接受到这条信息以后,他会偷偷告诉你一我的,他的地址;
而RARP协议主要是设置一台新的机器时,只有新机器的MAC地址,而没有IP地址时,向路由器发送一个包含RARP协议的信息,而后路由器返回他的IP地址给你,就是你的IP地址了。好比咱们的电脑在家,在办公室,在公共场所连入WIFI时,都会使用到这个协议,简单点说,就是兄弟(路由器),我买新房子了,可是我知道我这小区叫什么名字,你告诉我一下呗,而后兄弟告诉你,这个小区叫什么;
从上面咱们能够知道IP协议并不提供可靠传输,发送方传送出去的东西,并不知道接收方究竟是否接收到了,若是没接收到,那么没接收到的缘由是什么,好比关机等等,此时就要用到ICMP协议了,
一个新搭建好的网络,每每须要先进行一个简单的测试,来验证网络是否畅通;可是IP协议并不提供可靠传输。若是丢包了,IP协议并不能通知传输层是否丢包以及丢包的缘由。 因此咱们就须要一种协议来完成这样的功能–ICMP协议。
ICMP协议的功能主要有:
简单点说,就是兄弟,我想给你寄快递,你那边能够收到么?要是不能收到,是什么缘由呢?是你不在家,仍是怎么?
对于ICMP协议最常的应用就是Ping命令和Traceroute命令(Windows 系统下是Tracert);
最后,咱们来解决最关键的问题,知道了目标IP地址,目标MAC地址,网络状况良好,万事具有了,那咱们的信息在网络层到底按照什么路线来传递呢,接下来咱们介绍路由表和相应的路由算法;
路由表主要记录目的IP地址和下一跳的IP地址的映射关系,在网络层中,每个点表明一个网络、路由器或者计算机,每一条边表示一条网络路径,路由算法实际就是图论算法,可是因为网络环境复杂,因此比图论算法要复杂一些,
首先引入自治系统(AS:autonomous system)的概念,一个自治系统就是处于一个管理机构控制之下的路由器和网络群组,在自治系统内部的网关协议称为内部网关协议(RIP、OSPF),在自治系统外部的网关协议称为外部网关协议(BGP);
RIP协议采用的距离矢量(DV)算法,此算法的核心公式就是Dij = min(Dix+Dxj) = Dix + min{Dxj};这个公式的含义就是从节点i到达节点j,路径节点x时,此时的距离等于从节点i到达节点x的距离加上从x到达j的全部路径中的最短距离;
不过RIP协议是将网络的跳数做为DV算法的距离,RIP协议认为跳数大于15时的路由为不可达路由,DV算法实现简单,开销也很小,具体算法细节就不在这里展开了,不过这个算法的缺点也是显而易见的,跳数最多为15,限制网络的规模,“坏消息”(如某处节点损坏),须要跳数大于15时,才将此节点设置为不可达,更新收敛时间过长;
OSPF协议采用的算法是Dijkstra算法,它是一个著名的图算法,其实核心就是广度优先搜索(BFS)算法和贪心算法的结合,简单点说就是划分连个集合S一、S2,初始时以发送方单一节点为集合S1,其余全部节点为集合S2,为发送点为中心的可见点(仅一跳可达的节点)中,距离最近的点,加入到集合S1中,而后再以集合S1中的节点的全部可见点中,重复此操做,直到S2为空集时中止;
OSPF协议使用的是链路状态协议(LS),链路状态协议就是基于Dijkstra算法,若是说距离矢量路由协议提供的是路标,那么链路状态路由协议提供的就是地图,每个路由器都包含整个网络拓扑信息,而地图的搭建就是经过OSPF协议完成的,
OSPF的包类型:
RIP协议和OSFP协议的对比
外部网关协议就是在每一个自治系统内部,选出两个BGP发言人,简单点说,就是选两个话事人,信息能不能传输进个人自治系统,按照什么规则传入,都是由这两个话事人说了算;
最后总结一下,在网络层中一共提到三个表:
某条数据到达某一节点,该节点先从IP协议头部获得目的IP地址,查询路由表获得下一跳的IP地址,而后查询ARP缓存表获得下一跳的MAC地址,而后封装成帧,查询MAC地址表获得对应的硬件接口,这三个表的配合使用,就能完成一条数据从发送方传送的接收方的完整操做。
4、传输层
传输层是管理端到端的通讯链接,这里的端是端口的意思,不是指物理端口,而是指每个进程的端口号,因此传输层解决的是进程与进程之间通讯链接的问题,经常使用的端口号:FTP(21),HTTP(80),HTTPS(443),DNS(53)等等。
传输层的两大协议分别是UDP(User Datagram Protocol)协议和TCP(Transmission Control Protocol)协议;
UDP协议是一个很是简单的协议,它是一种无链接协议,不能保证可靠的交付数据,“想发就发”,没法保证数据是否在网络中丢失,它是一种面向报文传输的,首部开销很小。
TCP协议是计算机网络中很是复杂的一个协议,他是一个面向链接的协议,提供可靠的传输服务,TCP协议是面向字节流的协议。
关于TCP头部各部分的解释细节,网上有不少,我就简单的说一下,源端口,目的端口号没啥说的,序号,指的是此条数据是相对于字节流的首字节序号,确认号是相对于发送方的,TCP是双向链接的协议,发送方和接收方是相对的,确认号就是告诉对方,在这个确认号以前的信息我已经收到了,我指望收到确认号以后的信息,数据偏移是指数据偏离首部的位置,其实也就是代表了TCP首部的实际长度,保留字段是预留出来的字段,方便之后开发新功能,TCP标记,URG=1表示紧急数据,优先传送,ACK=1表示确认号生效,RST=1表示从新创建链接,SYN=1表示链接请求报文,FIN=1表示释放链接,窗口大小表示容许对方发送的数据量,检验和是检验TCP头部是否传输错误,紧急指针是配合URG标记使用的,指定紧急数据在报文中的位置;选项最多40字节,支持将来拓展。
这里介绍两个概念:中止等待协议和连续ARQ协议
中止等待协议简单来讲就是发送方传送一条数据,而后停下来等待,等接收方接收到消息以后,回传确认信息,发送方接收到确认消息以后,再接着传送下一条信息,如此反复,显然这个对信道的利用率很低,而连续ARQ协议则不一样,它会设置一个滑动窗口,在窗口大小内的数据都能传输,采用累积确认的方式,这样极大提升的对信道的利用效率,TCP协议采用的就是连续ARQ协议,滑动窗口以字节为单位;
接下来介绍TCP协议的几个重要功能:
最后是TCP链接的创建,也就是常常说的“三次握手,四次释放”;
参考: