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,服务器内部错误
  • 相关阅读:
    hdu 5723 Abandoned country 最小生成树 期望
    OpenJ_POJ C16G Challenge Your Template 迪杰斯特拉
    OpenJ_POJ C16D Extracurricular Sports 打表找规律
    OpenJ_POJ C16B Robot Game 打表找规律
    CCCC 成都信息工程大学游记
    UVALive 6893 The Big Painting hash
    UVALive 6889 City Park 并查集
    UVALive 6888 Ricochet Robots bfs
    UVALive 6886 Golf Bot FFT
    UVALive 6885 Flowery Trails 最短路
  • 原文地址:https://www.cnblogs.com/Roni-i/p/10273997.html
Copyright © 2011-2022 走看看