计算机网络体系分类:
计算机网络整个体系有两个大的分类:一个是国际组织制定的OSI七层模型,一种是实际使用中的TCP/IP四层模型。
OSI七层模型 | TCP/IP四层模型 |
---|---|
应用层 | |
表示层 | 应用层 |
会话层 | |
传输层 | 传输层 |
网络层 | 网络层 |
数据链路层 | 物理接入层 |
物理层 |
物理层:
物理层主要是实现主机和网络之间的物理连接,规定一些与传输媒体接口有关的一些特性。
通信方式:
-
单工通信: 只能由A主机向B主机发送消息,通信是单向的。常见的方式有遥控,广播电视,广播电台等。
-
半双工通信: 同一时间只能是由A主机向B主机或者是B主机向A主机发送信息,不能同时发送消息。常见的方式有对讲机,集线器等
-
全双工通信: A主机和B主机可以实现在同一时间内既接收消息,又发送消息,极大的提升了通信效率。常见的方式有电话,交换机
常见引导型传输媒体:
双绞线:
分为屏蔽双绞线(STP)和非屏蔽双绞线(UTP),屏蔽双绞线就是在非屏蔽双绞线外边又加了一层屏蔽层
tips:为什么双绞线将两根线绞起来就可以有效减少相互之间的电磁干扰?
- 首先,将两根线绞起来可以减少相互的移动,这样就可以降低因切割磁场产生的干扰
- 其次,将两根螺旋状绞起来可以让两根线产生的磁场相互抵消,因此可以减少相互之间的电磁干扰
同轴电缆:
由内导体铜制芯线,绝缘层,网状编织的外导体屏蔽层,以及塑料保护外层组成。有良好的抗干扰性,被广泛用于较高速率的传输。
光缆:
由非常透明的石英玻璃拉成细丝,主要由纤芯和包层构成双层通讯柱。可以分为单模光纤和多模光纤。
信道复用技术:
-
频分复用: 根据传输的波的频率的不同,将不同频段的波用于不同的通信。
-
时分复用: 将时间分割为时间段,规定在某个时间段内发送什么样的信息,根据时间段来进行信息类别的区分,就是进行时间片的轮转,也称为同步时分复用
-
统计时分复用: 基于时分复用的一种改进,由于基本的时分复用并没有考虑到每个时间段内是否有信息发出,例如说每个时间段是20,但是发送消息只占用其中的2,那么剩下的18就处于空闲时间。统计时分复用就是基于这种考虑而设计的,他允许用户有数据时就将数据发送到缓存中,然后会依次扫描输入缓存,把缓存中的数据放入到STMD帧中,若没有就跳过,每当一个帧满了就把这个帧发出去。STMD帧不是分配的固定时序,而是根据需要动态的分配时隙,也称之为异步时分复用
-
光分复用: 就是光的频分复用,根据光谱中频率的不同,用不同频率的光来携带不同的信息。
数据链路层:
数据链路层主要是将上层的数据转化为数据帧发送到链路上,以及把接受到的帧中的数据取出并交给网络层解析。
通信方式:
- 点对点通信: 通信方式是点到点的,也就是只能是两个点之间的通信。常见的就是PPP协议
- PPP协议:PPP协议是为两个对等节点提供流量传输的链路层封装协议:(1)PPP协议支持错误检测,但不具备纠错能力 (2)PPP协议支持身份认证机制,常用的有CHAP和PAP两种,CHAP比PAP更安全。
- PAP认证采用两次握手,需要认证的一方将自己的用户名和密码发送给认证方,认证方在自己的数据库中查找相应信息,若存在则通过认证。PAP认证只在建立连接的时候进行,而且不限制认证请求次数,可以通过暴力破解。
- CHAP认证采用三次握手机制,首先主认证方发送挑战报文,内容包含(报文类型-挑战报文,认证id,随机数,需要认证的用户名),被认证方在接收到报文后从依据其中的认证用户名从自己数据库中查找相应密码,若没有则采用默认密码,用得到的密码结合报文中的认证id,随机数,使用MD5算法生成Hash值;被认证方生成Hash值后回复挑战报文,向主认证方发送响应报文,内容包含(报文类型-响应报文,认证id,Hash值,被认证方用户名),主认证方在接到响应报文后去自己数据库中查找对对应用户名的密码,结合认证id,随机数生成Hash值,对比响应报文中的Hash值;若两个Hash值相同则通过认证,否则不通过认证。
- PPP协议:PPP协议是为两个对等节点提供流量传输的链路层封装协议:(1)PPP协议支持错误检测,但不具备纠错能力 (2)PPP协议支持身份认证机制,常用的有CHAP和PAP两种,CHAP比PAP更安全。
- 广播通信: 广播通讯,也就是可以同时实现一对多的通信。常见的就是CSMA/CD(载波监听多点访问/冲突检测)
- CSMA/CD工作流程:
- 载波监听,所有的网络节点在想要发送数据前需要一直监听共享信道是否正在使用,只有确认共享信道无人使用才可以发送消息
- 若是共享信道在一段时间内无信号占用,则该网络节点可以发送数据;若是共享信道一直忙碌,则节点需要一直监听直到共享信道空闲
- 冲突检测,如果两个节点同时向空闲的共享信道发送数据,此时就会发送碰撞,使双方信息包都受损,因此在传输过程中会不断监听信道以检测碰撞冲突
- 若是一个节点在传输过程中检测到碰撞冲突,则立即停止该次传输,并向信道中发出一个拥挤信号,以确保其他所有的节点也发现该冲突
- 多路存取,在检测到冲突并等待一段时间后,需要发送数据的节点会尝试进行新的发送。等待时长采用二进制指数退避策略算法来确定
- CSMA/CD工作流程:
核心要解决的问题:
-
封装成帧: 在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。接收端在接受到后就可以方便准确的确定帧的首尾,也称为帧定界符。同时定义出了最大传输单元(MTU)–表示一次可以传输的最大长度上限。
- 常用的帧同步方法:字节计数法,字符填充的首尾定界符法,比特填充的首尾标志法,违例编码法
- 字节计数法:首先用一个特殊字段表示一帧的开始,然后使用一个字段来表明本帧内的字节数,接收端据此来判定帧结束的位置
- 字符填充的首尾定界符法:用特定字符表示一帧的开始和结束,为了防止信息位中出现定界符产生误判,可以在数据位中填充转义符来区分
- 比特填充的首尾标志法:类似于字符填充的首尾定界符法,只是用一组特定的比特模式来表示帧的开始和结束,同样可以在信息位中填充比特来消除信息位中可能出现的误判
- 违例编码法:在物理层采用特定比特编码时采用。比如采用曼彻斯特编码时,将数据比特1编码成(高,低)电平对,将数据比特0编码成(低,高)电平对,因此(高,高)(低,低)电平对在数据编码中都是违例的,可以用这些编码的序列来标记帧的开始和结束
- 常用的帧同步方法:字节计数法,字符填充的首尾定界符法,比特填充的首尾标志法,违例编码法
-
透明传输: 由于使用特定的字符来表示帧的开始和结束,所以传输的内容中不能出现和帧定界符相同的字符,但这显然是不可能的,为了解决这个办法,就可以在内容中和帧定界符一样的字符前边加上规定好的转义字符,这种方法称为字符填充或者是字节填充
-
差错检测: 比特在传输过程中可能产生差错,差错检测就是用于检测出现的差错,以便及时的重传,最常用的差错检测算法就是CRC(循环冗余检验)
- CRC循环冗余校验:关于CRC校验过程可以参看最通俗的CRC校验原理剖析总体流程如下:
- 发送和接收方选定一个用于校验的除数(二进制形式长度为k位),多以多项式形式表示,因此也称为多项式生成式
- 发送方在要发送的m位长度的数据帧后边添加(k-1)位的0,形成一个(m+k-1)位长的帧序列,以
模2除法
除以k位长的除数,得到的余数即为该数据帧的CRC校验码。要注意的是,余数的位数一定要是比除数位数只能少一位,哪怕前面位是0,甚至是全为0(附带好整除时)也都不能省略。 - 把上一步得到的CRC校验码附加到原本要发送的m位长的数据帧后边,就得到了最终要发送出去的数据帧。接收方在接收到数据帧后也用
模2除法
除以选定的除数,若是没有余数,说明数据传输无误,否则数据出现问题。 - 二进制加/减法运算规则和异或运算一样,在同一位置,相同为0,不同为1。
网络层
网络层主要是向上只提供简单灵活的,无连接的,尽最大努力交付的数据报服务。
IP协议(网际协议):
IP协议是TCP/IP体系中最主要的协议之一,一切在IP之下,一切又在IP之上。我们常说的应该是IP协议族,还包含配套的协议:
-
ARP(地址解析协议):将网络的IP地址转化为实际的物理地址(MAC地址),并存储在MAC地址表中。
-
ICMP(网际控制报文协议):用于进行差错情况和异常情况的反馈,分为询问报文和差错报告报文。
-
IGMP(网际组管理协议):用于控制和管理多播和组播的协议。
网络地址(IP地址)主要分为五类:
-
A类:前8位为网络位,后24位为主机位,首位为0
-
B类:前16位为网络位,后16位为主机位,前两位为10
-
C类:前24位为网络位,后8位位主机位,前三位为110
-
D类:前四位为1110,用于多播地址
-
E类:前四位为1111,保留为以后使用
路由选择协议:
路由选择协议分为内部网关协议(IGP)和外部网关协议(EGP)
内部网关协议:
主要是有RIP协议和OSPF协议
-
RIP协议(路由信息协议): 基于距离矢量的协议
-
OSPF(开放最短路径优先协议): 基于链路状态的协议
外部网关协议:
主要是边界网关协议(BGP),将一个大的网络分为多个小的自治域,每个自治域内有一个网关路由负责和其他的自治域的网关进行通讯。
传输层
网络层主要是为主机之间提供逻辑通讯,而传输层为应用程序之间提供端到端的逻辑通讯。主要是两种类型的通讯方式,面向连接的TCP协议和面向无连接的UDP。
端口号:
端口号按照使用地方的不同分为两大类:服务端端口号,客户端端口号。
按照占用时长又可以分为熟知端口号(0-1023),登记端口号(1024-49151),短暂端口号(49152-65535)
常见端口:
-
FTP(文件传输协议):20,21------其中20端口用于传输数据,21端口用于命令控制
-
Telnet(远程登录协议):23
-
DNS(域名解析服务):53
-
TFTP(简单文件传输协议):69
-
HTTP(超文本传输协议):80
两种协议:
UDP(用户数据报协议):
- UDP是无连接的
- UDP使用尽最大努力交付,但是不保证可靠交付
- UDP是面向报文的
- UDP没有拥塞控制
- UDP支持一对一,一对多,多对一,多对一的交互通讯
- UDP首部的开销小
TCP(传输控制协议):
- TCP是面向连接的
- 每一条TCP连接只能由两个端点,每一条TCP连接只能是点对点的 T C P 连 接 : : = { s o c k e t 1 , s o c k e t 2 } = { ( I P 1 : p o r t 1 ) , ( I P 2 : p o r t 2 ) } TCP连接::= \{ socket_1,socket_2 \} =\{ (IP_1:port_1),(IP_2:port_2)\} TCP连接::={socket1,socket2}={(IP1:port1),(IP2:port2)}
- TCP提供可靠交付的服务
- TCP提供全双工通信
- 面向字节流
关于TCP常见的面试问题
可靠传输的实现机制:
-
停止等待协议: 每发完一个分组就停止发送,直到收到上一个分组的确认信息。若超过规定时间没有接收到确认信息,边认为是分组丢失,开始重传。
-
连续ARQ协议: 发送方采用滑动窗口的形式,处于滑动窗口的分组可以直接发送出去;接收方一般采用累积确认的方式,也就是说接受方不必对接收到的每一个分组都进行确认,而是对按序到达的最后一个分组进行确认,而发送方每接收到一个确认,窗口就向前滑动一定距离。
-
流量控制: 协调发送方和接收方的收发速率,利用滑动窗口来协调,使用探测报文来探测当前应该发送的速率,采用Nagle算法
-
拥塞控制:
当网络中某一资源的需求超出了该资源所能提供的可用部分,这时网络的性能就要开始变坏,这种情况就叫做拥塞。而拥塞控制就是为了减少或者避免拥塞对网络性能的影响而做出的一种控制手段。 -
拥塞控制思路:发送方维持一个叫做拥塞窗口的状态变量,拥塞窗口的大小取决于网络的拥塞程度,并且在动态的变化。发送方让自己的发送窗口等于拥塞窗口,如果在考虑接收方的接收能力,一般发送窗口还要小于拥塞窗口。
-
慢开始: 当主机开始发送数据的时候,由小到大的增大发送窗口,也就是由小到大的增大拥塞窗口。接收方接收到一个报文之后就回传一个确认报文,发送方每接收到一个确认报文,就将拥塞窗口加1,这样每经过一个传输轮次之后,拥塞窗口就增大一倍。
-
拥塞避免: 思路是让拥塞窗口缓慢的增大,即每经过一个往返时间RTT就把发送方的拥塞窗口加1,而不是加倍,这样拥塞窗口就是线性缓慢增加,比慢开始的增长速率缓慢的多。
-
慢开始门限: 为了防止拥塞窗口增长过大引起网络拥塞,还需要设置一个慢开始门限
- 拥塞窗口<慢开始门限时,使用慢开始算法
- 拥塞窗口>慢开始门限时,使用拥塞避免算法
- 拥塞窗口=慢开始门限时,两种算法都可以
-
快重传: 要求收到方每收到一个时序的报文段之后就立即发出重复确认,而不要等到自己发送数据时才进行捎带确认。而发送方只要一连收到三个重复确认就应当立即重传对方尚未接受到的报文,而不必等待为报文设置的重传计时器到期。
-
快回复: 与快重传配合使用,当发送方连续收到三个重复确认的时候,就执行“乘法减小”算法,将慢开始门限减半。将拥塞窗口设置为慢开始门限减半之后的值,并开始指向拥塞避免算法。
TCP的连接管理:
连接三次握手:
- 客户端请求建立连接:SYN=1,seq=x;客户端处于SYN_SEND状态
- 服务器对客户端的请求进行响应:SYN=1,ACK=1,seq=y,ack=x+1;服务端处于SYN_RCVD状态
- 客户端对服务器端的响应信息进行回应:ACK=1,seq=x+1,ack=y+1;客户端在发出消息后处于ESTABLISHED状态,服务端在接收到消息后也处于ESTABLISHED状态
注:
- SYN为同步信息,在建立连接过程中始终为1
- 在服务端处于SYN_RCVD状态后便会一直等待来自客户端的确认信息,若是没有收到则会重传SYN包,因此无论是第二次握手数据丢失还是第三次握手数据丢失,都会触发服务端的重传机制,在重传次数超过规定次数后,服务会关闭该连接。
断开连接四次握手:
- 客户端请求断开连接: FIN=1,seq = u;客户端处于FIN_WAIT1状态
- 服务端对客户端的请求应答:ACK=1,seq=v,ack=u+1;服务端处于CLOSE_WAIT,客户端收到服务端报文后处于FIN_WAIT2状态
- 服务端请求断开连接:FIN=1,ACK=1,seq=w,ack=u+1;服务端处于LAST_ACK状态
- 客户端对服务端的请求应答:ACK=1,seq=u+1,ack=w+1;服务端接收到报文后处于CLOSED状态,客户端在发出报文后处于TIME_WAIT状态,在经过2MSL时长未收到服务端报文后转为CLOSED状态
应用层
DNS协议
DNS协议全称为Domain Name System(域名系统),主要是用于将IP地址映射为方便记忆的域名字符串。DNS按照分类
DNS的查询流程
HTTP协议
应用层有多种协议,常用到的就是HTTP以及HTTPS。
HTTP协议报文格式
请求报文 | 相应报文 |
---|---|
请求行(用于区分是请求报文还是响应报文,在响应报文中为状态行) | 状态行 |
首部行(用来说明浏览器,服务器或者是报文主体的一些信息) | 首部行 |
空行(用于隔开请求实体和首部行) | 空行 |
实体主体(用于一些请求或者是响应的的参数内容等) | 实体主体 |
常见状态码
1xx:表示通知信息,例如表示收到或者是正在处理
2xx:表示成功,例如表示接受或知道了
3xx:表示重定向,例如表示完成请求还需要采取进一步的行动
4xx:表示客户端的差错,例如表示请求中有语法错误或不能完成
5xx:表示服务器端的差错:例如表示服务器失效无法完成请求
HTTPS协议
HTTPS协议就是对HTTP协议的加密,更加安全可靠,采用HTTP+SSL(安全套接字层)来保证数据的安全性。