精华内容
下载资源
问答
  • 2021-07-15 17:33:08

    史上最全,不接受反驳!!!!!!!另外,文末也给出了 PDF 版本,记得给帅地一个赞啊!!!

    1、说一说三次握手

    当面试官问你为什么需要有三次握手、三次握手的作用、讲讲三次三次握手的时候,我想很多人会这样回答:

    首先很多人会先讲下握手的过程:

    1、第一次握手:客户端给服务器发送一个 SYN 报文。

    2、第二次握手:服务器收到 SYN 报文之后,会应答一个 SYN+ACK 报文。

    3、第三次握手:客户端收到 SYN+ACK 报文之后,会回应一个 ACK 报文。

    4、服务器收到 ACK 报文之后,三次握手建立完成。

    作用是为了确认双方的接收与发送能力是否正常。

    这里我顺便解释一下为啥只有三次握手才能确认双方的接受与发送能力是否正常,而两次却不可以
    第一次握手:客户端发送网络包,服务端收到了。这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。

    第二次握手:服务端发包,客户端收到了。这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。

    第三次握手:客户端发包,服务端收到了。这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常。

    因此,需要三次握手才能确认双方的接收与发送能力是否正常。

    这样回答其实也是可以的,但我觉得,这个过程的我们应该要描述的更详细一点,因为三次握手的过程中,双方是由很多状态的改变的,而这些状态,也是面试官可能会问的点。所以我觉得在回答三次握手的时候,我们应该要描述的详细一点,而且描述的详细一点意味着可以扯久一点。加分的描述我觉得应该是这样:

    刚开始客户端处于 closed 的状态,服务端处于 listen 状态。然后

    1、第一次握手:客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 ISN©。此时客户端处于 SYN_Send 状态。

    2、第二次握手:服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,并且也是指定了自己的初始化序列号 ISN(s),同时会把客户端的 ISN + 1 作为 ACK 的值,表示自己已经收到了客户端的 SYN,此时服务器处于 SYN_REVD 的状态。

    3、第三次握手:客户端收到 SYN 报文之后,会发送一个 ACK 报文,当然,也是一样把服务器的 ISN + 1 作为 ACK 的值,表示已经收到了服务端的 SYN 报文,此时客户端处于 establised 状态。

    4、服务器收到 ACK 报文之后,也处于 establised 状态,此时,双方以建立起了链接

    图片

    三次握手的作用

    三次握手的作用也是有好多的,多记住几个,保证不亏。例如:

    1、确认双方的接受能力、发送能力是否正常。

    2、指定自己的初始化序列号,为后面的可靠传送做准备。

    1、(ISN)是固定的吗

    三次握手的一个重要功能是客户端和服务端交换ISN(Initial Sequence Number), 以便让对方知道接下来接收数据的时候如何按序列号组装数据。

    如果ISN是固定的,攻击者很容易猜出后续的确认号,因此 ISN 是动态生成的。

    2、什么是半连接队列

    服务器第一次收到客户端的 SYN 之后,就会处于 SYN_RCVD 状态,此时双方还没有完全建立其连接,服务器会把此种状态下请求连接放在一个队列里,我们把这种队列称之为半连接队列。当然还有一个全连接队列,就是已经完成三次握手,建立起连接的就会放在全连接队列中。如果队列满了就有可能会出现丢包现象。

    这里在补充一点关于SYN-ACK 重传次数的问题: 服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超 过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同,一般会是指数增长,例如间隔时间为 1s, 2s, 4s, 8s,

    3、三次握手过程中可以携带数据吗

    很多人可能会认为三次握手都不能携带数据,其实第三次握手的时候,是可以携带数据的。也就是说,第一次、第二次握手不可以携带数据,而第三次握手是可以携带数据的。

    为什么这样呢?大家可以想一个问题,假如第一次握手可以携带数据的话,如果有人要恶意攻击服务器,那他每次都在第一次握手中的 SYN 报文中放入大量的数据,因为攻击者根本就不理服务器的接收、发送能力是否正常,然后疯狂着重复发 SYN 报文的话,这会让服务器花费很多时间、内存空间来接收这些报文。也就是说,第一次握手可以放数据的话,其中一个简单的原因就是会让服务器更加容易受到攻击了。

    而对于第三次的话,此时客户端已经处于 established 状态,也就是说,对于客户端来说,他已经建立起连接了,并且也已经知道服务器的接收、发送能力是正常的了,所以能携带数据页没啥毛病。

    2、说一说四次挥手

    四次挥手也一样,千万不要对方一个 FIN 报文,我方一个 ACK 报文,再我方一个 FIN 报文,我方一个 ACK 报文。然后结束,最好是说的详细一点,例如想下面这样就差不多了,要把每个阶段的状态记好,我上次面试就被问了几个了,呵呵。我答错了,还以为自己答对了,当时还解释的头头是道,呵呵。

    刚开始双方都处于 establised 状态,假如是客户端先发起关闭请求,则:

    1、第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于CLOSED_WAIT1状态。

    2、第二次握手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 + 1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT2状态。

    3、第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态。

    4、第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 + 1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态

    5、服务端收到 ACK 报文之后,就处于关闭连接了,处于 CLOSED 状态。

    image-20210429184413042

    这里特别需要主要的就是TIME_WAIT这个状态了,这个是面试的高频考点,就是要理解,为什么客户端发送 ACK 之后不直接关闭,而是要等一阵子才关闭。这其中的原因就是,要确保服务器是否已经收到了我们的 ACK 报文,如果没有收到的话,服务器会重新发 FIN 报文给客户端,客户端再次收到 FIN 报文之后,就知道之前的 ACK 报文丢失了,然后再次发送 ACK 报文。

    至于 TIME_WAIT 持续的时间至少是一个报文的来回时间。一般会设置一个计时,如果过了这个计时没有再次收到 FIN 报文,则代表对方成功就是 ACK 报文,此时处于 CLOSED 状态。

    这里我给出每个状态所包含的含义,有兴趣的可以看看。

    LISTEN - 侦听来自远方TCP端口的连接请求;

    SYN-SENT -在发送连接请求后等待匹配的连接请求;

    SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认;

    ESTABLISHED- 代表一个打开的连接,数据可以传送给用户;

    FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;

    FIN-WAIT-2 - 从远程TCP等待连接中断请求;

    CLOSE-WAIT - 等待从本地用户发来的连接中断请求;

    CLOSING -等待远程TCP对连接中断的确认;

    LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认;

    TIME-WAIT -等待足够的时间以确保远程TCP接收到连接中断请求的确认;

    CLOSED - 没有任何连接状态;

    3、说一说POST与GET有哪些区别

    使用场景

    GET 用于获取资源,而 POST 用于传输实体主体。

    参数

    GET 和 POST 的请求都能使用额外的参数,但是 GET 的参数是以查询字符串出现在 URL 中,而 POST 的参数存储在实体主体中。不能因为 POST 参数存储在实体主体中就认为它的安全性更高,因为照样可以通过一些抓包工具(Fiddler)查看。

    因为 URL 只支持 ASCII 码,因此 GET 的参数中如果存在中文等字符就需要先进行编码。例如 中文 会转换为 %E4%B8%AD%E6%96%87,而空格会转换为 %20。POST 参数支持标准字符集。

    GET /test/demo_form.asp?name1=value1&name2=value2 HTTP/1.1Copy to clipboardErrorCopied
    POST /test/demo_form.asp HTTP/1.1
    Host: w3schools.com
    name1=value1&name2=value2Copy to clipboardErrorCopied
    

    安全性

    安全的 HTTP 方法不会改变服务器状态,也就是说它只是可读的。

    GET 方法是安全的,而 POST 却不是,因为 POST 的目的是传送实体主体内容,这个内容可能是用户上传的表单数据,上传成功之后,服务器可能把这个数据存储到数据库中,因此状态也就发生了改变。

    安全的方法除了 GET 之外还有:HEAD、OPTIONS。

    不安全的方法除了 POST 之外还有 PUT、DELETE。

    幂等性

    幂等的 HTTP 方法,同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的。换句话说就是,幂等方法不应该具有副作用(统计用途除外)。

    所有的安全方法也都是幂等的。

    在正确实现的条件下,GET,HEAD,PUT 和 DELETE 等方法都是幂等的,而 POST 方法不是。

    GET /pageX HTTP/1.1 是幂等的,连续调用多次,客户端接收到的结果都是一样的:

    GET /pageX HTTP/1.1
    GET /pageX HTTP/1.1
    GET /pageX HTTP/1.1
    GET /pageX HTTP/1.1Copy to clipboardErrorCopied
    

    POST /add_row HTTP/1.1 不是幂等的,如果调用多次,就会增加多行记录:

    POST /add_row HTTP/1.1   -> Adds a 1nd row
    POST /add_row HTTP/1.1   -> Adds a 2nd row
    POST /add_row HTTP/1.1   -> Adds a 3rd rowCopy to clipboardErrorCopied
    

    DELETE /idX/delete HTTP/1.1 是幂等的,即使不同的请求接收到的状态码不一样:

    DELETE /idX/delete HTTP/1.1   -> Returns 200 if idX exists
    DELETE /idX/delete HTTP/1.1   -> Returns 404 as it just got deleted
    DELETE /idX/delete HTTP/1.1   -> Returns 404Copy to clipboardErrorCopied
    

    可缓存

    如果要对响应进行缓存,需要满足以下条件:

    • 请求报文的 HTTP 方法本身是可缓存的,包括 GET 和 HEAD,但是 PUT 和 DELETE 不可缓存,POST 在多数情况下不可缓存的。
    • 响应报文的状态码是可缓存的,包括:200, 203, 204, 206, 300, 301, 404, 405, 410, 414, and 501。
    • 响应报文的 Cache-Control 首部字段没有指定不进行缓存。

    XMLHttpRequest

    为了阐述 POST 和 GET 的另一个区别,需要先了解 XMLHttpRequest:

    XMLHttpRequest 是一个 API,它为客户端提供了在客户端和服务器之间传输数据的功能。它提供了一个通过 URL 来获取数据的简单方式,并且不会使整个页面刷新。这使得网页只更新一部分页面而不会打扰到用户。XMLHttpRequest 在 AJAX 中被大量使用。

    • 在使用 XMLHttpRequest 的 POST 方法时,浏览器会先发送 Header 再发送 Data。但并不是所有浏览器会这么做,例如火狐就不会。
    • 而 GET 方法 Header 和 Data 会一起发送。

    另外,已经把这些整理成 PDF 了,送给大家:500道面试题必知必会(附答案)

    4、面试官:说一说TCP与UDP的区别

    TCP协议的主要特点

    (1)TCP是面向连接的运输层协议;所谓面向连接就是双方传输数据之前,必须先建立一条通道,例如三次握手就是建议通道的一个过程,而四次挥手则是结束销毁通道的一个其中过程。

    (2)每一条TCP连接只能有两个端点(即两个套接字),只能是点对点的;

    (3)TCP提供可靠的传输服务。传送的数据无差错、不丢失、不重复、按序到达;

    (4)TCP提供全双工通信。允许通信双方的应用进程在任何时候都可以发送数据,因为两端都设有发送缓存和接受缓存;

    (5)面向字节流。虽然应用程序与TCP交互是一次一个大小不等的数据块,但TCP把这些数据看成一连串无结构的字节流,它不保证接收方收到的数据块和发送方发送的数据块具有对应大小关系,例如,发送方应用程序交给发送方的TCP10个数据块,但就受访的TCP可能只用了4个数据块久保收到的字节流交付给上层的应用程序,但字节流完全一样。

    TCP的可靠性原理

    可靠传输有如下两个特点:

    a.传输信道无差错,保证传输数据正确;

    b.不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据;

    (1)首先,采用三次握手来建立TCP连接,四次握手来释放TCP连接,从而保证建立的传输信道是可靠的。

    (2)其次,TCP采用了连续ARQ协议(回退N,Go-back-N;超时自动重传)来保证数据传输的正确性,使用滑动窗口协议来保证接方能够及时处理所接收到的数据,进行流量控制。

    (3)最后,TCP使用慢开始、拥塞避免、快重传和快恢复来进行拥塞控制,避免网络拥塞。

    UDP协议特点

    (1)UDP是无连接的传输层协议;

    (2)UDP使用尽最大努力交付,不保证可靠交付;

    (3)UDP是面向报文的,对应用层交下来的报文,不合并,不拆分,保留原报文的边界;

    (4)UDP没有拥塞控制,因此即使网络出现拥塞也不会降低发送速率;

    (5)UDP支持一对一 一对多 多对多的交互通信;

    (6)UDP的首部开销小,只有8字节.

    TCP和UDP的区别

    (1)TCP是可靠传输,UDP是不可靠传输;

    (2)TCP面向连接,UDP无连接;

    (3)TCP传输数据有序,UDP不保证数据的有序性;

    (4)TCP不保存数据边界,UDP保留数据边界;

    (5)TCP传输速度相对UDP较慢;

    (6)TCP有流量控制和拥塞控制,UDP没有;

    (7)TCP是重量级协议,UDP是轻量级协议;

    (8)TCP首部较长20字节,UDP首部较短8字节;

    基于TCP和UDP的常用协议

    HTTP、HTTPS、FTP、TELNET、SMTP(简单邮件传输协议)协议基于可靠的TCP协议。TFTP、DNS、DHCP、TFTP、SNMP(简单网络管理协议)、RIP基于不可靠的UDP协议

    TCP 和 UDP 的常用场景,这个问的好挺多的,例如我当时面试时,就被问过:QQ 登录的过程中,用到了 TCP 和 UDP,QQ 通话呢?

    5、面试题:说一说HTTP1.0,1.1,2.0 的区别

    HTTP/1.0

    1996年5月,HTTP/1.0 版本发布,为了提高系统的效率,HTTP/1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。

    这种方式就好像我们打电话的时候,只能说一件事儿一样,说完之后就要挂断,想要说另外一件事儿的时候就要重新拨打电话。

    HTTP/1.0中浏览器与服务器只保持短暂的连接,连接无法复用。也就是说每个TCP连接只能发送一个请求。发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接。

    我们知道TCP连接的建立需要三次握手,是很耗费时间的一个过程。所以,HTTP/1.0版本的性能比较差。

    HTTP1.0 其实也可以强制开启长链接,例如接受Connection: keep-alive 这个字段,但是,这不是标准字段,不同实现的行为可能不一致,因此不是根本的解决办法。

    HTTP/1.1

    为了解决HTTP/1.0存在的缺陷,HTTP/1.1于1999年诞生。相比较于HTTP/1.0来说,最主要的改进就是引入了持久连接。所谓的持久连接即TCP连接默认不关闭,可以被多个请求复用

    由于之前打一次电话只能说一件事儿,效率很低。后来人们提出一种想法,就是电话打完之后,先不直接挂断,而是持续一小段时间,这一小段时间内,如果还有事情沟通可以再次进行沟通。

    客户端和服务器发现对方一段时间没有活动,就可以主动关闭连接。或者客户端在最后一个请求时,主动告诉服务端要关闭连接。

    HTTP/1.1版还引入了管道机制(pipelining),即在同一个TCP连接里面,客户端可以同时发送多个请求。这样就进一步改进了HTTP协议的效率。

    图片

    有了持久连接和管道,大大的提升了HTTP的效率。但是服务端还是顺序执行的,效率还有提升的空间。

    HTTP/2

    HTTP/2 是 HTTP 协议自 1999 年 HTTP 1.1 发布后的首个更新,主要基于 SPDY 协议。

    HTTP/2 为了解决HTTP/1.1中仍然存在的效率问题,HTTP/2 采用了多路复用。即在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应。能这样做有一个前提,就是HTTP/2进行了二进制分帧,即 HTTP/2 会将所有传输的信息分割为更小的消息和帧(frame),并对它们采用二进制格式的编码。

    也就是说,老板可以同时下达多个命令,员工也可以收到了A请求和B请求,于是先回应A请求,结果发现处理过程非常耗时,于是就发送A请求已经处理好的部分, 接着回应B请求,完成后,再发送A请求剩下的部分。A请求的两部分响应在组合到一起发给老板。

    图片

    而这个负责拆分、组装请求和二进制帧的一层就叫做二进制分帧层

    除此之外,还有一些其他的优化,比如做Header压缩、服务端推送等。

    Header压缩就是压缩老板和员工之间的对话。

    服务端推送就是员工事先把一些老板可能询问的事情提现发送到老板的手机(缓存)上。这样老板想要知道的时候就可以直接读取短信(缓存)了。

    目前,主流的HTTP协议还是HTTP/1.1 和 HTTP/2。并且各大网站的HTTP/2的使用率也在逐年增加。

    6、什么是SQL 注入?举个例子?

    SQL注入就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

    1). SQL注入攻击的总体思路

    (1). 寻找到SQL注入的位置
      (2). 判断服务器类型和后台数据库类型
      (3). 针对不通的服务器和数据库特点进行SQL注入攻击

    2). SQL注入攻击实例

    比如,在一个登录界面,要求输入用户名和密码,可以这样输入实现免帐号登录:

    用户名: ‘or 1 = 1 --
    密 码:
    

    用户一旦点击登录,如若没有做特殊处理,那么这个非法用户就很得意的登陆进去了。这是为什么呢?

    下面我们分析一下:从理论上说,后台认证程序中会有如下的SQL语句:

    String sql = “select * from user_table where username=’ “+userName+” ’ and password=’ “+password+” ‘”;
    

    因此,当输入了上面的用户名和密码,上面的SQL语句变成:

    SELECT * FROM user_table WHERE username=’’or 1 = 1- and password=’’
    

    分析上述SQL语句我们知道,username=‘ or 1=1 这个语句一定会成功;然后后面加两个-,这意味着注释,它将后面的语句注释,让他们不起作用。这样,上述语句永远都能正确执行,用户轻易骗过系统,获取合法身份。

    3). 应对方法

    (1). 参数绑定

    使用预编译手段,绑定参数是最好的防SQL注入的方法。目前许多的ORM框架及JDBC等都实现了SQL预编译和参数绑定功能,攻击者的恶意SQL会被当做SQL的参数而不是SQL命令被执行。在mybatis的mapper文件中,对于传递的参数我们一般是使用#和$来获取参数值。当使用#时,变量是占位符,就是一般我们使用javajdbc的PrepareStatement时的占位符,所有可以防止sql注入;当使用$时,变量就是直接追加在sql中,一般会有sql注入问题。

    (2). 使用正则表达式过滤传入的参数

    7、谈一谈 XSS 攻击,举个例子?

    XSS是一种经常出现在web应用中的计算机安全漏洞,与SQL注入一起成为web中最主流的攻击方式。

    XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些脚本代码嵌入到web页面中去,使别的用户访问都会执行相应的嵌入代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。

    1). XSS攻击的危害

    盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号

    控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力

    盗窃企业重要的具有商业价值的资料

    非法转账

    强制发送电子邮件

    网站挂马

    控制受害者机器向其它网站发起攻击

    2). 原因解析

    主要原因:过于信任客户端提交的数据!

    解决办法:不信任任何客户端提交的数据,只要是客户端提交的数据就应该先进行相应的过滤处理然后方可进行下一步的操作。

    进一步分析细节:客户端提交的数据本来就是应用所需要的,但是恶意攻击者利用网站对客户端提交数据的信任,在数据中插入一些符号以及javascript代码,那么这些数据将会成为应用代码中的一部分了,那么攻击者就可以肆无忌惮地展开攻击啦,因此我们绝不可以信任任何客户端提交的数据!!!

    3). XSS 攻击分类

    (1). 反射性XSS攻击 (非持久性XSS攻击)

    漏洞产生的原因是攻击者注入的数据反映在响应中。一个典型的非持久性XSS攻击包含一个带XSS攻击向量的链接(即每次攻击需要用户的点击),例如,正常发送消息:

    http://www.test.com/message.php?send=Hello,World

    接收者将会接收信息并显示Hello,World;但是,非正常发送消息:

    http://www.test.com/message.php?send=<script>alert(‘foolish!)</script>

    接收者接收消息显示的时候将会弹出警告窗口!

    (2). 持久性XSS攻击 (留言板场景)

    XSS攻击向量(一般指XSS攻击代码)存储在网站数据库,当一个页面被用户打开的时候执行。也就是说,每当用户使用浏览器打开指定页面时,脚本便执行。

    与非持久性XSS攻击相比,持久性XSS攻击危害性更大。从名字就可以了解到,持久性XSS攻击就是将攻击代码存入数据库中,然后客户端打开时就执行这些攻击代码。

    例如,留言板表单中的表单域:

    <input type="text" name="content" value="这里是用户填写的数据">
    

    正常操作流程是:用户是提交相应留言信息 —— 将数据存储到数据库 —— 其他用户访问留言板,应用去数据并显示;而非正常操作流程是攻击者在value填写:

    <script>alert(‘foolish!)</script> <!--或者html其他标签(破坏样式。。。)、一段攻击型代码-->
    

    并将数据提交、存储到数据库中;当其他用户取出数据显示的时候,将会执行这些攻击性代码。

    4). 修复漏洞方针

    漏洞产生的根本原因是 太相信用户提交的数据,对用户所提交的数据过滤不足所导致的,因此解决方案也应该从这个方面入手,具体方案包括:

    将重要的cookie标记为http only, 这样的话Javascript 中的document.cookie语句就不能获取到cookie了(如果在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击);

    表单数据规定值的类型,例如:年龄应为只能为int、name只能为字母数字组合。。。。

    对数据进行Html Encode 处理

    过滤或移除特殊的Html标签,例如:

    <script>, <iframe> , < for <, > for>, &quot for
    

    过滤JavaScript 事件的标签,例如 “οnclick=”, “onfocus” 等等。

    需要注意的是,在有些应用中是允许html标签出现的,甚至是javascript代码出现。因此,我们在过滤数据的时候需要仔细分析哪些数据是有特殊要求(例如输出需要html代码、javascript代码拼接、或者此表单直接允许使用等等),然后区别处理!

    8、在交互过程中如果数据传送完了,还不想断开连接怎么办,怎么维持?

    在 HTTP 中响应体的 Connection 字段指定为 keep-alive

    connetion:keep-alive;
    

    9、GET请求中URL编码的意义

    我们知道,在GET请求中会对URL中非西文字符进行编码,这样做的目的就是为了 避免歧义。看下面的例子,

    针对“name1=value1&name2=value2”的例子,我们来谈一下数据从客户端到服务端的解析过程。首先,上述字符串在计算机中用ASCII吗表示为:

       6E616D6531 3D 76616C756531 26 6E616D6532 3D 76616C756532
       6E616D6531:name1 
       3D:= 
       76616C756531:value1 
       26&
       6E616D6532:name2 
       3D:= 
       76616C756532:value2 
    

    服务端在接收到该数据后就可以遍历该字节流,一个字节一个字节的吃,当吃到3D这字节后,服务端就知道前面吃得字节表示一个key,再往后吃,如果遇到26,说明从刚才吃的3D到26子节之间的是上一个key的value,以此类推就可以解析出客户端传过来的参数。

    现在考虑这样一个问题,如果我们的参数值中就包含 = 或 & 这种特殊字符的时候该怎么办?比如,“name1=value1”,其中value1的值是“va&lu=e1”字符串,那么实际在传输过程中就会变成这样“name1=va&lu=e1”。这样,我们的本意是只有一个键值对,但是服务端却会解析成两个键值对,这样就产生了歧义。

    那么,如何解决上述问题带来的歧义呢?解决的办法就是对参数进行URL编码:例如,我们对上述会产生歧义的字符进行URL编码后结果:“name1=va%26lu%3D”,这样服务端会把紧跟在“%”后的字节当成普通的字节,就是不会把它当成各个参数或键值对的分隔符

    另外,已经把这些整理成 PDF 了,送给大家:500道面试题必知必会(附答案)

    10、HTTP 哪些常用的状态码及使用场景?

    状态码分类

    1xx:表示目前是协议的中间状态,还需要后续请求

    2xx:表示请求成功

    3xx:表示重定向状态,需要重新请求

    4xx:表示请求报文错误

    5xx:服务器端错误

    常用状态码

    101 切换请求协议,从 HTTP 切换到 WebSocket

    200 请求成功,有响应体

    301 永久重定向:会缓存

    302 临时重定向:不会缓存

    304 协商缓存命中

    403 服务器禁止访问

    404 资源未找到

    400 请求错误

    500 服务器端错误

    503 服务器繁忙

    11、HTTP 如何实现长连接?在什么时候会超时?

    通过在头部(请求和响应头)设置 Connection: keep-alive,HTTP1.0协议支持,但是默认关闭,从HTTP1.1协议以后,连接默认都是长连接

    1、HTTP 一般会有 httpd 守护进程,里面可以设置 keep-alive timeout,当 tcp 链接闲置超过这个时间就会关闭,也可以在 HTTP 的 header 里面设置超时时间

    2、TCP 的 keep-alive 包含三个参数,支持在系统内核的 net.ipv4 里面设置:当 TCP 链接之后,闲置了 tcp_keepalive_time,则会发生侦测包,如果没有收到对方的 ACK,那么会每隔 tcp_keepalive_intvl 再发一次,直到发送了 tcp_keepalive_probes,就会丢弃该链接。

    (1)tcp_keepalive_intvl = 15
    (2)tcp_keepalive_probes = 5
    (3)tcp_keepalive_time = 1800

    实际上 HTTP 没有长短链接,只有 TCP 有,TCP 长连接可以复用一个 TCP 链接来发起多次 HTTP 请求,这样可以减少资源消耗,比如一次请求 HTML,可能还需要请求后续的 JS/CSS/图片等

    12、HTTP状态码301和302的区别,都有哪些用途?

    一. 301重定向的概念

    301重定向(301 Move Permanently),指页面永久性转移,表示为资源或页面永久性地转移到了另一个位置。301是HTTP协议中的一种状态码,当用户或搜索引擎向服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header)中包含状态码 301 ,表示该资源已经永久改变了位置。

    301重定向是一种非常重要的"自动转向“技术,网址重定向最为可行的一种方法。

    二. 哪些情况需要做301重定向?

    网页开发过程中,时常会遇到网站目录结构的调整,将页面转移到一个新地址;网页扩展名的改变,这些变化都会导致网页地址发生改变,此时用户收藏夹和搜索引擎数据库中的旧地址是一个错误的地址,访问之后会出现404页面,直接导致网站流量的损失。或者是我们需要多个域名跳转至同一个域名,例如本站主站点域名为 www.conimi.com ,而还有一个域名 www.nico.cc,由于对该域名设置了301重定向,当输入www.nico.cc 时,自动跳转至 www.conimi.com 。

    三. 301重定向有什么优点?

    有利于网站首选域的确定,对于同一资源页面多条路径的301重定向有助于URL权重的集中。例如 www.conimi.com和 conimi.com 是两个不同的域名,但是指向的内容完全相同,搜索引擎会对两个域名收录情况不同,这样导致网站权重和排名被分散;对conimi.com 做301重定向跳转至www.conimi.com 后,权重和排名集中到www.conimi.com,从而提升自然排名。

    四. 302重定向又是什么鬼?

    302重定向(302 Move Temporarily),指页面暂时性转移,表示资源或页面暂时转移到另一个位置,常被用作网址劫持,容易导致网站降权,严重时网站会被封掉,不推荐使用。

    五. 301与302的区别

    301重定向是页面永久性转移,搜索引擎在抓取新内容的同时也将旧的网址替换成重定向之后的网址;

    302重定向是页面暂时性转移,搜索引擎会抓取新的内容而保存旧的网址并认为新的网址只是暂时的。

    13、IP地址有哪些分类?

    A类地址(1~126):网络号占前8位,以0开头,主机号占后24位。

    B类地址(128~191):网络号占前16位,以10开头,主机号占后16位。

    C类地址(192~223):网络号占前24位,以110开头,主机号占后8位。

    D类地址(224~239):以1110开头,保留位多播地址。

    E类地址(240~255):以1111开头,保留位今后使用

    image-20210430143132215

    image-20210430143157173

    14、简单说下每一层对应的网络协议有哪些?

    计算机五层网络体系中涉及的协议非常多,下面就常用的做了列举:

    image-20210607144015234

    15、ARP 协议的工作原理?

    网络层的 ARP 协议完成了 IP 地址与物理地址的映射。首先,每台主机都会在自己的 ARP 缓冲区中建立一个 ARP 列表,以表示 IP 地址和 MAC 地址的对应关系。当源主机需要将一个数据包要发送到目的主机时,会首先检查自己 ARP 列表中是否存在该 IP 地址对应的 MAC 地址:如果有,就直接将数据包发送到这个 MAC 地址;如果没有,就向本地网段发起一个 ARP 请求的广播包,查询此目的主机对应的 MAC 地址。

    此 ARP 请求数据包里包括源主机的 IP 地址、硬件地址、以及目的主机的 IP 地址。网络中所有的主机收到这个 ARP 请求后,会检查数据包中的目的 IP 是否和自己的 IP 地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的 MAC 地址和 IP 地址添加到自己的 ARP 列表中,如果 ARP 表中已经存在该 IP 的信息,则将其覆盖,然后给源主机发送一个 ARP 响应数据包,告诉对方自己是它需要查找的 MAC 地址;源主机收到这个 ARP 响应数据包后,将得到的目的主机的 IP 地址和 MAC 地址添加到自己的 ARP 列表中,并利用此信息开始数据的传输。如果源主机一直没有收到 ARP 响应数据包,表示 ARP 查询失败

    另外,已经把这些整理成 PDF 了,送给大家:500道面试题必知必会(附答案)

    16、TCP 的主要特点是什么?

    1. TCP 是面向连接的。(就好像打电话一样,通话前需要先拨号建立连接,通话结束后要挂机释放连接);

    2. 每一条 TCP 连接只能有两个端点,每一条 TCP 连接只能是点对点的(一对一);

    3. TCP 提供可靠交付的服务。通过 TCP 连接传送的数据,无差错、不丢失、不重复、并且按序到达;

    4. TCP 提供全双工通信。TCP 允许通信双方的应用进程在任何时候都能发送数据。TCP 连接的两端都设有发送缓存和接收缓存,用来临时存放双方通信的数据;

    5. 面向字节流。TCP 中的“流”(Stream)指的是流入进程或从进程流出的字节序列。“面向字节流”的含义是:虽然应用程序和 TCP 的交互是一次一个数据块(大小不等),但 TCP 把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。

    ###17、UDP 的主要特点是什么?

    1. UDP 是无连接的;

    2. UDP 使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态(这里面有许多参数);

    3. UDP 是面向报文的;

    4. UDP 没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如 直播,实时视频会议等);

    5. UDP 支持一对一、一对多、多对一和多对多的交互通信;

    6. UDP 的首部开销小,只有 8 个字节,比 TCP 的 20 个字节的首部要短。

    18、TCP 和 UDP 分别对应的常见应用层协议有哪些?

    1. TCP 对应的应用层协议

    FTP:定义了文件传输协议,使用 21 端口。常说某某计算机开了 FTP 服务便是启动了文件传输服务。下载文件,上传主页,都要用到 FTP 服务。

    Telnet:它是一种用于远程登陆的端口,用户可以以自己的身份远程连接到计算机上,通过这种端口可以提供一种基于 DOS 模式下的通信服务。如以前的 BBS 是-纯字符界面的,支持 BBS 的服务器将 23 端口打开,对外提供服务。

    SMTP:定义了简单邮件传送协议,现在很多邮件服务器都用的是这个协议,用于发送邮件。如常见的免费邮件服务中用的就是这个邮件服务端口,所以在电子邮件设置-中常看到有这么 SMTP 端口设置这个栏,服务器开放的是 25 号端口。

    POP3:它是和 SMTP 对应,POP3 用于接收邮件。通常情况下,POP3 协议所用的是 110 端口。也是说,只要你有相应的使用 POP3 协议的程序(例如 Fo-xmail 或 Outlook),就可以不以 Web 方式登陆进邮箱界面,直接用邮件程序就可以收到邮件(如是163 邮箱就没有必要先进入网易网站,再进入自己的邮-箱来收信)。

    HTTP:从 Web 服务器传输超文本到本地浏览器的传送协议。

    2. UDP 对应的应用层协议

    DNS:用于域名解析服务,将域名地址转换为 IP 地址。DNS 用的是 53 号端口。

    SNMP:简单网络管理协议,使用 161 号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。

    TFTP(Trival File Transfer Protocal):简单文件传输协议,该协议在熟知端口 69 上使用 UDP 服务。

    19、为什么 TIME-WAIT 状态必须等待 2MSL 的时间呢?

    1、为了保证 A 发送的最后一个 ACK 报文段能够到达 B。这个 ACK 报文段有可能丢失,因而使处在 LAST-ACK 状态的 B 收不到对已发送的 FIN + ACK 报文段的确认。B 会超时重传这个 FIN+ACK 报文段,而 A 就能在 2MSL 时间内(超时 + 1MSL 传输)收到这个重传的 FIN+ACK 报文段。接着 A 重传一次确认,重新启动 2MSL 计时器。最后,A 和 B 都正常进入到 CLOSED 状态。如果 A 在 TIME-WAIT 状态不等待一段时间,而是在发送完 ACK 报文段后立即释放连接,那么就无法收到 B 重传的 FIN + ACK 报文段,因而也不会再发送一次确认报文段,这样,B 就无法按照正常步骤进入 CLOSED 状态。

    2、 防止已失效的连接请求报文段出现在本连接中。A 在发送完最后一个 ACK 报文段后,再经过时间 2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样就可以使下一个连接中不会出现这种旧的连接请求报文段。

    20、保活计时器的作用?

    除时间等待计时器外,TCP 还有一个保活计时器(keepalive timer)。设想这样的场景:客户已主动与服务器建立了 TCP 连接。但后来客户端的主机突然发生故障。显然,服务器以后就不能再收到客户端发来的数据。因此,应当有措施使服务器不要再白白等待下去。这就需要使用保活计时器了。

    服务器每收到一次客户的数据,就重新设置保活计时器,时间的设置通常是两个小时。若两个小时都没有收到客户端的数据,服务端就发送一个探测报文段,以后则每隔 75 秒钟发送一次。若连续发送 10个 探测报文段后仍然无客户端的响应,服务端就认为客户端出了故障,接着就关闭这个连接。

    21、TCP 协议是如何保证可靠传输的?

    1. 数据包校验:目的是检测数据在传输过程中的任何变化,若校验出包有错,则丢弃报文段并且不给出响应,这时 TCP 发送数据端超时后会重发数据;

    2. 对失序数据包重排序:既然 TCP 报文段作为 IP 数据报来传输,而 IP 数据报的到达可能会失序,因此 TCP 报文段的到达也可能会失序。TCP 将对失序数据进行重新排序,然后才交给应用层;

    3. 丢弃重复数据:对于重复数据,能够丢弃重复数据;

    4. 应答机制:当 TCP 收到发自 TCP 连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒;

    5. 超时重发:当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段;

    6. 流量控制:TCP 连接的每一方都有固定大小的缓冲空间。TCP 的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这可以防止较快主机致使较慢主机的缓冲区溢出,这就是流量控制。TCP 使用的流量控制协议是可变大小的滑动窗口协议。

    22、谈谈你对停止等待协议的理解?

    停止等待协议是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组;在停止等待协议中,若接收方收到重复分组,就丢弃该分组,但同时还要发送确认。主要包括以下几种情况:无差错情况、出现差错情况(超时重传)、确认丢失和确认迟到、确认丢失和确认迟到。

    23、谈谈你对 ARQ 协议的理解?

    自动重传请求 ARQ 协议

    停止等待协议中超时重传是指只要超过一段时间仍然没有收到确认,就重传前面发送过的分组(认为刚才发送过的分组丢失了)。因此每发送完一个分组需要设置一个超时计时器,其重传时间应比数据在分组传输的平均往返时间更长一些。这种自动重传方式常称为自动重传请求 ARQ。

    连续 ARQ 协议

    连续 ARQ 协议可提高信道利用率。发送方维持一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需要等待对方确认。接收方一般采用累计确认,对按序到达的最后一个分组发送确认,表明到这个分组为止的所有分组都已经正确收到了。

    24、谈谈你对滑动窗口的了解?

    TCP 利用滑动窗口实现流量控制的机制。滑动窗口(Sliding window)是一种流量控制技术。早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。由于大家不知道网络拥塞状况,同时发送数据,导致中间节点阻塞掉包,谁也发不了数据,所以就有了滑动窗口机制来解决此问题。

    TCP 中采用滑动窗口来进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。当滑动窗口为 0 时,发送方一般不能再发送数据报,但有两种情况除外,一种情况是可以发送紧急数据,例如,允许用户终止在远端机上的运行进程。另一种情况是发送方可以发送一个 1 字节的数据报来通知接收方重新声明它希望接收的下一字节及发送方的滑动窗口大小。

    25、谈下你对流量控制的理解?

    TCP 利用滑动窗口实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收。接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。

    另外,已经把这些整理成 PDF 了,送给大家:500道面试题必知必会(附答案)

    26、谈下你对 TCP 拥塞控制的理解?使用了哪些算法?

    拥塞控制和流量控制不同,前者是一个全局性的过程,而后者指点对点通信量的控制。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。

    拥塞控制就是为了防止过多的数据注入到网络中,这样就可以使网络中的路由器或链路不致于过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素。相反,流量控制往往是点对点通信量的控制,是个端到端的问题。流量控制所要做到的就是抑制发送端发送数据的速率,以便使接收端来得及接收。

    为了进行拥塞控制,TCP 发送方要维持一个拥塞窗口(cwnd) 的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个。

    TCP 的拥塞控制采用了四种算法,即:慢开始、拥塞避免、快重传和快恢复。在网络层也可以使路由器采用适当的分组丢弃策略(如:主动队列管理 AQM),以减少网络拥塞的发生。

    • 慢开始:

    慢开始算法的思路是当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么可能会引起网络阻塞,因为现在还不知道网络的符合情况。经验表明,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。cwnd 初始值为 1,每经过一个传播轮次,cwnd 加倍。

    • 拥塞避免:

    拥塞避免算法的思路是让拥塞窗口 cwnd 缓慢增大,即每经过一个往返时间 RTT 就把发送方的 cwnd 加 1。

    • 快重传与快恢复:

    在 TCP/IP 中,快速重传和快恢复(fast retransmit and recovery,FRR)是一种拥塞控制算法,它能快速恢复丢失的数据包。

    没有 FRR,如果数据包丢失了,TCP 将会使用定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。有了 FRR,如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。

    有了 FRR,就不会因为重传时要求的暂停被耽误。当有单独的数据包丢失时,快速重传和快恢复(FRR)能最有效地工作。当有多个数据信息包在某一段很短的时间内丢失时,它则不能很有效地工作。

    27、什么是粘包?

    在进行 Java NIO 学习时,可能会发现:如果客户端连续不断的向服务端发送数据包时,服务端接收的数据会出现两个数据包粘在一起的情况。

    1. TCP 是基于字节流的,虽然应用层和 TCP 传输层之间的数据交互是大小不等的数据块,但是 TCP 把这些数据块仅仅看成一连串无结构的字节流,没有边界;

    2. 从 TCP 的帧结构也可以看出,在 TCP 的首部没有表示数据长度的字段。

    基于上面两点,在使用 TCP 传输数据时,才有粘包或者拆包现象发生的可能。一个数据包中包含了发送端发送的两个数据包的信息,这种现象即为粘包。

    接收端收到了两个数据包,但是这两个数据包要么是不完整的,要么就是多出来一块,这种情况即发生了拆包和粘包。拆包和粘包的问题导致接收端在处理的时候会非常困难,因为无法区分一个完整的数据包。

    28、TCP 黏包是怎么产生的?

    • 发送方产生粘包

    采用 TCP 协议传输数据的客户端与服务器经常是保持一个长连接的状态(一次连接发一次数据不存在粘包),双方在连接不断开的情况下,可以一直传输数据。但当发送的数据包过于的小时,那么 TCP 协议默认的会启用 Nagle 算法,将这些较小的数据包进行合并发送(缓冲区数据发送是一个堆压的过程);这个合并过程就是在发送缓冲区中进行的,也就是说数据发送出来它已经是粘包的状态了。

    • 接收方产生粘包

    接收方采用 TCP 协议接收数据时的过程是这样的:数据到接收方,从网络模型的下方传递至传输层,传输层的 TCP 协议处理是将其放置接收缓冲区,然后由应用层来主动获取(C 语言用 recv、read 等函数);这时会出现一个问题,就是我们在程序中调用的读取数据函数不能及时的把缓冲区中的数据拿出来,而下一个数据又到来并有一部分放入的缓冲区末尾,等我们读取数据时就是一个粘包。(放数据的速度 > 应用层拿数据速度)

    29、怎么解决拆包和粘包?

    分包机制一般有两个通用的解决方法:

    1. 特殊字符控制;

    2. 在包头首都添加数据包的长度。

    如果使用 netty 的话,就有专门的编码器和解码器解决拆包和粘包问题了。

    tips:UDP 没有粘包问题,但是有丢包和乱序。不完整的包是不会有的,收到的都是完全正确的包。传送的数据单位协议是 UDP 报文或用户数据报,发送的时候既不合并,也不拆分。

    30、forward 和 redirect 的区别?

    Forward 和 Redirect 代表了两种请求转发方式:直接转发和间接转发。

    直接转发方式(Forward):客户端和浏览器只发出一次请求,Servlet、HTML、JSP 或其它信息资源,由第二个信息资源响应该请求,在请求对象 request 中,保存的对象对于每个信息资源是共享的。

    间接转发方式(Redirect):实际是两次 HTTP 请求,服务器端在响应第一次请求的时候,让浏览器再向另外一个 URL 发出请求,从而达到转发的目的。

    • 举个通俗的例子:

    直接转发就相当于:“A 找 B 借钱,B 说没有,B 去找 C 借,借到借不到都会把消息传递给 A”;

    间接转发就相当于:“A 找 B 借钱,B 说没有,让 A 去找 C 借”。

    31、HTTP 方法有哪些?

    客户端发送的 请求报文 第一行为请求行,包含了方法字段。

    1. GET:获取资源,当前网络中绝大部分使用的都是 GET;

    2. HEAD:获取报文首部,和 GET 方法类似,但是不返回报文实体主体部分;

    3. POST:传输实体主体

    4. PUT:上传文件,由于自身不带验证机制,任何人都可以上传文件,因此存在安全性问题,一般不使用该方法。

    5. PATCH:对资源进行部分修改。PUT 也可以用于修改资源,但是只能完全替代原始资源,PATCH 允许部分修改。

    6. OPTIONS:查询指定的 URL 支持的方法;

    7. CONNECT:要求在与代理服务器通信时建立隧道。使用 SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。

    8. TRACE:追踪路径。服务器会将通信路径返回给客户端。发送请求时,在 Max-Forwards 首部字段中填入数值,每经过一个服务器就会减 1,当数值为 0 时就停止传输。通常不会使用 TRACE,并且它容易受到 XST 攻击(Cross-Site Tracing,跨站追踪)。

    32、在浏览器中输入 URL 地址到显示主页的过程?

    1. DNS 解析:浏览器查询 DNS,获取域名对应的 IP 地址:具体过程包括浏览器搜索自身的 DNS 缓存、搜索操作系统的 DNS 缓存、读取本地的 Host 文件和向本地 DNS 服务器进行查询等。对于向本地 DNS 服务器进行查询,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析(此解析具有权威性);如果要查询的域名不由本地 DNS 服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个 IP 地址映射,完成域名解析(此解析不具有权威性)。如果本地域名服务器并未缓存该网址映射关系,那么将根据其设置发起递归查询或者迭代查询;
    2. TCP 连接:浏览器获得域名对应的 IP 地址以后,浏览器向服务器请求建立链接,发起三次握手;
    3. 发送 HTTP 请求:TCP 连接建立起来后,浏览器向服务器发送 HTTP 请求;
    4. 服务器处理请求并返回 HTTP 报文:服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器;
    5. 浏览器解析渲染页面:浏览器解析并渲染视图,若遇到对 js 文件、css 文件及图片等静态资源的引用,则重复上述步骤并向服务器请求这些资源;浏览器根据其请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面。
    6. 连接结束。

    另外,已经把这些整理成 PDF 了,送给大家:500道面试题必知必会(附答案)

    33、DNS 的解析过程?

    1. 主机向本地域名服务器的查询一般都是采用递归查询。所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果或者是所要查询的 IP 地址,或者是报错,表示无法查询到所需的 IP 地址。

    2. 本地域名服务器向根域名服务器的查询的迭代查询。迭代查询的特点:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地服务器进行后续的查询。根域名服务器通常是把自己知道的顶级域名服务器的 IP 地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的 IP 地址,要么告诉本地服务器下一步应当向哪一个权限域名服务器进行查询。最后,本地域名服务器得到了所要解析的 IP 地址或报错,然后把这个结果返回给发起查询的主机。

    34、谈谈你对域名缓存的了解?

    为了提高 DNS 查询效率,并减轻服务器的负荷和减少因特网上的 DNS 查询报文数量,在域名服务器中广泛使用了高速缓存,用来存放最近查询过的域名以及从何处获得域名映射信息的记录。

    由于名字到地址的绑定并不经常改变,为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器并处理超过合理时间的项(例如:每个项目两天)。当域名服务器已从缓存中删去某项信息后又被请求查询该项信息,就必须重新到授权管理该项的域名服务器绑定信息。当权限服务器回答一个查询请求时,在响应中都指明绑定有效存在的时间值。增加此时间值可减少网络开销,而减少此时间值可提高域名解析的正确性。

    不仅在本地域名服务器中需要高速缓存,在主机中也需要。许多主机在启动时从本地服务器下载名字和地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到名字时才使用域名服务器。维护本地域名服务器数据库的主机应当定期地检查域名服务器以获取新的映射信息,而且主机必须从缓存中删除无效的项。由于域名改动并不频繁,大多数网点不需花精力就能维护数据库的一致性。

    35、谈下你对 HTTP 长连接和短连接的理解?分别应用于哪些场景?

    在 HTTP/1.0 中默认使用短连接。也就是说,客户端和服务器每进行一次 HTTP 操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个 HTML 或其他类型的 Web 页中包含有其他的 Web 资源(如:JavaScript 文件、图像文件、CSS 文件等),每遇到这样一个 Web 资源,浏览器就会重新建立一个 HTTP 会话。

    而从 HTTP/1.1 起,默认使用长连接,用以保持连接特性。使用长连接的 HTTP 协议,会在响应头加入这行代码:

    Connection:keep-alive
    

    在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输 HTTP 数据的 TCP 连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。

    Keep-Alive 不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如:Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。

    36、HTTPS 的工作过程?

    1、 客户端发送自己支持的加密规则给服务器,代表告诉服务器要进行连接了;

    2、 服务器从中选出一套加密算法和 hash 算法以及自己的身份信息(地址等)以证书的形式发送给浏览器,证书中包含服务器信息,加密公钥,证书的办法机构;

    3、客户端收到网站的证书之后要做下面的事情:

    • 验证证书的合法性;

    • 果验证通过证书,浏览器会生成一串随机数,并用证书中的公钥进行加密;

    • 用约定好的 hash 算法计算握手消息,然后用生成的密钥进行加密,然后一起发送给服务器。

    4、服务器接收到客户端传送来的信息,要做下面的事情:

    • 4.1 用私钥解析出密码,用密码解析握手消息,验证 hash 值是否和浏览器发来的一致;
    • 4.2 使用密钥加密消息;

    5、如果计算法 hash 值一致,握手成功。

    37、HTTP 和 HTTPS 的区别?

    1. 开销:HTTPS 协议需要到 CA 申请证书,一般免费证书很少,需要交费;

    2. 资源消耗:HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 ssl 加密传输协议,需要消耗更多的 CPU 和内存资源;

    3. 端口不同:HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443;

    4. 安全性:HTTP 的连接很简单,是无状态的;HTTPS 协议是由 TSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全

    38、HTTPS 的优缺点?

    优点:

    1. 使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;

    2. HTTPS 协议是由 SSL + HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 HTTP 协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性;

    3. HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。

    缺点:

    1. HTTPS 协议握手阶段比较费时,会使页面的加载时间延长近 50%,增加 10% 到 20% 的耗电;

    2. HTTPS 连接缓存不如 HTTP 高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;

    3. SSL 证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用;

    4. SSL 证书通常需要绑定 IP,不能在同一 IP 上绑定多个域名,IPv4 资源不可能支撑这个消耗;

    5. HTTPS 协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL 证书的信用链体系并不安全,特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行。

    39、什么是数字签名?

    为了避免数据在传输过程中被替换,比如黑客修改了你的报文内容,但是你并不知道,所以我们让发送端做一个数字签名,把数据的摘要消息进行一个加密,比如 MD5,得到一个签名,和数据一起发送。然后接收端把数据摘要进行 MD5 加密,如果和签名一样,则说明数据确实是真的。

    40、什么是数字证书?

    对称加密中,双方使用公钥进行解密。虽然数字签名可以保证数据不被替换,但是数据是由公钥加密的,如果公钥也被替换,则仍然可以伪造数据,因为用户不知道对方提供的公钥其实是假的。所以为了保证发送方的公钥是真的,CA 证书机构会负责颁发一个证书,里面的公钥保证是真的,用户请求服务器时,服务器将证书发给用户,这个证书是经由系统内置证书的备案的。

    41、Cookie 和 Session 有什么区别?

    1、由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session.典型的场景比如购物车。

    当你点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session,用用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书。

    这个Session是保存在服务端的,有一个唯一标识。在服务端保存Session的方法很多,内存、数据库、文件都有。集群的时候也要考虑Session的转移,在大型的网站,一般会有专门的Session服务器集群,用来保存用户会话,这个时候 Session 信息都是放在内存的,使用一些缓存服务比如Memcached之类的来放 Session。

    2、思考一下服务端如何识别特定的客户?这个时候Cookie就登场了。每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端。实际上大多数的应用都是用 Cookie 来实现Session跟踪的,第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在 Cookie 里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器,我就知道你是谁了。

    有人问,如果客户端的浏览器禁用了 Cookie 怎么办?一般这种情况下,会使用一种叫做URL重写的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。

    3、Cookie其实还可以用在一些方便用户的场景下,设想你某次登陆过一个网站,下次登录的时候不想再次输入账号了,怎么办?这个信息可以写到Cookie里面,访问网站的时候,网站页面的脚本可以读取这个信息,就自动帮你把用户名给填了,能够方便一下用户。这也是Cookie名称的由来,给用户的一点甜头。

    所以,总结一下:

    Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中。

    Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。

    另外,已经把这些整理成 PDF 了,送给大家:500道面试题必知必会(附答案)

    整理不容易,如果觉得有帮助,记得给 @帅地 一个赞啊

    更多相关内容
  • 本文主要对笔者学习计算机网络概述时的知识点进行整理汇总

    第1章 计算机网络概述

    1.1为什么要学习计算机网络

    在当前的互联网时代,计算机网络已经成为了我国的一项重要的通信基础设施,无论是你是在校的计算机专业大学生,还是正在从事网络相关工作的从业人员,计算机网络的学习都是十分重要的。

    本人是一名Java开发工程师,在我参加各大公司的面试时,被问的很频繁的就是计算机网络相关的知识,尤其是TCP/IP这一块的知识。

    在工作中,也会遇到因为网络原因导致的服务bug,如果不明白其中的原理,是很难排查出问题的。

    因此,对于一名合格的程序员来说,计算机网络的学习是不能被忽视的,因为你所编写的代码,你所开发的功能大多数都是需要通过计算机与计算机之间的通信,对数据进行传输处理。

    1.2什么是Internet?

    在这里,我们想要了解Internet,就首先需要了解什么是网络。

    网络:即计算机网络的简称,由若干结点和结点之间的链路组成。

    在这里插入图片描述

    因特网(internet):即网络的网络,是由多个路由器将多个网络连接组成的一个大范围的网络。
    在这里插入图片描述
    互联网(Internet):特指Internet,起源于美国,是目前全球范围最大的计算机网络,我们日常生活中所使用的网络就是Internet。

    1.3计算机网络的分类

    按照不同的划分方式,计算机网络可以分为不同的类别。

    1)按照使用者分类

    可以将计算机网络分为专用网和公用网,所谓的专用网就是指各个机关单位专用的网络(不共享,如军用网络、校园网等),公用网就是公共的网络(开放共享,如Internet)。

    2)按照传输介质分类

    可以将计算机分为有线网络和无线网络

    3)按照覆盖范围分类

    可以将网络分为,广域网(WAN),城域网(MAN),局域网(LAN),个域网(PAN)。

    广域网:作用范围通常为几十到几千公里。

    城域网:作用距离约为 5 ~ 50 公里。

    局域网:局限在较小的范围(如 1 公里左右)。

    个域网:范围很小,大约在 10 米左右。

    注:若中央处理机之间的距离非常近(如仅1米的数量级甚至更小些),则一般就称之为多处理机系统,而不称它为计算机网络。

    4)拓扑结构分类

    网络的拓扑结构是指由网中结点(路由器、主机等)与通信线路(网线)之间的几何关系表示的网络结构。

    可以将计算机网络分为总线形、星形、环形和网状等。

    总线形网络:用单根传输线把计算机连接起来。

    星形网络:每个终端或计算机都以单独的线路与中央设备相连。

    环形网络:所有计算机接口设备连接成一个环。

    网状网络:一般情况下,每个结点至少有两条路径与其他结点相连,多用在广域网中。
    在这里插入图片描述

    4)按照交换技术分类

    可以将网络分为电路交换网,报文交换网以及分组交换网

    该部分将在下面的网络核心部分进行详细介绍

    1.4计算机网络的组成

    知道了什么是Internet,以及计算机网络的分类后,我们就需要了解计算机网络到底是由什么组成的了。

    一般地,我们将计算机网络分为边缘部分和核心部分。
    在这里插入图片描述

    1.4.1网络边缘部分

    1.4.1.1 基本概念

    边缘部分由所有连接到Internet上的供用户直接使用的网络主机设备(PC、智能手机、平板等)组成。主要作用是用来进行通信和资源共享。

    在计算机网络中,我们经常称这些主机设备为端系统。在这里,我们需要明确一个概念,我们常说的“主机A和主机B进行通信”,指的就是“运行在主机A上的某个程序与运行在主机B上的另外一个程序进行通信”,即“主机A的某个进程和主机B上的另外一个进程之间的通信”,这种说法可以简称为“计算机之间的通信”。

    1.4.1.2 端系统之间的通信方式

    在端系统(主机)之间的通信方式通常被分为两种:客户-服务器方式(C/S方式,我们大多数开发的应用都是基于这种模式)、对等方式(P2P)。

    1.4.1.2.1 C/S模式

    C,指的是Client(客户端)。S,指的是Server(服务器)。

    客户-服务器方式描述的是进程之间的服务和被服务的关系。其中客户是服务的请求方,服务器是提供服务的提供方

    举个栗子:你想搜索到笔者的这篇文章,你该怎么做?

    你可能会打开CSDN网站,在搜索框中键入本篇文章的标题,点击查询,就可以看到包含本篇文章的一系列文章信息。在这个过程中,你的计算机为你默默的发起了请求(作为客户),向CSDN的服务器(作为服务器)请求与你键入的关键字相关的文章信息。在这个过程中,你的主机就是客户,是“根据关键字获取文章信息”这项服务的请求方,CSDN的服务器就是“根据关键字获取文章信息”这项服务的提供方。(当然这里简化了整个查询过程,只是为了讲解C/S方式的运作模式)。

    下图是上述例子的示意图。

    在这里插入图片描述

    客户-服务器方式的特点:

    • 客户程序

      • 被用户调用后运行,在通信时主动向服务器发起通信,因此客户程序必须知道服务器程序的地址。

      • 不需要特殊的硬件和很复杂的操作系统。

    • 服务器程序

      • 是一种专门用来提供某种服务的程序,可以同事处理多个请求。

      • 系统启动后即自动调用并且一直不断的运行着,等待并接受客户程序的请求。

      • 一般需要强大的硬件和高级的操作系统的支持。

    由客户-服务器方式的特点,我们也可以看出,客户-服务器方式有一个致命的缺点,那就是,对于服务器的要求十分严格,一旦服务器宕机就会导致服务的不可用,并且如果短时间内请求的客户数量很大,也会导致服务器压力的激增,导致服务的响应很慢,甚至出现服务器的入队队列被占满,导致后面的用户请求被服务器拒绝。因此C/S架构的应用程序本质上来说是十分脆弱的(当然我们也有很多手段来增强服务器的可靠性,这些内容就不在本次讨论的范围之内了)。那么有没有一种通信方式,可以解决C/S方式的这个缺点呢?答案是肯定的,那就是P2P模式

    1.4.1.2.2 P2P模式

    对等连接(peer-to-peer)是指两台主机在通讯时不区分哪一个是服务的提供方哪一个是服务的请求方。只要两台主机都运行了对等连接软件(P2P)软件,他们就可以进行平等的、对等连接通信。这时,双方都可以下载对方已经存储在硬盘中的共享文档。P2P工作方式可以支持大量对等用户同时工作,具体细节在这里不进行介绍,会在后续的应用层章节进行详细的介绍。

    下图是P2P工作方式的示意图。

    在这里插入图片描述

    注:由上图可以看出,其实P2P工作方式的本质还是C/S方式,只不过在P2P工作方式中,每一台主机既是服务的请求方也是服务的提供方

    1.4.2网络核心部分

    核心部分由大量的网络和连接这些网络的路由器组成,它为边缘部分的通信和资源共享提供服务。

    那么,核心部分是怎样为边缘部分提供服务(数据传输)的呢?

    计算机网络核心部分的数据交换方式分为三种

    1)电路交换

    在源结点和目的结点之间建立一条专用的通路用于传输数据。(电话网就是使用的电路交换)
    在这里插入图片描述

    电路交换的步骤:

    1. 建立连接
    2. 发送数据
    3. 拆除连接

    优点:

    • 通信时延小:通信线路是双方用户专用的,数据直达。
    • 有序传输、没有冲突:通信双方通信时,按照发送顺序传送数据,不存在失序问题,每个信道都是双方专用的,不存在数据冲突。
    • 实时性强:通信双方之间的物理通路一旦建立,双方就可以随时通信。

    缺点:

    • 建立连接时间长:电路交换的平均连接建立时间对于计算机通信来说太长了
    • 当双方建立连接后,这条通信链路就无法被其他用户使用,即使此时在该链路上并没有数据推送。
    • 灵活性差:只要双方之间的通信链路出现故障,就必须重新拨号连接。
    • 难以规格化:电路交换时,数据直达,不同类型、不同规格、不同速率的终端很难相互通信。

    2)报文交换

    在源结点将用户数据加上目的地址、源地址、校验数据等信息,封装成报文,整个报文传送到相邻的结点中,在该结点中把报文全部存储后,再转发给下一个结点,不断重复到这个过程,直至数据到达目的结点。其中,每个结点都可以单独的选择传输数据的路径。

    报文交换网络也称为存储-转发网络,主要特点是将整个报文先传送到相邻结点,全部存储后再转发到下一个结点。
    在这里插入图片描述

    优点:

    • 无需建立连接
    • 可以动态分配线路
    • 可以实现格式转换
    • 可以实现差错控制
    • 可以将同一份报文同时传输给不同的节点,实现一对多的数据传输

    缺点:

    • 由于每个报文除了用户数据外还要添加上额外的辅助信息,所以增加了资源开销
    • 增加了缓冲时延
    • 缓冲区难以管理(报文的大小不确定,接收方在接收到报文之前难以预留足够的缓冲区)

    3)分组交换

    相较于报文交换每次存储-转发的是完整的报文,分组交换是将用户数据分成较短的固定长度的数据块,加上控制信息后组成一个个分组,以分组-转发的方式传输到目的结点。
    在这里插入图片描述

    优点:

    • 具备报文交换的优点
    • 缓冲易于管理,因为分组的长度是固定的,所以缓冲区的大小也是固定的,相对而言更容易管理。
    • 每个分组的平均时延更小

    缺点:

    • 相较于电路交换,存在冲突的可能
    • 相较于电路交换,存在传输时延
    • 相较于报文交换,增多了控制信息的大小,会传输更多的信息

    三种交换方式的比较:

    要传送的数据量很大且传送时间远大于呼叫时间时,采用电路交换比较合适。

    端到端的通信由多段链路组成时,采用分组交换传送数据较为合适。(PS:报文交换主要在早期的电报通信网中使用,现在较少使用,通常被分组交换代替了)
    在这里插入图片描述

    1.5 计算机网络的性能指标

    当我们使用网络下载某个文件、视频时,都会看到一个下载速度,这个速度的快慢一定程度上反应了当前网络的状态。(作为用户,我们当然希望网速越快越好)

    那么除了这个指标,还有什么指标可以用来衡量网络的性能呢?

    接下来,我将为你介绍,计算机网络中的常用性能指标。

    1.5.1 速率

    网络中的速率是指链接到计算机网络上的主机在数字信道上传送数据的速率,也称数据传输速率数据率或者比特率,单位为b/s(比特/秒),有时也写作bit/s、bps。

    注:在计算机网络中,通常把最高数据传输速率称为带宽。

    我们通常下载文件时所看到的的下载速度,就是当前网络的速率。

    1.5.2 带宽

    带宽本来是指信号具有的频带宽度,其单位是赫(或千赫、兆赫、吉赫等)。

    在计算机网络中,带宽用来表示网络中某通道传送数据的能力。表示在单位时间内网络中的某信道所能通过的“最高数据率”。单位是 bit/s ,即 “比特每秒”。

    1.5.3 吞吐量

    吞吐量表示在单位时间内通过某个网络(或信道、接口)的数据量。吞吐量更经常地用于对现实世界中的网络的一种测量,以便知道实际上到底有多少数据量能够通过网络。吞吐量受网络的带宽或网络的额定速率的限制

    1.5.4 时延

    时延指数据(一个报文或分组,甚至比特)从网络(或链路)的一端传送到另一端所需的时间。它由四个部分构成:发送时延、传播时延、处理时延和排队时延。

    • 发送时延:也称为传输时延,结点将分组的所有比特传输到链路所需的时间,即从发送分组的第一个比特算起,到该分组的最后一个比特发送完毕所需的时间。

      计算公式:发送时延 = 分组长度 / 发送速率
      
    • 传播时延:电磁波在信道中需要传播一定的距离而花费的时间,即一个比特从链路的一端传播到另一端所需的时间。

      计算公式:传播时延 = 信道长度 / 电磁波在信道上的传播速率
      
    • 处理时延:数据在交换结点为存储转发而进行的必要的处理所花费的时间。例如,分析首部、提取数据、差错检验或查找路由等。

    • 排队时延:分组在进入路由器后要现在输入队列中排队等待处理。路由器确定转发端口后,还需要在输出队列中排队等待转发,这就产生了排队时延。

    数据在网络中经历的总时延就是发送时延、传播时延、处理时延和排队时延之和。

    各个时延在网络运输中产生的位置如下图所示
    在这里插入图片描述

    注意:

    • 高速网络链路指的是数据的发送速率高的链路而不是指比特在链路上的传播速率高的链路。

    • 提高链路带宽减小了数据的发送时延。

    1.5.5 时延带宽积

    时延带宽积指发送端发送的第一个比特即将到达终点时,发送端已经发出了多少个比特,因此时延带宽积又被称为以比特为单位的链路长度。

    时延带宽积 = 传播时延 * 信道带宽
    

    1.5.6 往返时延(RTT)

    往返时延(RTT)指从发送端发出一个短分组,到发送端收到该分组来自接收端的确认总共经历的时延。(接收端在收到数据后立刻发出确认)

    1.5.7 信道利用率

    信道利用率指信道有百分之多少的时间是有数据通过的

    计算公式:信道利用率 = 有数据通过时间 / 总时间
    

    1.6计算机网络的体系结构

    1.6.1 协议、接口与服务

    想要弄明白什么是计算机网络体系结构,我们就必须引入计算机网络中常用的术语:协议、接口、服务。

    1.6.1.1 协议

    在这里,如果直接给出计算机网络中的协议的概念,我想各位读者可能依旧很难十分深刻的理解其中的意思,那么我们不妨先类比一个生活中的例子(因为人类的日常活动中,无时无刻不在执行协议)。

    考虑以下场景:你在餐厅吃饭,此时你的手机没快电了,但是你现在迫切的需要给手机充电以便付款,这时,你看见领桌的客人桌上有充电宝,你要向这位客人借用充电宝,你将会怎么做?人类的协议(礼貌的行为方式)中会要求一方先发起问候(例如,“你好”)用以开启双方的通信(对话),如果对方此时心情不错,那么他大概率会用“你好”,来回应你的第一句话“你好”,随后你就可以询问他是否可以借用一下充电宝了,对方对你的这一次询问,可能出现两种情况,一种就是借给你,另外一种就是不借给你了。当然如果对方心情较差,也可能会在你第一次问候“你好”时,回应你“别来烦我”,或者直接忽视你的问候,那么此时,你通常会放弃向这个人借用充电宝。示意图如下。
    在这里插入图片描述

    注意,在这个活动的过程中,你会发送特定的信息,并且根据收到的对方的响应进行或者其他事件(例如,对方直接无视了你)采取的动作。显然,你会发现,在这整个过程中,发送和接收的信息,以及这些信息发送和接收或其他事件岀现时所采取的动作,这些在一个人类协议中起到了核心作用,你们之所以能够正常的通话,是因为你们都受过良好的教育(其实人与人交往之间的礼仪等就是所谓的种种协议,比如有人向你问好的时候,你也需要回复他的问候)。设想一下,如果双方所使用的的协议不同(例如一个人讲中文,一个人讲英语),那么这场对话活动就无法顺利的展开,同样的,在计算机网络中,双方要想正常的进行通讯,那么对等层必须使用相同的协议,那么什么是计算机网络的协议呢?

    协议即规则的集合。在网络中要做到有条不紊地交换数据,就必须遵循一些事先约定好的规则,这些规则明确规定了要交换的数据的格式以及有关的同步问题。这些为进行网络中的数据交换而建立的规则、标准或者约定被称为网络协议。

    协议由语法、语义和同步三部分组成。

    • 语法:规定了传输数据的格式。(类比上述举例,就是说中文还是说英文)
    • 语义:规定了所要完成的功能,即需要发出何种控制信息、完成何种动作以及做出何种应答。(类比上述举例,就是当你听到你好时,礼貌性的也应该回复你好)
    • 同步:规定了执行各种操作的条件、时序关系等,即事件实现顺序的详细说明。(类比上述举例,就是当邻桌的客人只有听到你要问他借用充电宝且他的心情不错时,他才会递给你充电宝)

    注意:协议是控制两个或者多个对等实体进行通信的规则的集合,是水平的。

    接下来,我会举例说明计算机网络中的协议是如何工作的

    考虑一下以下场景:主机A要从主机B获取一个文件。

    PS:这里的示意图,省略了TCP链接建立的细节。
    在这里插入图片描述

    1.6.1.2 接口

    接口是同一结点内相邻两层之间交换信息的连接点,是一个系统内部的规定。

    1.6.1.3 服务

    服务是指下层为紧邻的上层提供的功能调用,它是垂直的。

    协议和服务的区别

    • 只有本层协议的实现才能保证向上一层提供服务。本层的服务用户只能看见服务而无法看见下面的协议,即下层的协议对上层的服务用户是透明的。
    • 协议是水平的,服务是垂直的。

    1.6.2 什么是计算机网络的体系结构

    两个系统中实体之间的通信时一个十分复杂的过程,为了降低协议设计和调试过程中的复杂性,也为了便于对网络进行研究、实现和维护,促进标准化工作,通常对计算机网络的体系结构以分层的方式进行建模。

    计算机网络的体系结构:我们把计算机网络的各层以及其协议的集合称为计算机网络的体系结构。换句话来说,就是计算机网络的体系结构就是这个计算机网络以及所应该完成的功能的准确定义,它是计算机网络中的层次、各层的协议以及层间接口的集合。

    计算机网络的体系结构分层的基本原则

    • 每层都实现一种相对独立的功能,降低系统的复杂度。
    • 各层之间界面自然清晰,易于理解,相互交流尽可能少。
    • 各层功能的精确定义独立于具体的实现方法,可以采用最合适的技术来实现。
    • 保持下层对上层的独立性,上层单向使用下层提供的服务。
    • 整个分层结构应能促进标准化工作。

    1.6.3 IOS/OSI参考模型

    国际标准化组织(ISO)提出的计算机体系结构参考模型(OSI)一共有7层,实际上,OSI参考模型并非实际的因特网所使用的计算机网络体系结构,因此大概率了解一下即可,结构详情如下图所示。
    在这里插入图片描述

    1.6.4 TPC/IP模型

    TCP/IP模型才是事实上的国际标准,结构图如下。
    在这里插入图片描述

    1.6.5 两种模型的比较

    这两种模型有很多相似之处:

    • 都采用了分层结构
    • 都是基于独立的协议栈
    • 都可以解决异构网络的互联,实现世界上不同厂家生产的计算机之间的通信。

    区别:

    • OSI参考模型产生在协议发明之前,没有偏向于任何特定的协议,而TCP/IP模型只适合于TCP/IP的协议栈。
    • OSI参考模型在网络层支持无连接和面向连接的通信,但是在传输层仅有面向连接的通信,而TCP/IP模型在网际层仅提供了无连接的通信,在传输层支持无连接和面向连接的通信。

    1.6.6 关于计算机网络体系结构我们要学习什么

    读到这里,各位读者大概对于计算机网络的体系结构的国际标准有了一定的了解了,那么我们学习计算机网络体系结构应该学习什么呢?其实在我们学习计算机网络的时候,我们会综合OSI模型和TCP/IP模型的优点,采用5层结构的体系结构,即应用层、传输层、网络层、数据链路层以及物理层。
    在这里插入图片描述

    对于每层的作用是什么,在这里就不进行赘述了,在后续的章节我们会进行详细的介绍。

    1.7 互联网的发展历史

    本小节内容作为知识拓展,各位读者可凭兴趣了解一下即可。

    1.7.1 互联网基础结构发展的三个阶段

    • 阶段一

      从单个网络 ARPANET 向互联网发展的过程

      • 1983 年, TCP/IP 协议成为 ARPANET 上的标准协议,使得所有使用 TCP/IP 协议的计算机都能利用互连网相互通信。
      • 人们把 1983 年作为互联网的诞生时间。
      • 1990年,ARPANET 正式宣布关闭。
    • 阶段二

      建成了三级结构的互联网

      它是一个三级计算机网络,分为主干网、地区网和校园网(或企业网)。

    在这里插入图片描述

    • 阶段三

      形成了多层次ISP结构的互联网,出现了互联网服务提供者 ISP (Internet Service Provider)。任何机构和个人只要向某个 ISP 交纳规定的费用,就可从该 ISP 获取所需 IP 地址的使用权,并可通过该 ISP 接入到互联网。

      注:我们日常生活中所说的电信、移动以及联通就是我国三大ISP。

      根据提供服务的覆盖面积大小以及所拥有的 IP 地址数目的不同,ISP 也分成为不同层次的 ISP:主干 ISP、地区 ISP 和 本地 ISP。

    在这里插入图片描述

    1.7.2 互联网在我国的发展

    • 1980年,铁道部建设了专用计算机广域网,进行计算机联网实验。
    • 1989年11月,我国第一个公用分组交换网CNPAC建成运行。
    • 1994年4月20日,我国用64kbit/s专线正式接入互联网,从此,我国被国际上正式承认为接入互联网的国家。
    • 1994年5月,中国科学院高能物理研究所设立了我国第一个万维网服务器。
    • 1994年9月,中国公用计算机互联网CHINANET正式启动。
    • 后续的,我国逐渐建造了更多的公用计算机网络,其中规模最大的是下列五个
      1.中国电信互联网CHINANET(原来的中国公用计算机互联网)
      2.中国联通互联网UNINET
      3.中国移动互联网CMNET
      4.中国教育和科研计算机网CERNET
      5.中国科学技术网CSTNET
      

    参考文献

    《计算机网络:自顶向下方法第七版》- Kurose
    《计算机网络(第7版)》-谢希仁
    《2023年计算机网络考研复习指导》-王道论坛
    

    如果这篇文章有帮助到你,不妨点赞、转发、收藏一下喽~

    展开全文
  • 计算机网络 笔记整理

    千次阅读 2022-03-01 16:42:44
    一、计算机网络的概述 互联网的两个特点:连通性、共享性 互联网的组成:边缘部分:由所以连接在电脑上的主机(端系统:个人电脑、智能手机、网络摄像头)构成,实现资源共享(传送) ISP:网络服务提供商 ...

    一、计算机网络的概述

    互联网的两个特点:连通性、共享性

    互联网的组成边缘部分:由所以连接在电脑上的主机(端系统:个人电脑、智能手机、网络摄像头)构成,实现资源共享(传送)

    ISP:网络服务提供商

    核心部分:路由器 把 广域网、局域网 相互连接起来 构成一个虚拟的互联网络,采用TCP IP协议的话,就是我们现今最大的互联网络 。为边缘部分提供服务,提供连通性和数据交换(分组交换)

    端到端之间通信:(计算机之间的通信)运行在不同的计算机的程序之间的通讯(通过网络)

    两种通信方式:

    客户服务器方式(C/S方式):客户 和 服务器(通信所涉及的两个应用进程)

    客户 请求服务,服务器 提供服务;

    客户软件的特点:

    浏览器的网址 就是服务器;电子邮件也是;

    服务就是响应,用户主动运行,所以客户程序必须知道服务器的地址,不需要特殊的硬件和复杂操作系统;

    服务器软件特点:

    向服务器进程发送一个请求,主进程 会产生一个子进程来处理你的请求,然后主进程又在等着,有人再次发请求,又会产生子进程来处理。

    服务器软件:

    IIS:微软的,可以提供3W服务,FTP服务

    Apache:提供3W服务,

    Proftpd: FTP服务

    服务器程序:指的是服务器软件一定是在运行在服务器硬件平台上的,需要强大的硬件和高级操作系统(软件系统,UNIX,国产的红旗LinuxWindows Server)(可靠性、稳定性)

    对等方式(P2P方式):(内科医生与外科医生)

    资源是分散在这些边缘的主机上的,只需要就近去找哪些计算机上有这些资源

    分组交换:(分组发送) 存储转发:存储(收),转发(寄)

    任何一个分组丢失,都不能还原为原来的报文,可靠传输 需要端系统 负责

    路由器 最主要作用之一:把分组从一个网络 快速传送到另一个网络(网络之间的数据交换)(高速公路)

    转发表:路由器之间相互交换信息,通过计算得来的,是动态发生变化的

    好处:

    灵活:具有多条路径传输,,需要某一部分被破坏,整个网络依然可以运作

    快速:以分组为传送单位,不像电路连接需要建立很长时间,不需要建立连接就能向其他主机发送分组

    多路由:多路径

    展开全文
  • 计算机网络课程设计

    千次阅读 2021-07-11 23:26:26
    办公网络系统 一、题目说明 1、拓扑图应用场景说明 本次实验的网络拓扑图可以运用在某一个公司下属的某一办公...2.使用串行链路模拟广域网连接 3.多个路由器之间运行路由协议 4.在某一个网段中运行一一个服务器 5.确

    办公网络系统

    一、题目说明

    在这里插入图片描述

    1、拓扑图应用场景说明

    本次实验的网络拓扑图可以运用在某一个公司下属的某一办公区域与另一办公区域之间的网络系统。两个办公区域可以不在同一个楼里,但是需要大量的数据通信。在交换机可以添加许多PC机与服务器。在同一网段下的办公区域可以相互通信,也可以和另一网段的同事通信。可以再本办公区域访问到总部的服务器请求服务。
    2、实现及超出总体要求情况
    [总体要求]

    1. 建立多个局域网段
      2.使用串行链路模拟广域网连接
      3.多个路由器之间运行路由协议
      4.在某一个网段中运行一一个服务器
      5.确保每个网段互连互通,客户端可以远程访问服务器。
      6.在客户端使用Wireshark抓包,分析与服务器之间的通信数据。
      实现情况:
    2. 建立了三个网段192.168.20.0 192.168.10.0 192.168.30.0总共三个网段
    3. 在两个路由器之间使用serial口连接串行线,模拟广域网连接
    4. 在192.168.30.0网段实现服务器功能
    5. 在192.168.10.0网段的终端机远程访问192.168.30.0网段的服务器
    6. 最后再wireshark里抓http协议和tcp协议的数据包
      没有超出总体要求情况
      3、网络中涉及的主要技术原理
      本次实验我主要负责路由器直接的通信,ppp协议和rip协议的配置。
      Ppp协议就是一对一的点对点通信,连接两个路由器,属于数据链路层协议,通过serial口连接。
      Rip协议是动态路由协议,是实现跨网段通信的关键,路由器之间通信是通过查询路由表得知下一条地址,动态路由协议就是给定网段后让路由器自己寻找网段的路由器,这样很方便快捷,适合大规模的路由配置。

    二、地址分配

    1、所用网络设备基本情况说明
    本组网络设备有:

    1. 路由器:
      路由器是连接两个或多个网络的硬件设备,在网络间起网关的作用,是读取每一个数据包中的地址然后决定如何传送的专用智能性的网络设备,它能够理解不同的协议。
      本次实验中主要使用跨网段通信
      含有的接口有Console口,Auxiliary端口,GigabitEthernet0/0—0/3端口
      GigabitEthernet1/0—1/23端口,serial2/0端口
      接口带宽为1000M接口

    2. 三层交换机
      三层交换机就是具有部分路由器功能的交换机,三层交换机的最重要目的是加快大型局域网内部的数据交换,所具有的路由功能也是为这目的服务的,能够做到一次路由,多次转发。
      本次实验主要使用本网段通信
      含有的端口有Console口,GigabitEthernet1/0—1/23端口
      接口带宽为1000M接口

    3. PC终端机
      终端机即计算机显示终端,是计算机系统的输入、输出设备。
      含有GigabitEthernet接口
      接口带宽为1000M接口

    4. 服务器
      服务器在网络中为其它客户机(如PC机、智能手机、ATM等终端甚至是火车系统等大型设备)提供计算或者应用服务。这里使用pc机作为服务器使用
      含有GigabitEthernet接口
      接口带宽为1000M接口

    2、每个网段接口的地址分配
    在这里插入图片描述
    在这里插入图片描述

    本网络设置全部采用了c类网段,子网掩码都为255.255.255.0,划分了三个网段
    第一个网段是两个路由器之间的网段。
    第二个网段是第一个路由器器和第一个交换机和所连接的终端机的网段。
    第三网段是第二个路由器和第二个交换机和所连接的服务器的网段。

    3、网络连线的类型及接口说明

    连接第一个和第二个路由器的serial串口,使用串行线连接,
    主要运行ppp协议和rip协议

    连接三层交换机和路由器,使用网线连接,
    用第一个路由器的GigabitEthernet0/0端口连接第一个三层交换机的GigabitEthernet1/0端口, 再用第二个路由器的GigabitEthernet0/0端口连接第二个三层交换机的GigabitEthernet1/0端口。
    连接三层交换机和终端机,使用网线连接
    用第一个三层交换机和终端机的GigabitEthernet端口连接
    连接三层交换机和服务器,使用网线连接
    用第二个三层交换机和终端机的GigabitEthernet端口连接

    三、协议配置

    1、PPP协议配置情况
    首先进入全局配置模式
    将第一个路由更名路由器为xiaohu
    第二个路由器更名为Router A
    Xiaohu作为DCE,Router A作为DTC,在Router A运行CHAP
    Xiaohu的路由配置:
    在这里插入图片描述

    使用int serial2/0命令进入Serial口配置界面,将ip地址设置为192.168.20.3,子网掩码255.255.255.0
    再运行ppp协议,输入encapsulate ppp
    将登录另一台路由的密码设置为0123
    此时可以看到serial2/0端口更新界面改变,显示为up状态

    RouterA的路由配置:
    在这里插入图片描述

    使用int serial2/0命令进入Serial口配置界面,将ip地址设置为192.168.20.2,子网掩码
    255.255.255.0
    运行ppp协议
    将登陆另一台电脑的密码设置为0123
    再进行配置CHAP认证
    在这里插入图片描述
    在这里插入图片描述

    查看两台路由器的CHAP认证
    显示两台路由器的serial2/0端口和line protocol连接都是up状态
    说明ppp协议运行成功,通过serial口成功连接两台路由器

    2、路由协议配置情况
    本实验运行的路由协议是动态路由协议:rip协议
    在这里插入图片描述

    首先配置的是xiaohu路由器连接到三层交换机的外接端口gi0/0 的ip地址
    xiaohu(config)#interface gi0/0
    xiaohu(config-if)#ip address 192.168.10.2 255.255.255.0

    相当于交换机的网关地址就是192.168.10.2,路由器和交换机之前是采用网线直连,连接到交换机的任意gi端口即可

    再运行rip路由协议
    添加一个网关地址192.168.10.0,和路由器ip地址192.168.20.0
    最后一位需要置全0,代表网络地址
    路由器就会自动学习两个网关内的路由形成路由表
    在这里插入图片描述

    在Router A路由器的配置和上一台相同
    配置Router A路由器和三层交换机的外接端口ip地址
    RouterA(config)#interface gi0/0
    RouterA(config-if)#ip address 192.168.30.2 255.255.255.0

    配置完后运行rip协议
    添加一个网关地址192.168.30.0,和路由器ip地址192.168.20.0
    最后一位需要置全0,代表网络地址

    退出之后查看两个路由器的路由表
    在这里插入图片描述
    Xiaohu路由器含有了动态路由表,本地网关是192.168.10.2,包含192.168.30.0网关,通过serial2/0串口连接,需要的路由ip是192.168.20.2
    在这里插入图片描述

    Router A路由器含有了动态路由表,本地网关是192.168.30.3,包含192.168.10.0网关,通过serial2/0串口连接,需要的路由ip是192.168.20.3

    3、其它协议配置情况

    没有配置其他的协议

    四、运行测试

    1、终端机与网关的连通测试
    设置终端机的网关为192.168.30.3,ip地址为192.168.30.20,网络掩码为255.255.255.0
    在这里插入图片描述
    在这里插入图片描述

    Ping网关成功ping通
    字节数32:从192.168.30.3返回32字节数据
    时间20ms:从192.168.30.3返回32字节数据花费小于1ms
    TTL64:TTL是生存时间的意思,数据包存在时间为64
    四个数据包全部接收

    再设置另一台服务器的网关为192.168.10.2,ip地址为192.168.10.20,网络掩码为255.255.255.0
    在这里插入图片描述
    在这里插入图片描述

    成功与网关ping通
    字节数32:从192.168.10.2返回32字节数据
    时间20ms:从192.168.10.2返回32字节数据花费小于1ms
    TTL64:TTL是生存时间的意思,数据包存在时间为64
    四个数据包全部接收

    2、与其它终端机的连通测试
    在这里插入图片描述

    用ip地址为192.168.10.20的终端机ping ip地址为192.168.30.11的终端机,成功ping通,因为是跨网段通信,所以花费的时间远远大于ping同网段的时间
    3、与服务器的连通测试
    在这里插入图片描述

    终端机访问服务器,在终端机上打开本地网页,在服务器上输入对方IP地址就可打开终端机的网页

    五、数据分析

    1、Wireshark抓包过程说明
    在这里插入图片描述

    在终端机上运行Wireshark软件,成功捕获来自ip地址为192.168.30.11的tcp协议和http协议下的数据包传输。
    2、应用层协议分析
    应用层的协议是HTTP协议
    http协议有两类报文,请求报文和响应报文

    请求报文的头部解析:
    Accept:告诉WEB服务器自己接受什么介质类型
    Content-Type:WEB 服务器告诉浏览器自己响应的对象的类型
    Content-Length:WEB 服务器告诉浏览器自己响应的对象的长度
    Cache-Control:用来指示缓存系统应该怎样处理缓存
    Host:客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号
    POST:请求的方式,其中包括URI和版本

    响应报文的头部解析:
    Server:服务器通过这个头告诉浏览器服务器的类型
    Transfer-Encoding:告诉浏览器数据的传送格式
    Date:当前的GMT时间
    Content- Type:表示后面的文档属于什么MIME类型
    Cache-Control:指定请求和响应遵循的缓存机制
    Http协议是基于请求-回应模式,一个客户端给服务器发送请求连接,建立连接后再发送请求报文,服务器报文后再发送一个响应报文,回应客户端
    3、传输层协议分析
    TCP协议传送的数据单元都是报文段
    源端口(Source Port):发送该报文段的主机中应用程序的端口号。
    目的端口(Destination Port):
    序号(Sequence Number):指派给本报文段第一个数据字节的编号,TCP传输保证连接性,发送的每个字节都要编上号。
    确认号(Acknowledgment Number):定义了接收方期望从对方接受的字节编号。
    标志位(Flags):URG(紧急位)、SYN(同步位)、ACK(确认位)、FIN(结束位)、RST(重置位)

    在这里插入图片描述

    TCP协议的三次握手:
    1.:客->服务器:SYN=1,seq=x(请求);服务器由SYN=1知道,客户端要求建立联机;
    2.:服务器->客户端:SYN=1,seq=y(请求),ACK=1,ack=x+1(确认上一个数据);
    3.:客户端->服务器:ACK=1,seq=x+1(客户端的第二次请求),ack=y+1(确认服务器发来的数据)

    4、网络层及数据链路层协议分析
    数据链路层MAC帧结构:
    目的 MAC:
    源 MAC:
    类型: IPv4
    网络层ip包结构:
    版本号(Version):标识目前采用的IP协议的版本号,一般的值为0100(IPv4),0110(IPv6)
    IP包头长度(Header Length):这个字段的作用是为了描述IP包头的长度,因为在IP包头中有变长的可选部分。IP包头最小长度为20字节。
    IP包总长度(Total Length):
    生存时间(TTL):当IP包进行传送时,先会对该字段赋予某个特定的值。当IP包经过每一个沿途的路由器的时候,每个沿途的路由器会将IP包的TTL值减少1。如果TTL减少为0,则该IP包会被丢弃。这个字段可以防止由于路由环路而导致IP包在网络中不停被转发。
    协议(Protocol):标识了上层所使用的协议。
    头部校验(Header Checksum):用来做IP头部的正确性检测,但不包含数据部分。 因为每个路由器要改变TTL的值,所以路由器会为每个通过的数据包重新计算这个值。

    六、个人总结

    在本次实验中,学习到了许多知识,尤其是划分ip地址方面,网关和网段的区别,路由器直接的ip配置,必须在同一网段。以及路由器和交换机的连接采取什么方式,是直连还是连接console口,需不需要给交换机配置ip,反复试错,交换机理论上是可以配置ip地址的,但是因为权限问题无法操作。所以只能采取直连方式,当然也可以对交换机划分vlan分配端口,但是ip就会很多,连通的时候很容易出问题。一个问题很好解决,复加在一起就会有许多问题。连线也很有问题,机子一定要区分正确,端口要找对,连通的端口灯应该是亮的。
    在配置协议的时候不能生搬硬套之前的配置方法,需要了解协议的配置核心是什么,才能灵活运用,比如动态路由rip协议,不能像以前那样从头配置ip地址,再重命名,之前配置是从外部连接gi0/0口连接两个路由器,再运行rip协议,这次实验gi0/0端口是连接交换机的,但是有serial口连接,所以可以直接配置rip协议。
    最麻烦的环节是抓包分析,需要对每一层的协议进行分析,协议头是什么,在抓包软件中都有体现。如何查看三次握手等等。
    小组的分工也很重要,一个人做很容易将ip记混,一起做配置会很方便。
    同时也发现动手能力很弱,需要加强。
    总结下来,本次实验学到了很多东西,不仅学习到了知识,还锻炼了动手能力,分工协作效率十分快速。本次实验是对前面所有实验的大成总结,学到了许多。

    展开全文
  • ​ 前言   本文主要是我学习计网的心得,用王道考研的原因主要是因为...计算机网络就是将一个分散的、具有独立功能的计算机系统,通过通信设备和线路连接起来,由功能完善的软件实现资源共享和信息传递的系统。简而言
  • 《王道计算机网络》学习笔记总目录+思维导图

    万次阅读 多人点赞 2020-03-07 21:47:00
    本篇文章是对《2021王道计算机网络》所有知识点的笔记总结归档,会一直更新下去 之后我也会写操作系统、计算机网络、数据结构与算法、Java、Linux等底层和应用层的技术文章,并总结目录 希望在自己可以复习的同时,...
  • [计算机网络]第一章——计算机网络和因特网
  • 计算机网络的定义以及分类

    千次阅读 2021-02-16 07:40:24
    广域网、城域网、局域网、个域网的介绍以及总线型、星型、环型、网状型、树形网络的优缺点
  • 第一讲——什么是计算机网络

    千次阅读 2022-03-25 00:12:23
    计算机网络概述 计算机网络的概念 一般认为,计算机网络是一个将分散的、具有独立功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统。简而言之,计算机网络就是一些互联...
  • 计算机网络(第8版)笔记

    千次阅读 多人点赞 2021-12-09 22:08:52
    1.1 计算机网络在信息时代的作用 21世纪的一些重要特征:数字化、网络化、信息化 21世纪,是一个以网络为核心的信息时代 三大网络:电信网络、有线电视网络、计算机网络 电信网络最初的作用:向用户提供电话、电报...
  • 计算机网络基础知识 - 详细讲解

    千次阅读 2021-11-27 11:42:38
    考虑到后面的Python课程学习,我们这里把计算机网络基础分为四个板块来给讲解一下。分别是:计算机网络基础、IP地址、URL和域名、客户端和服务器。 一、计算机网络基础 网络对于每个人来说都不陌生,首先我们要...
  • 计算机网络实验软件工具

    千次阅读 2020-11-16 17:42:33
    一、Cisco Packet Tracer 安装包:Cisco Packet Tracer百度网盘链接 提取码:0211 ...复制这段内容后打开百度网盘手机App,操作更方便哦 三、Quick Easy FTP Server —— 服务器配置 安装包:Quick
  • 计算机网络期末总结

    千次阅读 多人点赞 2021-01-10 13:09:41
    写在前面 作者:夏日 ...题型及复习说明 题型及分值分布 一、单选题(本题共10题,每题2分,共20分) 二、填空题(本题共10题,每题2分,共20分 三、问答题(本题共5题,每题6分,共30分) ...2.计算机网络两种通信方式
  • 计算机网络】第一章 概述

    千次阅读 多人点赞 2022-02-21 13:24:29
    计算机网络》(第7版)绪论
  • 计算机网络第8版课后习题答案整理

    万次阅读 2021-11-19 08:46:41
    一般情况下,通信信道带宽远远大于用户所需的带宽,使用信道复用技术可以提高信道利用率,共享信道资源,降低网络成本。 信道复用技术分为频分复用,时分复用,波分复用,码分复用,空分复用,统计复用,极化波复用...
  • 第一章 计算机网络体系结构 【大纲】 (一)、计算机网络概述 计算机网络的概念、组成与功能、计算机网络的分类 计算机网络的标准化工作及相关组织 (二)、计算机网络体系结构与参考模型 计算机网络分层结构;...
  • 计算机网络期末考试题库(超级多的那种)

    万次阅读 多人点赞 2020-12-04 17:42:27
    废话不多说,不管是...计算机网络试题库——选择题及答案 (共500题) 1、Internet中发送邮件协议是(B )。 A、FTP B、SMTP  C、HTTP  D、POP 2、在 OSI模型中,第 N层和其上的 N+ l层的关系是 (A
  • 计算机网络第1章(概述) 文章目录计算机网络第1章(概述)重要声明图示说明1.1、计算机网络在信息时代的作用我国互联网发展状况1.2、因特网概述1、网络、互连网(互联网)和因特网2、因特网发展的三个阶段3、因特网...
  • 计算机网络由哪几部分组成?

    千次阅读 2021-07-18 01:01:17
    答案:6信息版本:手机版解决时间 2021-04-28 15:55已解决2021-04-27 21:25精选最佳答案2021-04-27 22:39计算机网络通常由三个部分组成,它们是资源子网、通信子网和通信协议通信子网就是计算机网络中负责数据通信的...
  • 在急需要使用网络的临时方法也可以作为短期利用手机的usb网络共享实现手机网络给电脑使用的功能。让电脑使用手机数据流量上网或者手机作为无线网卡连接WiFi后给台式机用。几乎所有的4G手机都有这个功能都是使用方法...
  • 1、什么是计算机网络 计算机网络是将分散的、具有独立功能的计算机系统,通过通信设备和线路连接起来,由功能完善的软件实现资源共享和信息传递的系统。互联的、自治的计算机系统的集合。 2、计算机网络的组成 从...
  • 计算机网络通信新技术的现状与发展趋势随着人们生活水平的提高,其对于计算机网络通信的要求与需求也不断提高,下面是小编搜集整理的一篇探究计算机网络通信新技术现状的论文范文,供大家阅读参考。【摘要】随着我国...
  • 台式电脑如何使用手机网络上网

    千次阅读 2021-06-25 08:49:28
    当今社会网络已经成为大家生活、工作必不可少的重要一部分了,而最近有很多小伙伴问小编台式电脑如何使用手机网络上网,其实很简单,下面就由学习啦小编跟大家分享具体的方法吧,希望对大家有所帮助~台式电脑使用...
  • 计算机网络(一)绪论

    千次阅读 多人点赞 2022-04-20 11:10:47
    计算机网络专栏之绪论
  • 计算机网络的 166 个核心概念

    万次阅读 多人点赞 2022-03-17 10:01:43
    主机:计算机网络上任何一种能够连接网络的设备都被称为主机或者说是端系统,比如手机、平板电脑、电视、游戏机、汽车等,随着 5G 的到来,将会有越来越多的终端设备接入网络。 通信链路:通信链路是由物理链
  • 计算机网络】谢希仁教材轻松解读 概述篇

    千次阅读 多人点赞 2019-02-26 22:40:10
    谢希仁老师的《计算机网络》是一本很不错的书,讲的很详细,在术语方面用词,也非常的准确,但是因为书籍页数比较多,内容比较浓缩,很多人都读不进去,其实分析好每一章节的脉络,以及把握住关键词和关键内容,这...
  • 「IT基础」计算机网络结构

    千次阅读 2022-03-26 20:06:42
    计算机网络结构 计算机网络的规模不同,其结构复杂程度也有所不同。大规模现代计算机网络的结构包括网络边缘,接入网络,核心网络三个部分。 网络边缘 连接到网络上的各种计算机,服务器,智能手机等网络设备被...
  • 计算机网络由通信子网和资源子网组成。计算机网络系统是利用通信设备和线路将地理位置不同、功能独立的多个计算机系统互联起来,以功能完善的网络软件实现网络中资源共享和信息传递的系统。本文操作环境:windows10...
  • 计算机网络吞吐量计算

    万次阅读 2020-12-27 16:00:35
    计算机网络最大吞吐量如何求?@TOC 这需要涉及到3个物理量。 第一:信道带宽 第二:往返传播时延 第三:发送窗口,或者说发送文件大小 之后就可以用公式求出: 最大吞吐量=发送文件/往返时延/信道带宽 欢迎使用...
  • 计算机网络-习题1

    千次阅读 2022-03-04 11:48:25
    1-01 计算机网络可以向用户提供哪些服务? 1-02 试简述分组交换的要点。 1-03 试从多个方面比较电路交换、报文交换和分组交换的主要优缺点。 1-04 为什么说因特网是自印刷术以来人类通信方面最大的变革? 1-05 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 135,264
精华内容 54,105
关键字:

手机使用计算机网络