zoukankan      html  css  js  c++  java
  • 计算机网络基础问题总结

    1.HTTP协议2.0和1.1的区别(阿里巴巴)

    1.HTTP2.0使用二进制格式而非文本格式:二进制格式解析起来更加高效,错误率小,
    
    2.HTTP2.0使用多路复用的单一长连接
    单一连接优点:在HTTP/2中,客户端向某个域名的服务器请求页面的过程中,只会创建一条TCP连接,即使这页面可能包含上百个资源。单一的连接应该是HTTP2的主要优势,单一的连接能减少TCP握手带来的时延。HTTP2中用一条单一的长连接,避免了创建多个TCP连接带来的网络开销,提高了吞吐量。
    多路复用:HTTP2虽然只有一条TCP连接,但是在逻辑上分成了很多stream。 HTTP2把要传输的信息分割成一个个二进制帧,首部信息会被封装到HEADER Frame,相应的request body就放到DATA Frame,一个帧你可以看成路上的一辆车,只要给这些车编号,让1号车都走1号门出,2号车都走2号门出,就把不同的http请求或者响应区分开来了。但是,这里要求同一个请求或者响应的帧必须是有有序的,要保证FIFO的,但是不同的请求或者响应帧可以互相穿插。这就是HTTP2的多路复用,是不是充分利用了网络带宽,是不是提高了并发度?
    
    3.报头压缩:HTTP/2 对消息头采用 HPACK 进行压缩传输,能够节省消息头占用的网络的流量。而 HTTP/1.x 每次请求,都会携带大量冗余头信息,浪费了很多带宽资源。头压缩能够很好的解决该问题。
    
    4.服务端推送Server Push:服务端能够更快的把资源推送给客户端。例如服务端可以主动把 JS 和 CSS 文件推送给客户端,而不需要客户端解析 HTML 再发送这些请求。当客户端需要的时候,它已经在客户端了。
    View Code

    2.计算机网络分为哪几层?

    如果是OSI-RM模型分为7层,物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
    如果是TCP/IP协议簇模型分为4层,为网络接口层、网络层、传输层、应用层
    
    物理层考虑的是怎样在传输媒体上传输数据比特流,而不是指具体的传输媒体。物理层的作用是尽可能屏蔽传输媒体和通信手段的差异,使数据链路层感觉不到这些差异。
    
    链路层协议就是为同一链路的主机提供数据传输服务。数据链路层把网络层传下来的分组封装成帧。
    
    网络层 :为主机提供数据传输服务。而传输层协议是为主机中的进程提供数据传输服务。网络层把传输层传递下来的报文段或者用户数据报封装成分组。
    
    传输层 :为进程提供通用数据传输服务。由于应用层协议很多,定义通用的传输层协议就可以支持不断增多的应用层协议。运输层包括两种协议:传输控制协议 TCP,提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据报协议 UDP,提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP 主要提供完整性服务,UDP 主要提供及时性服务。
    
    应用层 :为特定应用程序提供数据传输服务,例如 HTTP、DNS 等。数据单位为报文。
    
    其中表示层和会话层用途如下:
    
    表示层 :数据压缩、加密以及数据描述,这使得应用程序不必关心在各台主机中数据内部格式不同的问题。
    
    会话层 :建立及管理会话。
    
    五层协议没有表示层和会话层,而是将这些功能留给应用程序开发者处理。
    View Code

    3.TCP和UDP有什么区别?什么场景使用TCP,什么场景使用UDP?哪些应用层协议使用了TCP,哪些使用了UDP?

    TCP和UDP的区别
    1、基于连接与无连接;
    
    2、对系统资源的要求(TCP较多,UDP少);
    
    3、UDP程序结构较简单;
    
    4、流模式与数据报模式 ;
    
    5、TCP保证数据正确性,UDP可能丢包;
    
    6、TCP保证数据顺序,UDP不保证。
    
    应用场景:
    当对网络通信质量有要求时,比如:整个数据要准确无误的传递给对方,这往往对于一些要求可靠的应用,比如HTTP,HTTPS,FTP等传输文件的协议,POP,SMTP等邮件的传输协议。
    1.浏览器使用的:HTTP
    2.FlashFXP:FTP 
    3.Outlook: POP、SMTP 
    4.QQ文件传输
    
    UDP 文件传输协议
    对当前网络通讯质量要求不高的时候,要求网络通讯速度尽量的快,这时就使用UDP ,比如实时音视频:
    1.QQ语音 
    2.QQ视频 
    3.TFTP
    
    
    基于TCP的应用层协议有:SMTP、TELNET、HTTP、FTP
    基于UDP的应用层协议:DNS、TFTP(简单文件传输协议)、RIP(路由选择协议)、DHCP、BOOTP(是DHCP的前身)、IGMP(Internet组管理协议)
    View Code

    4.什么是滑动窗口协议?

    窗口是缓存的一部分,用来暂时存放字节流。发送方和接收方各有一个窗口,接收方通过 TCP 报文段中的窗口字段告诉发送方自己的窗口大小,发送方根据这个值和其它信息设置自己的窗口大小。
    
    发送窗口内的字节都允许被发送,接收窗口内的字节都允许被接收。如果发送窗口左部的字节已经发送并且收到了确认,那么就将发送窗口向右滑动一定距离,直到左部第一个字节不是已发送并且已确认的状态;接收窗口的滑动类似,接收窗口左部字节已经发送确认并交付主机,就向右滑动接收窗口。
    
    接收窗口只会对窗口内最后一个按序到达的字节进行确认,例如接收窗口已经收到的字节为 {31, 34, 35},其中 {31} 按序到达,而 {34, 35} 就不是,因此只对字节 31 进行确认。发送方得到一个字节的确认之后,就知道这个字节之前的所有字节都已经被接收。
    
    参考:https://blog.csdn.net/q1007729991/article/details/70142341
    View Code

    5.什么是拥塞控制(算法:慢开始和拥塞避免、快重传和快恢复)

    慢启动:发送的最初执行慢开始,令 cwnd = 1,发送方只能发送 1 个报文段;当收到确认后,将 cwnd 加倍,因此之后发送方能够发送的报文段数量为:2、4、8 ...
    
    注意到慢开始每个轮次都将 cwnd 加倍,这样会让 cwnd 增长速度非常快,从而使得发送方发送的速度增长速度过快,网络拥塞的可能性也就更高。设置一个慢开始门限 ssthresh,当 cwnd >= ssthresh 时,进入【拥塞避免】,每个轮次只将 cwnd 加 1。
    
    如果出现了超时,则令 ssthresh = cwnd / 2,然后重新执行慢开始。
    -------------------------------
    拥塞避免:拥塞避免算法的思路是让拥塞窗口cwnd缓慢增大,即每经过一个往返时间RTT就把发送方的cwnd加1.
    ---------------------------------
    
    快重传与快恢复: 在 TCP/IP 中,快速重传和恢复(fast retransmit and recovery,FRR)是一种拥塞控制算法,它能快速恢复丢失的数据包。没有 FRR,如果数据包丢失了,TCP 将会使用定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。有了 FRR,如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。有了 FRR,就不会因为重传时要求的暂停被耽误。  当有单独的数据包丢失时,快速重传和恢复(FRR)能最有效地工作。当有多个数据信息包在某一段很短的时间内丢失时,它则不能很有效地工作。 
    View Code

    6.在浏览器中输入url地址 -> 显示主页的过程(面试常客)

     

    总体来说分为以下几个过程:
    
    DNS解析域名,将域名www.baidu.com解析成IP地址
    TCP三次握手建立连接:浏览器以一个随机端口(1024~65535)向服务器的80端口发送TCP连接
    TCP建立连接后发送HTTP请求
    服务器处理请求并返回HTTP报文
    浏览器解析渲染页面
    连接结束

    7.TCP连接需要几次握手?几次挥手?过程是怎样的?为什么是那么多次?

    三次握手:假设 A 为客户端,B 为服务器端。
    
    首先 B 处于 LISTEN(监听)状态,等待客户的连接请求。
    
    A 向 B 发送连接请求报文,SYN=1,ACK=0,选择一个初始的序号 x。
    
    B 收到连接请求报文,如果同意建立连接,则向 A 发送连接确认报文,SYN=1,ACK=1,确认号为 x+1,同时也选择一个初始的序号 y。
    
    A 收到 B 的连接确认报文后,还要向 B 发出确认,确认号为 y+1,序号为 x+1。
    
    B 收到 A 的确认后,连接建立。
    
    【第三次握手原因】
    是为了防止失效的连接请求到达服务器,让服务器错误打开连接。
    客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。
    -----------------------
    以下描述不讨论序号和确认号,因为序号和确认号的规则比较简单。并且不讨论 ACK,因为 ACK 在连接建立之后都为 1。
    
    A 发送连接释放报文,FIN=1。
    
    B 收到之后发出确认,此时 TCP 属于半关闭状态,B 能向 A 发送数据但是 A 不能向 B 发送数据。
    
    当 B 不再需要连接时,发送连接释放报文,FIN=1。
    
    A 收到后发出确认,进入 TIME-WAIT 状态,等待 2 MSL(最大报文存活时间)后释放连接。
    
    B 收到 A 的确认后释放连接。
    
    【四次挥手的原因】
    
    客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。
    View Code

    8.什么是https协议?https协议用到了哪种密钥?

    http是HTTP协议运行在TCP之上。所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。
    
    https是HTTP运行在SSL/TLS之上,SSL/TLS运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。此外客户端可以验证服务器端的身份,如果配置了客户端验证,服务器方也可以验证客户端的身份。
    
    https协议需要到ca申请证书,一般免费证书很少,需要交费。
    
    http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议
    
    http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。
    
    http的连接很简单,是无状态的
    
    HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全
    View Code

    9.HTTP首部字段

    通、请、响、实
    有 4 种类型的首部字段:通用首部字段、请求首部字段、响应首部字段和实体首部字段。
    View Code

    10.post和get区别

    https://www.zhihu.com/question/28586791
    1. 最直观的就是语义上的区别,get用于获取数据,post用于提交数据。
    
    2. get参数有长度限制(受限于url长度,具体的数值取决于浏览器和服务器的限制),而post无限制详细说下第一点,先说结论:颠倒两者会造成非常糟糕的结果。比如一个网页地址是:http://www.taobao.com?itemId=123 
    你把它发给朋友,说这个东西很酷!这就是用get来获取数据最正确的方式,它有利于传播。但如果你用post请求获取到一个商品页面,url还是http://www.taobao.com
    那你把这个url分享给朋友是没有意义的。
    
    反过来说,如果你用http://www.weibo.com?uid=1&content=haha&token=xxxxxxxxxx
    来发一条内容为haha的微博,并且这个url被其他人看到了。那他直接把url在他那儿复制一下就可以帮你发微博了,是不是也很不合理?
    View Code

    11.TCP如何保证传输的可靠性?

    TCP协议保证数据传输可靠性的方式主要有:
    校验和
    序列号
    确认应答
    超时重传
    连接管理
    流量控制
    拥塞控制
    View Code

    12.HTTP请求和响应的报文结构(格式)

    HTTP请求的报文格式:
    1、请求行:请求方法、URL、HTTP协议版本号
    2、请求头:若干键值对组成
    3、请求空行:告诉服务器请求头的键值对已经发送完毕
    4、请求主体
    
    HTTP响应的报文格式:
    1、响应行:状态码、状态码描述、HTTP协议版本号
    2、响应头:若干键值对组成
    3、响应空行:标识响应头的结束
    4、响应主体

    13、HTTP常见的状态码

    1、1XX:信息性状态码,表示接收的请求正在处理
    2、2XX:成功状态码,表示请求正常处理完毕
    3、3XX:重定向状态码,表示需要进行附加操作以完成请求
    4、4XX:客户端错误状态码,表示服务器无法处理请求
    5、5XX:服务端错误状态码,表示服务器处理请求出错
    
    常见的状态码有:
    1200 OK,请求被正常处理
    2301 Move Permanently,永久性重定向
    3302 Found,临时性重定向
    4400 Bad Request,请求报文存在语法错误
    5403 Forbidden,对请求资源的访问被服务器拒绝
    6404 Not Found,在服务器上不能找到请求的资源
    7500 Internal Server Error,服务器内部错误
  • 相关阅读:
    原子核壳模型程序 BigStick 的用法
    c++ 中的下三角阵矩阵元标记
    BCS方程和Bogoliubov变换
    圆膜振动问题
    核结构单体跃迁算符
    python画球谐函数
    gnuplot 绘制球谐函数图
    shell 脚本小知识集锦
    6.12学习总结
    PHP网上商城
  • 原文地址:https://www.cnblogs.com/Roni-i/p/10273997.html
Copyright © 2011-2022 走看看