考研复试-计算机网络
计算机网络的主要功能
- 硬件资源共享
- 软件资源共享
- 用户间信息交换
- 分布式处理
主机间的通信方式有客户-服务器方式、对等连接方式
客户-服务器方式C/S方式
采用客户-服务器方式可以使两个应用进程能够进行通信。客户是服务请求方,服务器是服务提供方。
客户与服务器的通信关系建立后,通信可以是双向的,客户和服务器都可发送和接收数据。
对等连接方式P2P方式
指两台主机在通信时并不区分哪一个是服务请求方哪一个是服务提供方。只要两台主机都运行了P2P软件,它们就可以进行平等的,对等连接通信。
电路交换:整个报文的比特流连续地从源点直达终点,好像在一个管道中传送
报文交换:整个报文先传送到相邻结点,全部存储下来后查找转发表,转发到下一个结点
分组交换:单个分组,只是整个报文的一部分传送到相邻结点,存储下来后查找转发表,转发到下一个结点
按照网络的作用范围进行分类:
广域网、城域网、局域网、个人区域网
计算机网络提供的服务的三种分类
- 面向连接服务与无连接服务
- 可靠服务和不可靠服务:可靠服务是指网络具有纠错、检错、应答机制、能保证数据正确、可靠地传送到目的地;不可靠的网络正确性、可靠性由应用或用户来保障
- 有应答服务和无应答服务:有应答服务是指接收方在收到数据后向发送方给出相应的应答
端到端通信和点到点通信的区别?
直接相连的结点之间的通信称为点对点通信,它只提供一台机器到另一台机器之间的通信,点对点通信并不能保证数据传输的可靠性,由物理层、数据链路层和网络层组成的通信子网提供的是点对点通信
端到端通信是建立在点对点通信的基础上,由一段段的点对点通信信道构成的,完成应用程序之间的通信,端是指用户程序的端口,端口号标识了应用层中不同的进程,传输层提供的是端到端的通信
计算机网络为什么采用分层结构?
- 结构清晰,有利于识别复杂系统的部件及其关系
- 模块化的分层易于系统更新、维护
- 任何一层服务实现的改变对于其他层都是透明的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hsRrPPmr-1648367004606)(计算机网络/五层体系结构.png)]
- 七层协议的理论虽然完整,但是不太实用而且很复杂
- 四层结构是实现模型,而5层结构则是结合两种模型得出的,目的是为了更好描述网络接口层
应用层:为应用程序提供交互服务。在互联网中的应用层协议很多,如域名系统DNS、HTTP协议、SMTP协议等,FTP文件传输协议,任意计算机之间传送文件;Telnet远程登录协议
表示层解决的是不同系统之间通信语法问题
会话层主要负责建立和断开通信连接
运输层协议为运行在不同Host上的进程提供了一种逻辑通信机制
网络层的主要目的是在任意结点间进行数据报传输
数据链路层:将网络层传递下来的IP数据报封装成帧,在两个相邻节点间的链路上传送帧。
物理层:实现相邻结点间比特流的透明传输,尽可能屏蔽传输介质和物理设备的差异。
为什么需要数据封装?
增加控制信息
- 地址,标识发送端,接收端
- 差错检测编码
- 协议控制,优先级,服务质量
协议:事先约定好的规则,为进行网络中数据交换而建立的规则、标准或约定称为网络协议
接口:同一结点内相邻两层间交换信息的连接点
服务:指下层为紧邻的上层提供的功能调用
为什么说 http 协议是无状态协议?
协议自身不对请求和响应之间的通信状态进行保存,把 http 协议设计的如此简单是为了更快地处理大量事务。
Cookie
Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器之后向同一服务器再次发起请求时被携带上,用于告知服务端两个请求是否来自同一浏览器。
用途:用户登录状态、购物车、浏览器行为跟踪(如跟踪分析用户行为等)
Session
Session 是存储在 web 服务器端的一块信息。 session 对象存储特定用户会话所需的属性及配置信息。当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
Cookie与Session的区别
- 安全问题:Cookie不安全,存储在浏览器中,容易被恶意查看。
- 服务器压力:对于大型网站,如果用户所有的信息都存储在 Session 中,那么开销是非常大的,因此不建议将所有的用户信息都存储到 Session 中。 而Cookie保管在客户端,不占用服务器资源。
TCP头部:
序列号:解决网络包乱序
确认号:解决网络包丢失
发送端进行多路复用
从多个Socket接收数据,为每块数据封装上头部信息,生成Segment,交给网络层
接收端进行多路分用
传输层依据头部信息将收到的Segment交给正确的Socket,即不同的进程
UDP为什么存在?
- 无需建立连接,减少时延
- 实现简单,无需维护连接状态
- 头部开销小
- 没有拥塞控制,应用层可以更好地控制发送时间和速率
TCP提供可靠交付的服务
无差错、不丢失、不重复、并按序到达。
TCP与UDP的区别:
- TCP是面向连接的,UDP是无连接的;(UDP发送数据之前不需要建立连接)
- TCP是可靠的,UDP不可靠;
- TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多;
- TCP是面向字节流的,UDP是面向报文的;(面向字节流是指发送数据时以字节为单位,一个数据包可以拆分成若干组进行发送,而UDP一个报文只能一次发完。)
- TCP有拥塞控制机制,UDP没有。网络出现的拥塞不会使源主机的发送速率降低,这对某些实时应用是很重要的,比如媒体通信,游戏;
- TCP首部开销(20字节)比UDP首部开销(8字节)要大
什么时候选择TCP,什么时候选UDP?
对某些实时性要求比较高的情况,选择UDP,比如游戏,媒体通信,实时视频流(直播),即使出现传输错误也可以容忍;其它大部分情况下,HTTP都是用TCP,因为要求传输的内容可靠,不出现丢失
HTTP可以使用UDP吗?
HTTP不可以使用UDP,HTTP需要基于可靠的传输协议,而UDP不可靠
TCP如何保证传输的可靠性
- 数据包校验
- TCP报文具有序列号,可以对失序数据包重新排序
- 丢弃重复数据
- 应答机制:接收方收到数据之后,会发送一个确认(通常延迟几分之一秒);
- 超时重传:发送方发出数据之后,启动一个定时器,超时未收到接收方的确认,则重新发送这个数据;
可靠传输的工作原理:
**停止等待协议:**就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。
**超时重传:**A只要超过了一段时间仍然没有收到确认,就认为刚才发送的分组丢失了,因而重传前面发送过的分组,要实现超时重传,就要在每发送完一个分组时设置一个超时计时器,如果在超时计时器到期之前收到对方的确认,就撤销已设置的超时计时器。A在发送完一个分组后,必须暂时保留已发送的分组的副本,只有在收到确认后才清除暂时保留的副本;分组和确认分组都必须进行编号, 这样才能明确是哪一个发送出去的分组收到了确认,哪一个没有收到确认;超时计时器设置的重传时间应当比数据在分组传输的平均往返时间更长一些。
**确认丢失和确认迟到:**丢弃这个重复的分组M1,不向上层交付;向A发送确认。
SR协议:接收方对每个分组单独进行确认,设置缓存机制,缓存乱序到达的分组;发送方只重传那些没收到ACK确认的分组,为每个分组设置超时重传计时器;发送发窗口发送N个连续的序列号,限制已发送且未确认的分组。
什么是三次握手,四次挥手?
TCP是一种面向连接的单播协议,在发送数据前,通信双方必须在彼此间建立一条连接。所谓的“连接”,其实是客户端和服务器的内存里保存的一份关于对方的信息,如ip地址、端口号等。
TCP提供了一种可靠、面向连接、字节流、传输层的服务,采用三次握手建立一个连接。采用4次挥手来关闭一个连接。
TCP的连接建立—三次握手
A向B发出连接请求报文段,同步位SYN=1,同时随机选择一个初始序号seq=x,这时,TCP客户进程进入同步已发送状态。
B收到连接请求报文段后,如果同意建立连接,则向A发送确认,在确认字段中把SYN位和ACK位置为1,确认号为ack=x+1,同时也随机选择一个初始序号seq=y,这时TCP服务器进程进入同步收到状态。
TCP客户进程收到B的确认后,还要向B发出确认,确认报文段ACK=1,确认号ack=y+1,seq=x+1。TCP连接已经建立,A进入已建立连接状态,当B收到A的确认后,也进入已建立连接状态。
能否简化为两次握手连接?
不能简化,这主要是为了防止已失效的连接请求报文段突然又传送到了服务器,因而产生错误。
若A发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间滞留了,以致延误到连接释放之后的某个时间才到达B,B收到此失效的连接请求报文段后,误以为是A又发出一次新的连接请求,于是就向A发出确认报文段,同意建立连接,但由于现在A没有发出建立连接的请求,因此不会理睬B的确认,也不会向B发送数据,但B却以为新的运输连接已经建立了,并一直等待A发来数据,B的许多资源就这样白白浪费了。
可以采用四次握手吗?为什么?
四次握手是指:第二次握手:Server只发送ACK和acknowledge number;而Server的SYN和初始序列号在第三次握手时发送;原来协议中的第三次握手变为第四次握手。出于优化目的,四次握手中的二、三可以合并。
第三次握手中,如果客户端的ACK未送达服务器,会怎样?
Server端: 由于Server没有收到ACK确认,因此会重发之前的SYN+ACK(默认重发五次,之后自动关闭连接进入CLOSED状态),Client收到后会重新传ACK给Server。
如果已经建立了连接,但客户端出现了故障怎么办?
服务器每收到一次客户端的请求后都会重新复位一个计时器,时间通常是设置为2小时,若两小时内还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
TCP的连接释放—四次挥手
A的应用进程先向其TCP发出连接释放报文段,并停止发送数据,主动关闭TCP连接,这时A进入终止等待1状态,等待B的确认。
B收到连接释放报文段后即发出确认,然后B进入关闭等待状态,TCP服务器进程这时应通知高层应用进程,因为从A到B这个方向的连接释放了,这时的TCP连接处于半关闭状态,即A已经没有数据要发送了,但B若发送数据,A仍要接收。
A收到来自B的确认后,就进入终止等待2状态,等待B发出的连接释放报文段。
若B已经没有要向A发送的数据,其应用程序就通知TCP释放连接,这时B就进入最后确认状态,等待A的确认。
A在收到B的连接释放报文段后,必须对此发出确认,然后进入时间等待状态。
TIME-WAIT状态必须等待2MSL的时间
第一:为了保证客户端发送的最后一个ACK报文段能够到达服务器,这个报文段有可能丢失,因而使处在最后确认状态的服务器收不到客户端发送的ACK报文段的确认。服务器会超时重传这个FIN+ACK报文段,而客户端就能在2MSL时间内收到这个重传报文段,并重传一次确认,重新启动2MSL计时器,最后,A和B都正常进入关闭状态。
第二:客户端在发送完最后一个ACK报文段后,再经过2MSL时间内,就可以使本次连接持续的时间内所产生的所有报文段都从网络中消失,从而不会出现已失效的连接请求报文段出现在本连接中。
为什么建立连接是三次握手,而关闭连接却是四次挥手呢?
这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到客户端的FIN报文时,仅仅表示客户端不再发送数据了但是还能接收数据,服务器是否现在关闭发送数据通道,需要上层应用来决定,因此,服务器的ACK和FIN一般都会分开发送。
为什么不能把服务器发送的ACK和FIN合并起来,变成三次挥手(CLOSE_WAIT状态意义是什么)?
因为服务器收到客户端断开连接的请求时,可能还有一些数据没有发完,这时先回复ACK,表示接收到了断开连接的请求。等到数据发完之后再发FIN,断开服务器到客户端的数据传送。
如果第二次挥手时服务器的ACK没有送达客户端,会怎样?
客户端没有收到ACK确认,会重新发送FIN请求。
tcp序列号为什么是随机的?
三次握手的一个重要功能是客户端和服务端交换ISN(Initial Sequence Number), 以便让对方知道接下来接收数据的时候如何按序列号组装数据。如果ISN是固定的,攻击者很容易猜出后续的确认号。
初始序列号 ISN 是如何随机产生的?
起始 ISN 是基于时钟的,每 4 毫秒 + 1,转一圈要 4.55 个小时。
ISN随机生成算法:ISN = M + F (localhost, localport, remotehost, remoteport)
- M是一个计时器,每4毫秒+1
- F是一个Hash算法
流量控制:
让发送方的速率不要太快,要让接收方来得及接收。
拥塞控制:
防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。
慢开始、拥塞避免、快重传、快恢复
Http/1.1与Http1.0的区别
POST方法和GET方法区别
- Get是从服务器上获取数据,Post是向服务器传送数据。
- POST将请求参数隐藏进行传递,而GET会将参数拼接到请求地址后面传递
- POST相对比较安全而GET因为暴露参数容易被篡改
- 根据HTTP传输协议两者对参数长度有不同的要求
从输入URL到浏览器显示页面发生了什么
- DNS解析:请求发起后,游览器首先会解析这个域名,获取域名对应的IP地址。
- 建立TCP连接,浏览器获得域名对应的IP地址以后,浏览器向服务器发起三次握手请求建立链接
- TCP/IP链接建立起来后,浏览器向服务器发送HTTP请求
- 服务器接收到这个请求,返回HTTP报文
- 浏览器解析渲染页面
- 关闭连接
DNS的解析过程
- 浏览器搜索自己的DNS缓存
- 若没有,则搜索操作系统中的DNS缓存和hosts文件
- 若没有,则操作系统将域名发送至本地域名服务器,本地域名服务器查询自己的DNS缓存,查找成功则返回结果,否则依次向根域名服务器、顶级域名服务器、权限域名服务器发起查询请求,最终返回IP地址给本地域名服务器
- 本地域名服务器将得到的IP地址返回给操作系统,同时自己也将IP地址缓存起来
- 操作系统将 IP 地址返回给浏览器,同时自己也将IP地址缓存起来
- 浏览器得到域名对应的IP地址
HTTP状态码
什么是对称加密和非对称加密?
- 对称加密:通信双方使用相同的密钥进行加密。特点是加密速度快,但是缺点是密钥泄露会导致密文数据被破解。常见的对称加密有
AES
和DES
算法。 - 非对称加密:它需要生成两个密钥,公钥和私钥。公钥是公开的,任何人都可以获得,而私钥是私人保管的。公钥负责加密,私钥负责解密;或者私钥负责加密,公钥负责解密。这种加密算法安全性更高,但是计算量相比对称加密大很多,加密和解密都很慢。常见的非对称算法有
RSA
和DSA
。
中继器
主要功能是将信号整形并放大再转发出去,以消除信号经过一长段电缆后,因噪声或或其他原因而噪声的失真和衰减,使信号的波形和强度达到所需要的要求,进而扩大网络传输的距离。
使用中继器连接的几个网段仍然是一个局域网。
集线器
集线器实质上是一个多端口的中继器,工作在物理层,一个端口接收到数据信号后,由于信号在从端口到Hub的传输过程中已有衰减,所以Hub便将该信号进行整形放大,使之再生到发送时的状态,紧接着转发到其他所以处于工作状态的端口。
信道复用技术
- 频分复用:所有的用户在同样的时间占用不同的带宽资源
- 时分复用:所有用户是在不同的时间占用同样的频带宽度
- 波分复用:在一根光纤上复用几十路或更多路数的光载波信号
- 码分复用:每一个用户可以在同样的时间使用同样的频带进行通信,由于各用户使用经过特殊挑选的不同码型,因此各用户之间不会造成干扰。
IP 地址分为哪几类
- A类地址:1.0.0.1 - 127.255.255.254
- B类地址:128.0.0.1-191.255.255.254
- C类地址:192.0.0.1-223.255.255.254
- D类地址:广播地址,224.0.0.0.-239.255.255.255
- E类地址:以11110开头,保留用于将来和实验使用
长连接和短连接的区别
长连接:指在一个 TCP 连接上可连续发送多个数据包,在 TCP 连接保持期间, 如没有数据包发送,需双方发检测包以维持此连接,一般需要自己做在线维持。
短连接:指通信双方有数据交互时,就建立一个 TCP 连接,数据发送完后,就断开此连接。
连续ARQ
指发送方维持着一个一定大小的发送窗口,位于发送窗口内的所有分组都可连续发送出去,而中途不需要等待对方的确认,发送方每收到一个确认就把发送窗口向前滑动一个分组的位置。
滑动窗口协议
允许发送方发送多个分组而不需等待确认。
IPv4 和 IPv6 如何相互通信
IPv4 向IPv6过渡可以采用双协议栈和隧道技术两种策略:双协议栈技术是指在一台设备上同时装有IPv4和IPv6协议栈,那么这台设备即能和IPv4网络通信,又能和IPv6网络通信;
隧道技术是将整个IPv6数据报封装到IPv4数据报的数据部分,使得IPv6数据报可以在IPv4网络的隧道中传输。