OSI和TCP/IP模型各个层之间的协议和功能

介绍一下网络OSI模型
OSI七层模型
为了使得多种设备能通过网络相互通信,和为了解决各种不同设备在网络互联中的兼容性问题,国际标准化组织制定了开放式系统互联通信参考模型(Open System Interconnection Reference Model),也就是 OSI 网络模型,该模型主要有 7 层,分别是应用层、表示层、会话层、传输层、网络层、数据链路层以及物理层。
每一层负责的职能都不同,如下:
- 应用层,负责给应用程序提供统一的接口;
- 表示层,负责把数据转换成兼容另一个系统能识别的格式;
- 会话层,负责建立、管理和终止表示层实体之间的通信会话;
- 传输层,负责端到端的数据传输;
- 网络层,负责数据的路由、转发、分片;
- 数据链路层,负责数据的封帧和差错检测,以及 MAC 寻址
- 物理层,负责在物理网络中传输数据帧;
由于 OSI 模型实在太复杂,提出的也只是概念理论上的分层,并没有提供具体的实现方案。
事实上,我们比较常见,也比较实用的是四层模型,即 TCP/IP 网络模型,Linux 系统正是按照这套网络模型来实现网络协议栈的。
介绍一下TCP/IP模型
TCP/IP协议被组织成四个概念层,其中有三层对应于ISO参考模型中的相应层。ICP/IP协议族并不包含物理层和数据链路层,因此它不能独立完成整个计算机网络系统的功能,必须与许多其他的协议协同工作。TCP/IP 网络通常是由上到下分成 4 层,分别是应用层,传输层,网络层和网络接口层。
- 应用层 支持 HTTP、SMTP 等最终用户进程
- 传输层 处理主机到主机的通信(TCP、UDP)
- 网络层 寻址和路由数据包(IP 协议)
- 链路层 通过网络的物理电线、电缆或无线信道移动比特
计算机网络为什么要分层?优点?
- 各层之间是独立的。只需要独立实现本层功能,不需要知晓其他层的实现细节。由于每一层只实现一种相对独立的功能,因而可将一个难以处理的复杂问题分解为若干个较容易处理的更小一些的问题。这样,整个问题的复杂程度就下降了。
- 灵活性好,易于实现和维护。当某层发生变化时,只要层间接口关系保持不变,则此层以上或以下层不受影响。
- 当某层提供的服务不再需要时,甚至可以将这层取消。
- 结构上可分割开。各层都可以采用最合适的技术来实现。
- 易于实现和维护。这种结构使得实现和调试一个庞大而又复杂的系统变得易于处理,因为整个的系统已被分解为若干个相对独立的子系统。
- 能促进标准化工作。因为每一层的功能及其所提供的服务都已有了精确的说明。
简述一下层次路由的原理(叙述一下与自治系统相关的内部网关协议和外部网关协议)单工、半双工、全双工通信?
单工:一方只能发送数据,另一方只能接收数据,即单向的;
半双工:双方都可以既发送数据又接收数据,但是同一时间只能有一方发送数据;
全双工:双方可以同时发送或接收数据
协议(protocol)
通信双方就如何进行通信的一种约定。网络协议由语法、语义和同步三部分组成。
端口 和 套接字socket
端口:用于标识主机中的应用进程
套接字:唯一标识网络中的一个主机和它上面的一个进程。套接字Socket=(主机IP地址,端 口号)
介质访问控制是共享式局域网必须解决的关键问题之一。根据所学知识,回答下述问题:
什么是介质访问控制问题?
用于在多路访问信道问题上确定下一个使用者的问题。
简述CSMA协议(载波侦听协议)的工作原理

