这个博客好像停滞了几个月了,实在惭愧,边学边写,有点顶不住,之前都用印象笔记粗略的写学习总结,现在写成博客形式,一是让自己重新回顾下知识点准备面试;二是把笔记中的排版整理的更清晰一点,方便自己以后查看;三是驱动以后长久的职业规划。这次从计算机网络开始整理知识点,由于本人也是刚开始学习,文中有理解不正确的地方欢迎指出,相互交流,相互学习:
我们都知道计算机网络的OSI七层模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。还有目前市场通用的TCP/IP四层模型:应用层、传输层、网络层、网络接口层。
那么问题来了,为什么会出现分层设计的模型?设计者当然不是说吃了饭没事做要分这么多层,这都是由网络中数据传输的实际问题驱动的。试想一下:一台计算机A给另外一台计算机B发送消息,中间需要考虑哪些问题?比如:怎么识别目标计算机、目标计算机状态(能不能接受数据)、数据通路是不是顺畅的、传输过程中数据会不会出现异常等等。这些都是通信过程中要考虑的,为了方便实现各个功能,采用分层设计,每层实现不同的功能,各层之间互不干扰。设计原则是:1)各层之间是相互独立的;2)每一层要有足够的灵活性;3)各层之间完全解耦。
了解了分层设计之后,我们正式学习计算机网络:
OSI七层模型:应用层————为用户提供接口和服务
表示层————数据处理(编码解码、加密解密等)
会话层————管理(建立、维护、重连)通信会话
传输层————管理端到端的连接
网络层————数据路由(决定数据在网络中的路径)
数据链路层————管理相邻节点之间的数据通信
物理层————物理设备(数据通信的光电物理特性)
但是OSI模型并没有成为广为应用的标准模型,我们目前市场使用的都是TCP/IP四层模型。所以我们重点介绍TCP/IP四层模型。
TCP/IP层模型:应用层(主要协议:HTTP、FTP)————对应OSI应用层、表示层、会话层
传输层(主要协议:TCP、UDP)————对应OSI传输层
网络层(主要协议:IP、ICMP)————对应OSI网络层
网络接口层(主要协议:Ethernet、ARP、RARP)——对应OSI数据链路层和物理层
在具体学习各层模型之前,有必要先了解现代互联网的网络拓扑:边缘部分和核心部分。边缘部分是指用户直接能够接触的部分,比如家、学校、企业。普通用户接触不到的为核心部分。以家庭为例:家中的电脑、手机、ipad通过路由器经过一个或者多个网关之后连接到地区ISP(Internet Service Provider,比如中国电信、中国联通、中国移动等),地区ISP再连接到主干ISP(国家、地区等)。比较常用的模式有C/S模型(Client——Server模式),对等连接(P2P模式)。
还要了解下网络的性能指标:
1.速率:网速单位是Mbps(M bit/s,每秒多少Mbits)。通常100M光纤,实际网速应该是100/8=12.5M B/s。
2.时延:包括网络中的发送时延、传播时延、排队时延、处理时延。
发送时延=数据长度(bit)/发送速率(bit/s); 传播时延=距离/传播速率(bit/s),传播速率受限于计算机网卡;
排队时延:数据包在网络中等待被处理的时间;处理时延:数据包达到设备或者目的机器被处理所需的时间;
总时延:发送时延+传播时延+排队时延+处理时延
3.往返时间RTT(Route-Trip-Time):数据报文在端到端通信(window cmd下 ping 命令可查看)中往返一次的时间, RTT是评估网络质量的一项重要指标。
网络接口层——物理层:TCP/IP模型的的最底层,主要用途:1).连接不同的物理设备(电缆、光纤、双绞线);2).传输比特流(0110...)
信道:往一个方向发送信息的媒体,一个通信线路包含一个接收信道和一个发送信道。
通讯方式:单工(单向通信)、半双工(双向,但不能同时发送或接收)、全双工(双方可以同时发送和接收信息)
物理层采用分用——复用技术(多个PC端通过一条信道通讯),提高信道利用率。
网络接口层——数据链路层:封装成帧、透明传输、差错监测。
1.封装成帧:“帧”是数据链路层数据的基本单位(比特位是物理层数据的基本单位)。发送端在网络层的一段数据前后添加特定标记形成帧;接收端根据前后特定标记识别出帧。帧首部和帧尾部是特定的控制字符(特定比特流,帧首部SOH:00000001,帧尾部EOT:00000100)。但是这里有个问题:如果帧的数据报中也出现了控制字符(首部和尾部),怎么处理,这里就要涉及到透明传输的概念。
2.透明传输:控制字符在帧数据中,要当做不存在的处理。对数据中的控制字符进行特殊处理——在数据报文中的控制字符前加上转义字符ESC。编程中,"\"是转义字符,“\n”换行,"\t"制表符,输出 \ ,就要cout<<“\\”; 输出 \\ ,就要cout<<"\\\".
3.差错监测:物理层只管传输比特流,不管数据是否出错,数据链路层负责差错监测。有奇偶校验码和循环冗余校验码CRC两种方法。奇偶校验码只能监测奇数个数的错误,偶数个监测不出,不够准确。CRC原理就不详细介绍了,CRC的检错能力与位串的阶数有关。其次数据链路层只进行数据监测,不进行纠正。
MTU(Maximum Transmission Unit,最大传输单元):数据链路层的数据帧最大为MTU,数据帧过大或者过小都会影响传输的效率(以太网MTU一般为1500字节)。路径中的MTU取决于经过途中MTU的最小值(木桶效应)。
MAC地址(物理地址、硬件地址):每个设备都有唯一的MAC地址,MAC地址共48位,使用16进制表示,12个数,两个一组用—连接,形如:30—B4—9E—ED—85—CA。4位比特位表示一个16进制位,4*12=48bits。
数据链路层——以太网协议(Ethernet):1)以太网是一种应用广泛的局域网技术;2)以太网是一种应用于数据链路层的协议;3)使用以太网可以完成相邻设备(节点)的数据帧传输。
协议格式: 目的地址 源地址 类型 帧数据 CRC(循环冗余校验码)
6字节(48位) 6字节(48位) 2 46-1500 4
MAC地址表(路由器拥有的):MAC地址与硬件接口的映射对应关系。 MAC地址——接口
A、B、C三个PC机都连接到同一个路由器,A如果给C发数据,A发送的数据经过路由器后,路由器怎么判断数据是发给谁的(数据链路层实现节点之间的通信)?
PC机A通过网卡发出数据,数据帧到达路由器后,路由器取出前6字节(目的地址,即MAC地址48位),路由器查询自己的MAC地址表,找到的对应的网络接口发送数据。如果路由器MAC地址表不存在目标机机网络接口的MAC地址,路由器将广播A的数据包到路由器连接的所有其他端口,路由器收到来自各个端口的回应(只有C才会回应有效应答),并将目的MAC地址和端口记录(更新MAC地址表)。