CSMA协议分为1-坚持CSMA、非坚持CSMA、p-坚持CSMA(适用于分时间槽的信道)
1-Persistence CSMA
① 当一个站有数据要发送时先侦听信道
② 若信道空闲,立即发送数据
③ 若信道忙,持续监听等待直至信道变为空闲
④ 若发生冲突,等待随机时间,返回步骤 1
Non-Persistence CSMA
① 当一个站有数据要发送时先侦听信道
② 若信道空闲,立即发送数据
③ 若信道忙,不持续监听,等待一个随机时间返回步骤 1
④ 若发生冲突,等待随机时间,返回步骤 1
P-Persistence CSMA
p-Persistence 适用于分时间槽的信道
① 当一个站有数据要发送时先侦听信道
② 若发现信道空闲,在下一个时间槽到达时,以 p 的概率发送数据,有 q=1-p 的概率,将发送推迟到下一个时间槽
③ 在新的时间槽如果还是空闲,依然以 p 的概率发送数据,q 的概率推迟。
④ 以上过程一直重复直到发出,或有其他站发送数据,随即等待一段时间,重复以上步骤
p-Persistence 的 p 越小,信道利用率越高,但带来的延迟也越大;p=1 时与 1-Persistence CSMA 等价,但是 p=0 时不与 Non-Persistence CSMA 等价
经典以太网是如何解决介质访问控制问题的?CSMA/CD 简述其工作原理。
CSMA/CD 协议即带冲突检测的载波侦听多路访问(Carrier Sense Multiple Access with Collision Detection)
首先,每个站点发送数据之前必须侦听信道的忙、闲状态。如果信道空闲,立即发送数据,同时进行冲突检测;如果信道忙,站点继续侦听总线,直到信道变成空闲。
如果在数据发送过程中检测到冲突,将立即停止发送数据并等待一段随机长的时间,然后重复上述过程。
即:先听后发,边听边发;冲突检测,延时重发
无线局域网是如何解决介质访问控制问题的? CSMA/CA 简述其工作原理。
CSMA/CA即带冲突避免的载波侦听多路访问。
发送方发送RTS(request to send),听到这个信号的所有设备置位自己的NAV(网络分配向量);接收方如果同意,发送CTS(clear to send),听到这个信号的所有站点置位自己的NAV。当一个站点想要发送数据时,检查自己的NAV,如果置值则不发送,否则发送。
3、4小问这两种协议监听信道是否空闲时有什么区别?
经典以太网使用有线信道,因此可以通过硬件直接检测信道是否空闲以及是否发生冲突;
而无线局域网使用无线信道,由于无线信号的特性和干扰,无法直接检测到碰撞,只能通过避免机制(如退避时间和RTS/CTS)间接减少冲突发生的概率。
CSMA/CD协议可以直接应用到无线局域网中吗?为什么?
以太网与无线局域网的差别主要在:
①两者的传输介质有着本质区别,也正是这种区别,导致WLAN存在新的问题:隐藏站问题和暴露站问题。
②两者传输范围有区别:WLAN中,无线电传输范围有限,一个站不能给所有其他站发送帧,也无法接收来自所有其他站的帧;在有线局域网中一个站发出一帧,所有其他站都能接收到。
③信道检测方式不同:WLAN采用能量检测、载波检测和能量载波混合检测三种检测信道空闲的方式;以太网通过电缆中电压的变化来检测。
④在WLAN中,对某个节点来说,其刚刚发出的信号强度要远高于来自其他节点的信号强度,也就是说它自己的信号会把其他的信号给覆盖掉,但在本节点处有冲突并不意味着在接收节点处就有冲突。
因此,在采用IEEE802.3标准以太网的MAC子层中使用CSMA/CD协议,而在采用IEEE 802.11标准无线局域网的MAC子层使用CSMA/CA协议,这两种协议都是针对网络中共享信道如何分配的问题,但它们的工作原理却有不同:
a.CSMA/CD:带有冲突检测的载波侦听多路访问,是在冲突发生后进行冲突处理,发送包的同时可以检测到信道上有无冲突;
b.CSMA/CA:带有冲突避免的载波侦听多路访问,是在冲突发生前进行冲突处理,发送包的同时不能检测到信道上有无冲突,只能尽量避免。
综上,在WLAN中实现CSMA/CD是比较困难的。
TCP 三次握手过程说一下?
TCP 是面向连接的协议,所以使用 TCP 前必须先建立连接,而建立连接是通过三次握手来进行的。

一开始,客户端和服务端都处于 CLOSE 状态。先是服务端主动监听某个端口,处于 LISTEN 状态
三次握手的过程如下:
1)客户端随机初始化序列号x,将此序号置于TCP头部的序列号字段中seq=x,同时将SYN标志位置为1,客户端向服务端发送SYN包,表示客户端请求建立连接。
2)服务端接收到SYN包后,服务端随机初始化自己的序号y,将其置于TCP头部的序列号字段中Seq=y,将确认应答号字段填入x+1(Ack=x+1),把SYN和ACK标志位都置为1,向客户端发送一个SYN/ACK包,表示服务端已经接收到客户端的连接请求,并准备好建立连接。
3)客户端接收到服务端的SYN/ACK包后,向服务端发送一个ACK包,其中ACK标志位被置为1,表示客户端确认服务端的SYN/ACK包已收到。序列号Seq=x+1(表示收到服务器端的确认号
Ack,并将其值作为自己的序号值), 确认号Ack=y+1(表示收到服务器端序号seq,并将其值加1作为自己的确认号Ack的值)这次的ACK包可以携带客户端到服务端的数据
从上面的过程可以发现第三次握手是可以携带数据的,前两次握手是不可以携带数据的
通过三次握手协议,客户端和服务端都确认了彼此的身份,并同意建立连接,从而可以开始传输数据。
TCP 四次挥手过程说一下?

具体过程:
1)客户端主动调用关闭连接的函数,于是就会发送 FIN 报文,这个 FIN 报文代表客户端不会再发送数据了,进入 FIN_WAIT_1 状态;
2)服务端收到了 FIN 报文,然后马上回复一个 ACK 确认报文,此时服务端进入CLOSE_WAIT 状态。在收到 FIN 报文的时候,TCP 协议栈会为 FIN 包插入一个文件结束符 EOF 到接收缓冲区中,服务端应用程序可以通过 read 调用来感知这个 FIN 包,这个 EOF 会被放在已排队等候的其他已接收的数据之后,所以必须要得继续 read 接收缓冲区已接收的数据;
3)接着,当服务端在 read 数据的时候,最后自然就会读到 EOF,接着 read() 就会返回 0,这时服务端应用程序如果有数据要发送的话,就发完数据后才调用关闭连接的函数,如果服务端应用程序没有数据要发送的话,可以直接调用关闭连接的函数,这时服务端就会发一个 FIN 包,这个 FIN 报文代表服务端不会再发送数据了,之后处于 LAST_ACK 状态;
4)客户端接收到服务端的 FIN 包,并发送 ACK 确认包给服务端,此时客户端将进入 TIME_WAIT 状态;
服务端收到 ACK 确认包后,就进入了最后的 CLOSE 状态;
客户端经过 2MSL 时间之后,也进入 CLOSE 状态;
为什么4次握手中间两次不能变成一次?(第二次和第三次挥手能合并嘛)
服务器收到客户端的 FIN 报文时,内核会马上回一个 ACK 应答报文,但是服务端应用程序可能还有数据要发送,所以并不能马上发送 FIN 报文,而是将发送 FIN 报文的控制权交给服务端应用程序:
- 如果服务端应用程序有数据要发送的话,就发完数据后,才调用关闭连接的函数;
- 如果服务端应用程序没有数据要发送的话,可以直接调用关闭连接的函数,
从上面过程可知,是否要发送第三次挥手的控制权不在内核,而是在被动关闭方(上图的服务端)的应用程序,因为应用程序可能还有数据要发送,由应用程序决定什么时候调用关闭连接的函数,当调用了关闭连接的函数,内核就会发送 FIN 报文了,所以服务端的 ACK 和 FIN 一般都会分开发送。
TCP和UDP的异同点
相同点
TCP和UDP都是传输层协议。
不同点
- 连接:TCP 是面向连接的传输层协议,传输数据前先要建立连接;UDP 是不需要连接,即刻传输数据。
- 服务对象:TCP 是一对一的两点服务,即一条连接只有两个端点。UDP 支持一对一、一对多、多对多的交互通信
- 可靠性:TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按序到达。UDP 是尽最大努力交付,不保证可靠交付数据。但是我们可以基于 UDP 传输协议实现一个可靠的传输协议,比如 QUIC 协议
- 拥塞控制、流量控制:TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。
- 首部开销:TCP 首部长度较长,会有一定的开销,首部在没有使用「选项」字段时是 20 个字节,如果使用了「选项」字段则会变长的。UDP 首部只有 8 个字节,并且是固定不变的,开销较小。
- 传输方式:TCP 是流式传输,没有边界,但保证顺序和可靠。UDP 是一个包一个包的发送,是有边界的,但可能会丢包和乱序。
说一下tcp的头部

序列号:在建立连接时由计算机生成的随机数作为其初始值(表示此次发送数据的第一个字节的编号 ),通过 SYN 包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。用来解决网络包乱序问题。
确认应答号:指下一次「期望」收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。用来解决丢包的问题。
控制位:
- ACK:该位为 1 时,「确认应答号」的字段变为有效,TCP 规定除了最初建立连接时的 SYN 包之外该位必须设置为 1 。
- RST:该位为 1 时,表示 TCP 连接中出现异常必须强制断开连接。
- SYN:该位为 1 时,表示希望建立连接,并在其「序列号」的字段进行序列号初始值的设定。
- FIN:该位为 1 时,表示今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换 FIN 位为 1 的 TCP 段。
UDP的头部
UDP的结构较简单,包括16位源端口、16位目的端口,16位校验和,16位表示数据包的长度。TCP还多了32位序列号、32位确认序号及控制位等。

简述下TCP建立连接的过程,TCP如何保证可靠传输?
- 建立可靠连接,三次握手
- 为数据包标号,确保按序发送
- 流量控制:控制发送方发送速率,保证接收方来得及接收
- 拥塞控制: 当网络拥塞时,减少数据的发送
- ARQ协议(自动重传请求),如果发送方一段时间没有收到确认帧,重新发送
确认 超时重传
流量控制和拥塞控制的区别
流量控制解决的是发送方和接收方速率不匹配的问题;拥塞控制解决的是避免网络资源被耗尽的问题。流量控制是通过滑动窗口来实现的;拥塞控制是通过拥塞窗口来实现的。
拥塞控制是作用于网络的,它是防止过多的数据注入到网络中,避免出现网络负载过大的情况;常用的方法就是:慢开始、拥塞避免、快重传、快恢复。
流量控制是作用于接收者的,它是控制发送者的发送速度从而使接收者来得及接收,防止分组丢失的。
简述DNS(域名服务器)的工作原理。
为了将一个域名映射成IP地址,应用程序调用一个名为解析器(resolver)的库程序,并将名字作为参数传递给此程序。
① 解析器向本地DNS服务器发送一个包含该名字的请求报文;
② 本地DNS服务器查询该名字,并且返回一个包含该名字对应IP地址的响应报文给解析器,然后解析器再将IP地址返回给调用方。
查询报文和响应报文都作为UDP 数据包发送。有了IP地址以后,应用程序就可以与目标主机建立一个TCP连接,或者给它发送UDP数据包。
什么是DNS?本地域名服务器、根域名服务器、顶级域名服务器?
DNS(Domain Name System)是一种分布式的命名系统,用于将域名转换为 IP 地址以及其他与域名相关的信息。
例如,www.bing.com是一个域名,其中“com”是顶级域名,“bing”是二级域名,“www”是三级域名。
① 根域名服务器:最高层次,知道所有顶级域名服务器的IP地址,管辖顶级域,当本地域名服务器无法自己解析时,就会求助根域名服务器,根域名服务器不直接告诉它IP地址,而是告诉本地域名服务器下一步应该去找哪个顶级域名服务器
没有根域名服务器,就无法进行域外的名字解析。建立根域名服务器是战略高点。
② 顶级域名服务器:负责管理在该顶级域名服务器下注册的所有二级域名,包含一个行业或一个国家所有子域的有关信息,给出子域的域名服务器的权威记录。包含通用和国家、地区两类。
③ 本地域名服务器:每个ISP都拥有一个本地域名服务器,当一台主机发出DNS请求时,这个查询请求报文就发送给本地DNS。
工作原理:当用户输入域名访问网络资源时,客户端会向本地 DNS 服务器发起查询请求,本地 DNS 服务器会先在自己的缓存中查找域名的解析结果,如果没有,则向 DNS 根域名服务器发送请求。根域名服务器并不直接返回结果,而是告诉本地 DNS 服务器应该向哪个顶级域名服务器查询。本地 DNS 服务器再向顶级域名服务器查询,获得下一步应该查询的权威 DNS 服务器(负责管理某个具体域名(如www.bing.com)的DNS服务器)的地址。最后,本地 DNS 服务器向权威 DNS 服务器查询域名的解析结果,并将结果返回给客户端,同时将结果缓存起来以便下次查询时使用。
本地域名服务器是用户所在局域网中的 DNS 服务器,通常由网络服务提供商(ISP)提供。根域名服务器是整个 DNS 系统的顶级节点,它负责管理顶级域名服务器的域名解析。顶级域名服务器是每个顶级域名的 DNS 服务器,负责管理该顶级域名下的所有域名解析。例如,“.com”域名的顶级域名服务器负责管理所有以“.com”结尾的域名的解析。
ARP协议建立IP地址与MAC(物理)地址的映射,支持数据在网络内的传输。根据所学知识,回答下述问题
简述通信双方在同一个网络内的ARP工作过程。
假设主机A给主机B发消息
主机A广播,该广播包携带B的IP地址,一旦B发现自己的IP地址与其一致,它就会用自己的 MAC 地址作为应答,使A得到自己的MAC地址。
简述通信双方不在同一个网络时的ARP工作过程。
主机A广播,但是发现目的IP地址和自己不在一个子网。于是它转而请求路由器的 MAC地址,把数据传送过去,再由路由器与子网外的主机进行交互。在路由表找到对方所属的子网后,在该子网内广播找到B的MAC地址。
ARP协议的目的是什么?
地址解析协议,用于将IP地址解析为MAC 地址的网络协议。
依据给定内容,完成表格各项,并简述ARP协议的工作过程

ARP协议工作过程:发送方发送一个ARP广播帧,传递到网络上所有节点,询问IP地址对应的MAC地址。如果接收方在同一个网络内,则接收方回一个ARP应答帧;如果网络连接的路由器端口通过发送方和接收方的IP地址判断接收方不在同一个网络,则使用自己的MAC地址应答,作为接收方的代理。
在TCP拥塞控制中,什么是慢开始、拥塞避免、快重传和快恢复算法?
拥塞控制是防止过多数据进入网络中,使得路由器或链路过载。即防止输入负载超过网络吞吐量。而网络拥塞的依据是报文丢失(没有发送方收到确认报文)
① 发送方维护用于发送的拥塞窗口crown,其大小取决于网络拥塞情况,且动态变化。发送方还会维护一个慢开始门限。当小于该门限时,使用慢开始算法;当大于该门限时,使用拥塞避免算法

② 快重传算法
不再在数据全传完再发送确认报文,而是收到一个数据报文段,就立刻发送确认。如果重复发送了三次确认,则说明有报文丢失的情况。
例如,

③ 快恢复算法
发送方收到3个重复确认,知道丢失了个别报文段。于是不启动慢开始算法,而是执行快恢复算法。发送方会将慢开始门限和拥塞窗口值调整为当前的一般,并且开始执行拥塞避免算法。
拥塞控制是网络一个重要的研究课题,当网络负载过重时,网络会执行相应的协议来避免处理拥塞的发生。这些协议包括网络层的RED协议和传输层的TCP慢启动协设根据所学协议知识,回答下面问题
RED协议的工作原理是什么
随机早期检测协议(RED,Random Early Detection):当某条链路上的平均队列长度超过某个阈值时,该链路就被认为即将拥塞,因此路由器随机丢弃一小部分数据包。
TCP慢启动协议的工作原理是什么?
一开始将拥塞窗口大小设为1,然后成倍增加(指数级)拥塞窗口的大小(来试探网络连接状况,主要过程为发送一个数据段停下来等待应答,每收到一个应答,拥塞窗口大小就增大一倍)直到到达所设定的阈值或发生网络拥塞。当达到阈值时,慢启动结束,TCP进入拥塞避免阶段,此时拥塞窗口大小变为线性增长;当网络出现拥塞时,TCP慢启动会减缓发送速度,从而避免网络过载和拥塞的发生。
为什么两者的配合能够在一定程度上解决拥塞
当网络中路由器的被使用缓冲区大小到达路由器的阈值的时候,路由器开始执行 RED 协议,随意丢弃一些分组,被丢弃的分组的发送方会因此超时,这时通过TCP慢启动会降低发送方速率。
简述数据链路层使用的一种滑动窗口协议的工作过程,并具体说明其如何实现差错控制和流量控制来达到可靠的数据传输的目的。
一位滑动窗口协议。
发送窗口大小为1,接收窗口大小也为1。
一般来说,两个数据链路层一个先开始,发送第一帧。初始启动的机器从它的网络层获取第一个分组,然后根据分组创建第一帧,并将它发送出去。
当这一帧到达时,接收方的数据链路层检查该帧,看它是否为重复帧。如果它正是所期望的那一帧,就将它传递给网络层。然后接收窗口向前滑动,并发送一个确认帧。
确认域包含了最后收到的无错误的帧序列号,如果该序列号和正在发送的帧序列号一致,则发送方知道存储在 buffer 中的帧已经处理完毕。于是它从网络层获取下一帧。
无论什么时候,只要发出一帧就要返回一帧。
差错控制:
① 接受方发送反馈信息来确保可靠;
② 引入计时器防止丢失某一帧导致发送方持续等待;
③ 通过序号保证每一帧顺序和防止重复接收。
流量控制:基于反馈的流量控制,返回确认,才可以发送下一帧。
计算机网络中使用两种主要的交换技术:(虚)电路交换和分组交换。简述这两种交换技术的工作原理。
电路(虚电路)交换 circuit switching:电路交换是一种面向连接的工作方式。分为三步:使用前建立一条从发送方到接收方的路径;使用这条路径传输;传输完毕释放路径。
数据包交换(分组交换) packet switching:包(分组)交换是一种非连接的工作方式。数据被分为多个包(分组),每个包包含完整的目的地址。每个包经过交换节点时,交换节点按照当前网络状况(交换表)为其选择一条输出线路。此过程一直持续直到包被传送到目的地。
TCP协议是面向连接的,但TCP使用的IP协议却是无连接的.这两种协议都有哪些主要的区别?
- 协议提供的是不可靠的、“面向非连接”的服务.
- TCP协议提供的是可靠的、“面向连接”的服务。
- TCP协议实现的是主机应用程序之间的通信,IP协议只实现主机之间的通信。
- TCP协议是以 IP协议为基础实现的,给应用层提供服务;IP协议为TCP协议提供服务.简单来说,IP协议负责将数据从一台主机传输到另一台主机,而TCP协议保证传输的正确性。
简述网桥(交换机)的工作原理 / 网桥流量过滤原理,以及查找表的建立过程
网桥工作在数据链路层,将多个LAN连接起来,通过检查数据链路层地址来转发帧。
① 当一帧到达时,网桥必须决定是将该帧转发还是丢弃
② 如果决定转发,还必须要决定在哪个端口传输帧
③ 网桥通过在其内部配备一个大的表(MAC地址表),该表中列出了每一个可能的目的地址以及它隶属的输出端口
④ 当网桥第一次被接入网络时,所有的哈希表都是空的,网桥使用泛洪算法(对于每个发向未知目的地址的入境帧,网桥将他输送到所有的端口,除了它到来的那个端口,慢慢的网桥学习到目标地址在哪里)和向后学习法(通过检查每个端口上发送的所有帧的源地址,网桥就可获知通过那个端口能访问到哪些机器)完善哈希表。
⑤ 其具体转发过程为(以下就是网桥流量过滤原理):当一帧到达时,网桥对目的地址进行查询,如果
a. 目的地址的端口与源端口相同,则丢弃该帧
b. 目的地址的端口与源端口不同,则转发该帧到目的端口
c. 目标地址端口未知,则使用泛洪算法,将帧发送到所有的端口,除了他入境的那个。
漏桶和令牌桶是网络中用于流量整形的主要方法。根据所学知识,回答下面问题:
漏桶的工作原理是什么?
① 在每个主机连接到网络的接口处都包含一个漏桶,即一个有限长度的内部队列。
② 如果当队列满的时候,又有一个分组到来,则该分组被抛弃。
③ 每经过一个常数时间才允许把一个分组放到网络上。
④ 这种机制可以将主机内用户进程发送出来的一个不均匀分组流变成网络上的一个均匀分组流,他把突发的分组流变得很平滑,从而降低了拥塞的几率。
⑤ 无论负载突发性如何,漏桶算法都强迫输出按平均速率进行。
令牌桶的工作原理是什么?
① 漏桶中保存的是令牌,这些令牌由时钟产生,每隔T产生一个。
② 要使一个分组被传送出去它就必须要抓住并销毁一个令牌。
③ 令牌桶允许将令牌(即许可权)保存起来,直至达到桶的最大尺寸n
④ 当令牌桶满后,令牌桶丢弃令牌,不丢弃分组。
⑤ 从本质上讲,令牌桶所做的事情是:允许突发流量但是不得超过一个预定的最大值
区别
① 流量整形策略不同:漏桶法不允许将空闲的主机许可权保存起来以便将来发送更大的突发数据,而令牌法则允许将许可权保存起来,直至达到桶的最大尺寸。
② 丢弃对象不同:当令牌桶满了之后,丢弃令牌,但是不丢弃分组;相反的,在漏桶算法中丢弃分组。
NAT Network Address Translation 网络地址转换协议
网络地址转换协议,在网络内部使用私有地址,在网络外部使用公有地址。当一个节点需要向外网发送数据时,将内网的私有IP地址转换为共有IP地址,并将私有的IP地址、传输层端口号映射为新的传输层口号。当接受一个数据时,通过映射关系查找对应的私有IP地址及传输层端口号,重新封装传递。
路由器是网络层的一种主要设备,依赖其中维护的路由表进行数据转发。路由表由路由协议(算法)来建立和维护。根据所学知识,回答下述问题:
列举所学主要的动态路由协议(算法),并说明其工作过程。
距离矢量路由:每台路由器周期性地将自己的距离矢量发送给所有邻居。每台路由器根据邻居的路由矢量计算自己新的路由表。
链路状态路由:每台路由器周期或触发地将自己的邻接信息发送给网络上所有其他路由器。每台路由器根据来自所有节点的邻接信息形成一张完整的网络拓扑图,求取自己到所有节点的最短路径,完成自己的路由表。
链路状态路由协议采用了什么方法来提供较少代价、可靠的信息扩散?
① 接受方发送反馈信息来确保可靠;(每个节点保留的数据结构中都有转发和确认两个字段)
② 引入计时器防止丢失某一帧导致发送方持续等待;(每个邻接信息只能存活一定的时间(年龄字段))
③ 通过序号保证每一帧顺序和防止重复接收。(邻接信息使用编号)
解释距离矢量路由中的无穷计算问题
当一个链路断开时,距离矢量路由器可能会错误地通过相邻路由器的更新信息计算出更长的路径,错误的距离信息在网络中传播和反复更新,导致路由器之间陷入“无穷循环”的状态。
说明一个IP分组到达一台路由器后,其主要的转发过程。
当新的消息进入路由器时,首先进入等待队列,通过一定的调度策略进行调度。调度到这个消息时,获取其目的地址,将目的地址分别与路由表中的每一项网络号的子网掩码进行比对,选取最长匹配的网络表项进行转发。当然,没有查询到匹配的时候,转发到缺省表项,也就是上一层路由,继续寻找。
分布于路由器的路由表中可能存在环路,IP协议是如何应对这一问题的?
设置一个最大跳数,使得跳数减为0时,数据包丢弃,防止陷入环路。
TCP协议实现端到端的可靠的数据传输,其数据发送速率取决于两个方面:网络传输能力,通信双方的处理和缓存能力。这两种能力分别使用拥塞窗口、流量控制窗口来描述。根据所学知识,回答下面问题:
流量控制窗口大小的取值是如何实现的?
接收端可以缓冲的字节数。
拥塞窗口大小的取值是如何实现的?
发送端可以往网络发送的字节数。
如何使用这两个窗口的取值来确定当前数据的发送速率的?
取两者之间最小值然后除以连接的往返时间。
TCP建立连接的机制,说明这种机制如何解决重复发来数据的问题
TCP使用三步握手协议建立连接://三次握手的过程
连接请求方选择一个合法的序列号,连接应方选择一个合法的序列号并确认连接请求方的序列号,连接请求方确认应答方的序列号根据序列号、确认号等判断重复分组。
// 建立连接时,双方可以通过seq序列号和ack确认号,能判断出收到的数据包是否重复,若重复,直接丢弃。
TCP流量如何控制,从网络状态和接受者缓存两个角度(就是拥塞窗口和流量窗口两个角度)
流量控制包括两个窗口:反映接收方接受能力的WINDOW SIZE,以及反映网络传输能力的拥塞窗口,依据慢启动等方法赋值。最终发送的最大速率取两个窗口值的最小值。
TCP的校验内容
TCP的头部,数据,伪头部
根据网络参考模型,描述数据在各个层次的封装过程;
在应用层,数据转化为二进制语言。
在传输层,上层数据被分割成小的数据段,并为每个分段后的数据封装 TCP 报文头部。 在 TCP 头部有一个关键的字段信息——端口号,它用于标识上层的协议或应用程序,确保上层应用数据的正常通信。
在网络层,上层数据被封装上新的报文头部——IP 头部。 在 IP 头部中有一个关键的字段信息——IP 地址,它是由一组 32 位的二进制数组成的, 用于标识网络的逻辑地址。
在数据链路层,上层数据被封装一个 MAC 头部,其内部有一个关键的字段信息 ——MAC 地址,它由一组 48 位的二进制数组成。在 MAC 头部也同时封装着目标 MAC 地址和源 MAC 地址。
在物理层,将这些二进制数字组成的比特流转换成电信号在网络中传输。
Nyquist(奈奎斯特)采样定理
尼奎斯特定理 Nyquist(奈奎斯特)采样定理
用来表示一个有限带宽的无噪声信道的最大数据传输率。尼奎斯特定理用于计算理想情况下的最大数据传输速率,即在没有噪声干扰的情况下。根据尼奎斯特定理,信道的最大数据传输速率可以通过以下公式计算:
其中,Rmax 表示最大数据传输速率(单位为比特/秒),B 表示信道的带宽(单位为赫兹),V 表示信号的离散级数(即离散的幅度或相位级数)。
尼奎斯特定理告诉我们,通过增加信号的离散级数或者扩大信道的带宽,可以提高信道的最大数据传输速率。
例如,如果一个无噪音话音信道(3400 Hz),采用二进制信号传输,V=2,最大速率不能超过2×3400Hz=6800bps。若V = 16,最大速率则可提高到 27200=2*3400*4 bps。
香农定理
香农定理
用来表示有噪声信道的最大数据传输率或容量。香农定理用于计算在存在噪声干扰的情况下的最大数据传输速率。根据香农定理,最大数据传输速率可以通过以下公式计算:
其中,C 表示最大数据传输速率(单位为比特/秒),B 表示信道的带宽(单位为赫兹),S/N表示信号与噪声的比值(信噪比)。
带宽B实际上为一个信道支持的最大频率与最小频率的差值,即,信噪比的单位为dB
香农定理告诉我们,通过增加信道的带宽或提高信号与噪声的比值,可以提高信道的最大数据传输速率。
例如,模拟电话系统中,话音信道信噪比的典型值为 30dB(或者说因为1dB=10lgS/N,所以S/N=1000),那么最大数据传输速率为:C=3400×log2(1+1000)≈33888bps。
网卡是什么?功能?
每个网卡有唯一的MAC地址。它工作在物理层和数据链路层,是局域网和计算机的接口。
- 它具备串行、并行转换的功能
网卡和局域网串行连接,而网卡和计算机通过I/O总线并行连接。因此它会进行串行、并行转换
- 编码、解码功能
对发送数据进行编码,对接收数据进行解码
机器的ip地址和mac地址,他们有什么区别,有什么用途?
MAC地址(物理层)位于数据链路层,每个主机是唯一的。
IP地址位于网络层,包括网络号、主机号。在不同的局域网中,其IP地址不同。
(同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上工作站,服务器和路由器等) 有一个主机ID与其对应)
公有IP和私有IP
公有IP (百度查):连接以太网的地址,联通或电信分配给的(不是全网唯一的)
私有IP (ifconfig):局域网地址,不能联通外网
公网:互联网
内网(私网):局域网
私有IP的功能:多用于公司内部,私有路由不能对外直接提供信息,内部网络不会直接收到Internet上一些攻击。但是,也无法以私有IP直接上网

香农公式?信道容量含义?带宽增加,信道容量怎么变?香农公式的前提条件?
点击网页一次HTTP请求过程?(在浏览器里输入一个网址,会发生什么)
- DNS域名解析(域名baidu.com -> ip)
- 通过IP,使用ARP地址解析协议,找到对应服务器,发起TCP三次握手
- 建立TCP连接后,发起http请求
- 服务器响应http,返回response
- 浏览器解析response,请求其他资源(如js、css、图片等)
- 浏览器渲染页面
HTTP和HTTPS的区别
HTTP协议(超文本传输协议)用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文发送内容,不提供任何形式的数据加密。如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息。因此,HTTP协议不适合传输一些敏感信息,如信用卡号、密码等
HTTPS协议(安全套接字超文本传输协议)为了保证数据传输安全,在HTTP基础上加入SSL协议。SSL依靠证书验证服务器的身份,并为浏览器和服务器之间的通信加密。
TCP的快速重传机制
两个服务器之间网络已经联通,却收不到彼此的UDP报文原因
UDP并非可靠传输,没有流量控制、拥塞控制等机制,可能发生了丢包
可能的原因很多,比如设置了acl(访问控制列表),禁用了某些端口,网络拥塞,丢包等
主要丢包原因
1、接收端处理时间过长导致丢包:调用recv方法接收端收到数据后,处理数据花了一些时间,处理完后再次调用recv方法,在这二次调用间隔里,发过来的包可能丢失。对于这种情况可以修改接收端,将包接收后存入一个缓冲区,然后迅速返回继续recv。
2、发送的包巨大丢包:虽然send方法会帮你做大包切割成小包发送的事情,但包太大也不行。例如超过50K的一个udp包,不切割直接通过send方法发送也会导致这个包丢失。这种情况需要切割成小包再逐个send。
3、发送的包较大,超过接受者缓存导致丢包:包超过mtu size数倍,几个大的udp包可能会超过接收者的缓冲,导致丢包。这种情况可以设置socket接收缓冲。以前遇到过这种问题,我把接收缓冲设置成64K就解决了。
int nRecvBuf=32*1024;//设置为32K
setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));
4、发送的包频率太快:虽然每个包的大小都小于mtu size 但是频率太快,例如40多个mut size的包连续发送中间不sleep,也有可能导致丢包。这种情况也有时可以通过设置socket接收缓冲解决,但有时解决不了。所以在发送频率过快的时候还是考虑sleep一下吧。
5、局域网内不丢包,公网上丢包。这个问题我也是通过切割小包并sleep发送解决的。如果流量太大,这个办法也不灵了。总之udp丢包总是会有的,如果出现了用我的方法解决不了,还有这个几个方法: 要么减小流量,要么换tcp协议传输,要么做丢包重传的工作。
说下网络中的主机通信流程
一个主机将两个端口接到网络上是否会提升吞吐量?为什么?
DHCP的作用?
动态主机配置协议 Dynamic Host Configuration Protocol,是一个应用在局域网中的网络协议,它使用UDP协议工作。
理解:DHCP协议就是一个基于UDP协议工作在局域网内的网络协议,其最终的目的就是获取响应的IP地址,其中这过程中有多种分配方式,以及发送报文的格式要求等。
作用:动态分配IP地址,过程自动化,终端无需一一手工配置,配置信息统一管理(DNS,网关),IP地址有限、需要大量配置IP地址、经常移动终端。
好处:提高配置IP地址效率,减少配置工作量,减少IP地址冲突。
IPV4和IPV6的区别
1、IPv6将地址从32位(4B)扩大到128位(16B),更大的地址空间。
2、IPv6将IPv4的效验和字段彻底删除,以减小每跳的处理时间。
3、IPv6支持即插即用(即自动配置),不需要DHCP协议。
4、IPv6首部长度必须是8B的整数倍,IPv4首部是4B的整数倍。
5、IPv6将IPv4的可选字段移出首部,变成了扩展首部,成为灵活的首部格式,路由器通常不对扩展首部进行检查,大大提高了路由器的处理效率。
6、IPv6取消了总长度字段,改用有效载荷长度字段。
7、IPv6只能在主机处分片,IPv4可以在路由器和主机处分片。
8、IPv6取消了协议字段,改成下一个首部字段。
能不能直接在应用层把数据交给网络层
在应用层数据的呈现形式是声音、图形、文字等具体的信息,而网络通信信道所能传输的是电信号(一般是数字信号),以上信息无法直接通过信道传输,所以,必须将数据转化成二进制传输。
不完整回答(从传输层目的层面):
传输层为运行在不同主机上的进程之间提供了逻辑通信,而网络层则提供了主机之间的逻辑通信。
传输层向上提供可靠的和不可靠的逻辑通信信道
TCP 和 UDP 都用端口号来识别应用层实体,一边准确地把信息交给上层对应的协议(进程)。
简述一下Cookie 和 Session的区别
1、数据存放位置不同:
cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、安全程度不同:
cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。
3、性能使用程度不同:
session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
4、数据存储大小不同:
单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,而session则存储与服务端,浏览器对其没有限制。
5、会话机制不同
session会话机制:session会话机制是一种服务器端机制,它使用类似于哈希表(可能还有哈希表)的结构来保存信息。
cookies会话机制:cookie是服务器存储在本地计算机上的小块文本,并随每个请求发送到同一服务器。 Web服务器使用HTTP标头将cookie发送到客户端。在客户端终端,浏览器解析cookie并将其保存为本地文件,该文件自动将来自同一服务器的任何请求绑定到这些cookie。






