Java 面试 | tcp & ip & http & https(2023版)

文章目录

HTTP&HTTPS

1、Http和Https的区别?

Http 协议运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份;Https是身披SSL (Secure Socket Layer) 外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。二者之间存在如下不同:

  • 端口不同:Http与Http使用不同的连接方式,用的端口也不一样,前者是80,后者是443;
  • 资源消耗:和HTTP通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源;
  • 开销:Https通信需要证书,而证书一般需要向认证机构购买;

2、什么是对称加密与非对称加密

  • 对称密钥加密是指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是密钥发送问题,即如何安全地将密钥发给对方;而非对称加密是指使用一对非对称密钥,即公钥和私钥,公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密。
  • 由于非对称加密的方式不需要发送用来解密的私钥,所以可以保证安全性;但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。

3、客户端不断进行请求链接会怎样?DDos(Distributed Denial of Service)攻击?

服务器端会为每个请求创建一个链接,并向其发送确认报文,然后等待客户端进行确认

(1). DDos 攻击:

  • 客户端向服务端发送请求链接数据包
  • 服务端向客户端发送确认数据包
  • 客户端不向服务端发送确认数据包,服务器一直等待来自客户端的确认

(2). DDos 预防:(没有彻底根治的办法,除非不使用TCP)

  • 限制同时打开SYN半链接的数目
  • 缩短SYN半链接的Timeout 时间
  • 关闭不必要的服务

4、GET 与 POST 的区别?

GET与POST是我们常用的两种HTTP Method,二者之间的区别主要包括如下五个方面:

  1. 从功能上讲,GET一般用来从服务器上获取资源,POST一般用来更新服务器上的资源;
  2. 从REST服务角度上说,GET是幂等的,即读取同一个资源,总是得到相同的数据,而POST不是幂等的,因为每次请求对资源的改变并不是相同的;进一步地,GET不会改变服务器上的资源,而POST会对服务器资源进行改变;
  3. 从请求参数形式上看,GET请求的数据会附在URL之后,即将请求数据放置在HTTP报文的 请求头 中,以 ? 分割URL和传输数据,参数之间以 & 相连。特别地,如果数据是英文字母 / 数字,原样发送;否则,会将其编码为 application/x-www-form-urlencoded MIME 字符串(如果是空格,转换为 +,如果是中文 / 其他字符,则直接把字符串用 BASE64 加密,得出如:%E4%BD%A0%E5%A5%BD,其中 %XX 中的 XX 为该符号以16进制表示的ASCII);而POST请求会把提交的数据则放置在是HTTP请求报文的 请求体 中。
  4. 就安全性而言,POST的安全性要比GET的安全性高,因为GET请求提交的数据将明文出现在URL上,而且POST请求参数则被包装到请求体中,相对更安全。
  5. 从请求的大小看,GET请求的长度受限于浏览器或服务器对URL长度的限制,允许发送的数据量比较小,而POST请求则是没有大小限制的。

为什么在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”,这样服务端会把紧跟在“%”后的字节当成普通的字节,就是不会把它当成各个参数或键值对的分隔符。

5、什么是 HTTP 协议无状态协议?怎么解决Http协议无状态协议?

HTTP 是一个无状态的协议,也就是没有记忆力,这意味着每一次的请求都是独立的,缺少状态意味着如果后续处理需要前面的信息,则它必须要重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就很快。

HTTP 的这种特性有优点也有缺点:

  • 优点:解放了服务器,每一次的请求“点到为止”,不会造成不必要的连接占用
  • 缺点:每次请求会传输大量重复的内容信息,并且,在请求之间无法实现数据的共享

解决方案:

  1. 使用参数传递机制:/param/list?username=wmyskxz 问题:可以解决数据共享的问题,但是这种方式一不安全,二数据允许传输量只有1kb
  2. 使用 Cookie 技术
  3. 使用 Session 技术

6、Session、Cookie 与 Application

Cookie和Session都是客户端与服务器之间保持状态的解决方案,具体来说,cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。

(1). Cookie 及其相关 API :

Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie,而客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器,服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

(2). Session 及其相关 API:

同样地,会话状态也可以保存在服务器端。客户端请求服务器,如果服务器记录该用户状态,就获取Session来保存状态,这时,如果服务器已经为此客户端创建过session,服务器就按照sessionid把这个session检索出来使用;如果客户端请求不包含sessionid,则为此客户端创建一个session并且生成一个与此session相关联的sessionid,并将这个sessionid在本次响应中返回给客户端保存。保存这个sessionid的方式可以采用 cookie机制 ,这样在交互过程中浏览器可以自动的按照规则把这个标识发挥给服务器;若浏览器禁用Cookie的话,可以通过 URL重写机制 将sessionid传回服务器。

(3). Session 与 Cookie 的对比:

  • 实现机制:Session的实现常常依赖于Cookie机制,通过Cookie机制回传SessionID;
  • 大小限制:Cookie有大小限制并且浏览器对每个站点也有cookie的个数限制,Session没有大小限制,理论上只与服务器的内存大小有关;
  • 安全性:Cookie存在安全隐患,通过拦截或本地文件找得到cookie后可以进行攻击,而Session由于保存在服务器端,相对更加安全;
  • 服务器资源消耗:Session是保存在服务器端上会存在一段时间才会消失,如果session过多会增加服务器的压力。

(4). Application:

Application(ServletContext):与一个Web应用程序相对应,为应用程序提供了一个全局的状态,所有客户都可以使用该状态。

7、常用的HTTP方法有哪些?

答:

  • GET:用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器
  • POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式。
  • PUT:传输文件,报文主体中包含文件内容,保存到对应URI位置。
  • HEAD:获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效。
  • DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件。
  • OPTIONS:查询相应URI支持的HTTP方法。

8、常见HTTP状态码

答:

  1. 1xx(临时响应)
  2. 2xx(成功)
  3. 3xx(重定向):表示要完成请求需要进一步操作
  4. 4xx(错误):表示请求可能出错,妨碍了服务器的处理
  5. 5xx(服务器错误):表示服务器在尝试处理请求时发生内部错误

比如常见状态码:

  • 200(成功)
  • 304(未修改):自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容
  • 401(未授权):请求要求身份验证
  • 403(禁止):服务器拒绝请求
  • 404(未找到):服务器找不到请求的网页

9、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. 参数绑定
  2. 使用正则表达式过滤传入的参数

10、XSS 攻击

XSS是一种经常出现在web应用中的计算机安全漏洞,与SQL注入一起成为web中最主流的攻击方式。XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些脚本代码嵌入到web页面中去,使别的用户访问都会执行相应的嵌入代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。

(1). XSS攻击的危害:

  • 盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
  • 控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
  • 盗窃企业重要的具有商业价值的资料
  • 非法转账
  • 强制发送电子邮件
  • 网站挂马
  • 控制受害者机器向其它网站发起攻击

(2). 原因解析:

  • 主要原因:过于信任客户端提交的数据!
  • 解决办法:不信任任何客户端提交的数据,只要是客户端提交的数据就应该先进行相应的过滤处理然后方可进行下一步的操作。
  • 进一步分析细节:客户端提交的数据本来就是应用所需要的,但是恶意攻击者利用网站对客户端提交数据的信任,在数据中插入一些符号以及javascript代码,那么这些数据将会成为应用代码中的一部分了,那么攻击者就可以肆无忌惮地展开攻击啦,因此我们绝不可以信任任何客户端提交的数据!!!

(3). XSS 攻击分类:

反射性 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>!

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

持久性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代码拼接、或者此表单直接允许使用等等),然后区别处理!

11、关于HTTP/2你知道多少?

HTTP/2引入了“服务器端推送”(server push)的概念,它允许服务器端在客户端需要数据之前主动将数据发送到客户端缓存中,从而提高性能。

HTTP/2提供更多的加密支持。

HTTP2使用多路技术,允许多个消息在一个连接上同时交差。

它增加了头压缩( header compression),因此请求非常小,请求和响应的 header都只会占用很小的带宽比例。

12、HTTP协议中1.0版本规范与1.1版本规范的区别是什么?

在HTTP1.0中,当建立连接后,客户端发送一个请求,服务器端返回一个信息后就关闭连接,当浏览器下次请求的时候又要建立连接。显然,这种不断建立连接的方式会造成很多问题。

在HTTP1.1中,引入了持续连接的概念。通过这种连接,浏览器可以在建立一个连接之后,发送请求并得到返回信息,然后继续发送请求再次等到返回信息。也就是说,客户端可以连续发送多个请求,而不用等待每一个响应的到来。

13、与HTTPS相比,HTTP有什么缺点?

HTTP的缺点如下。

(1)通信使用明文,不加密,内容可能被窃听,也就是被抓包分析。

(2)不验证通信方身份,可能遭到伪装。

(3)无法验证报文完整性,可能被篡改。

HTTPS就是HTTP+加密处理(一般是SSL安全通信线路)+认证+完整性保护。

14、HTTP1.0 、 HTTP1.1、HTTP2.0

  • HTTP 1.0:默认使用短连接,浏览器每次请求都需要与服务器建立一次 TCP 连接,服务器处理完成后立即断开 TCP 连接(无连接),服务端不记录客户端的请求状态(无状态)。
  • HTTP 1.1:默认使用长连接,用以保持连接特性。使用长连接的 HTTP 协议,会在响应头加入这行代码:
// Keep-Alive不会永久保持连接,它有一个持续时间,
可以在不同的服务器软件中设定这个时间。
// 实现长连接需要客户端和服务端都支持长连接。
Connection:keep-alives

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

  • HTTP 2.0:引入二进制数据帧和流的概念,支持多路复用、服务器推送,支持使用二进制格式传输数据,而 HTTP 1.0 依然使用文本格式传输。

15、URL和URI的之间有什么区别?

  • URI:是统一资源标志符,可以唯一标识一个资源。
  • URL:是统一资源定位符,可以提供该资源的路径。URL 是 URI 的一个子集,它不仅唯一标识资源,而且还提供了定位该资源的信息。

URI 的作用像身份证号一样,URL 的作用更像家庭住址一样。

16、请回答一下HTTP和HTTPS的区别,以及HTTPS的优缺点。

区别:

(1)HTTP协议是以明文的方式在网络中传输数据,HTTPS协议传输是数据时经过TLS加密后的,HTTPS具有更高的安全性。

(2)HTTPS在TCP三次握手之后还要进行SSL的握手。

(3)HTTPS协议需要服务器申请证书,客户端安装对应的根证书。

(4)HTTP协议端口号是80,HTTPS端口号是443。

HTTPS优点:

(1)传输过程中使用密钥加密,安全性更高。

(2)HTTPS可以认证用户和服务器,确保数据发送到正确的用户和服务器。

HTTPS缺点:

(1)HTTPS握手阶段延时较高(因为三次握手之后还有SSL握手)。

(2)HTTPS部署成本高:一方面HTTPS协议需要使用证书来验证自身安全性,所以需要购买CA证书;另一方面再用HTTPS协议需要进行加密解密的计算,占用CPU资源较多,需要的服务器配置或者数目增加。

TCP&UDP&IP

17、什么是三次握手

在这里插入图片描述

18、为什么不能用两次握手

“三次握手” 的目的是为了防止已失效的链接请求报文突然又传送到了服务端,因而产生错误。

  • 正常的情况:A 发出连接请求,但因连接请求报文丢失而未收到确认,于是 A 再重传一次连接请求。后来收到了确认,建立了连接。数据传输完毕后,就释放了连接。A 共发送了两个连接请求报文段,其中第一个丢失,第二个到达了 B。没有 “已失效的连接请求报文段”。
  • 现假定出现了一种异常情况:即 A 发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达 B。本来这是一个早已失效的报文段。但 B 收到此失效的连接请求报文段后,就误认为是 A 再次发出的一个新的连接请求。于是就向 A 发出确认报文段,同意建立连接。

假设不采用“三次握手”,那么只要 B 发出确认,新的连接就建立了。由于现在 A 并没有发出建立连接的请求,因此不会理睬 B 的确认,也不会向 B 发送数据。但 B 却以为新的运输连接已经建立,并一直等待 A 发来数据。这样,B 的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。

在这里插入图片描述

19、什么是四次挥手

在这里插入图片描述

20、为什么需要四次回收

TCP 协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP 是全双工模式,这就意味着,当 A 向 B 发出 FIN 报文段时,只是表示 A 已经没有数据要发送了,而此时 A 还是能够接受到来自 B 发出的数据;B 向 A 发出 ACK 报文段也只是告诉 A ,它自己知道 A 没有数据要发了,但 B 还是能够向 A 发送数据。

所以想要愉快的结束这次对话就需要四次挥手。

在这里插入图片描述

21、TCP 协议如何来保证传输的可靠性

TCP 提供一种面向连接的、可靠的字节流服务。其中,面向连接意味着两个使用 TCP 的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个 TCP 连接。在一个 TCP 连接中,仅有两方进行彼此通信;而字节流服务意味着两个应用程序通过 TCP 链接交换 8 bit 字节构成的字节流,TCP 不在字节流中插入记录标识符。

对于可靠性,TCP通过以下方式进行保证:

  • 数据包校验:目的是检测数据在传输过程中的任何变化,若校验出包有错,则丢弃报文段并且不给出响应,这时TCP发送数据端超时后会重发数据;
  • 对失序数据包重排序:既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对失序数据进行重新排序,然后才交给应用层;
  • 丢弃重复数据:对于重复数据,能够丢弃重复数据;
  • 应答机制:当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒;
  • 超时重发:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段;
  • 流量控制:TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这可以防止较快主机致使较慢主机的缓冲区溢出,这就是流量控制。TCP使用的流量控制协议是可变大小的滑动窗口协议。

22、TCP与UDP的区别

TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议,它们之间的区别包括:

  • TCP是面向连接的,UDP是无连接的;
  • TCP是可靠的,UDP是不可靠的;
  • TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多的通信模式;
  • TCP是面向字节流的,UDP是面向报文的;
  • TCP有拥塞控制机制;UDP没有拥塞控制,适合媒体通信;
  • TCP首部开销(20个字节)比UDP的首部开销(8个字节)要大;

23、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服务

24、TCP 的拥塞避免机制

拥塞:对资源的需求超过了可用的资源。若网络中许多资源同时供应不足,网络的性能就要明显变坏,整个网络的吞吐量随之负荷的增大而下降。

拥塞控制:防止过多的数据注入到网络中,使得网络中的路由器或链路不致过载。

拥塞控制的方法:

(1). 慢启动 + 拥塞避免:

慢启动:不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小;

拥塞避免:拥塞避免算法让拥塞窗口缓慢增长,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍,这样拥塞窗口按线性规律缓慢增长。

在这里插入图片描述

(2). 快重传 + 快恢复:

快重传:快重传要求接收方在收到一个 失序的报文段 后就立即发出 重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时捎带确认。快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。

所谓快重传,就是使发送方尽快进行重传,而不是等超时重传计时器超时再重传。

  1. 要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认;
  2. 即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认。
  3. 发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传,而不是等该报文段的超时重传计时器超时再重传
  4. 对于个别丢失的报文段,发送方不会出现超时重传,也就不会误认为出现了拥塞(进而降低拥塞窗口cwnd为1)。使用快重传可以使整个网络的吞吐量提高约20%。

发送方一旦收到3个重复确认,就知道现在只是丢失了个别的报文段。于是不启动慢开始算法,而执行快恢复算法

  • 发送方将慢开始门限ssthresh值和拥塞窗口cwnd值调整为当前窗口的一半;开始执行拥塞避免算法。
  • 也有的快恢复实现是把快恢复开始时的拥塞窗口cwnd值再增大一些,即等于新的ssthresh + 3
    1. 既然发送方收到3个重复的确认,就表明有3个数据报文段已经离开了网络;
    2. 这3个报文段不再消耗网络资源而是停留在接收方的接收缓存中;
    3. 可见现在网络中不是堆积了报文段而是减少了3个报文段。因此可以适当把拥塞窗口扩大些。

25、浏览器中输入:“www.xxx.com” 之后都发生了什么?请详细阐述。

经典的网络协议问题。

  1. 由域名→IP地址 寻找IP地址的过程依次经过了浏览器缓存、系统缓存、hosts文件、路由器缓存、 递归搜索根域名服务器。
  2. 建立TCP/IP连接(三次握手具体过程)
  3. 由浏览器发送一个HTTP请求
  4. 经过路由器的转发,通过服务器的防火墙,该HTTP请求到达了服务器
  5. 服务器处理该HTTP请求,返回一个HTML文件
  6. 浏览器解析该HTML文件,并且显示在浏览器端
  7. 这里需要注意:
  • HTTP协议是一种基于TCP/IP的应用层协议,进行HTTP数据请求必须先建立TCP/IP连接
  • 可以这样理解:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
  • 两个计算机之间的交流无非是两个端口之间的数据通信,具体的数据会以什么样的形式展现是以不同的应用层协议来定义的。

第二种:

  1. 打开浏览器,想要请求访问京东,在地址栏输入了网址:www.jd.com。(www.jd.com是域名就是一个IP地址的名称,IP地址不好记,所有有了域名。)
  2. 先将请求信息发给了交换机,然后交给了路由器,路由发给DNS服务器,通过DNS协议去找我们要访问的京东的IP地址:
  3. 查到的京东服务器对应的IP地址之后,路由器通过路由协议找到一个路由转发的最优路径,将你的请求信息还送给这个IP地址的京东的路由器
  4. 京东的路由器发给了京东网站的服务器上
  5. 京东网站服务器按照来的时候的路径,在返回给你他自己的网站
  6. 当你打开浏览器的时候,你的电脑给你的浏览器这个运行起来的程序给了一个编号,叫做端口号,当你的电脑收到京东发送过来的消息的时候,你的电脑通过端口号找到你的浏览器,你的浏览器拿到了京东的网站信息,然后将网站呈现在了自己的浏览器上

26、滑动窗口机制

答:由发送方和接收方在三次握手阶段,互相将自己的最大可接收的数据量告诉对方。也就是自己的数据接收缓冲池的大小。这样对方可以根据已发送的数据量来计算是否可以接着发送。在处理过程中,当接收缓冲池的大小发生变化时,要给对方发送更新窗口大小的通知。这就实现了流量的控制。

27、OSI 网络体系结构与 TCP/IP 协议模型

OSI 是一个理论上的网络通信模型,而 TCP/IP 则是实际上的网络通信标准。但是,它们的初衷是一样的,都是为了使得两台计算机能够像两个知心朋友那样能够互相准确理解对方的意思并做出优雅的回应。现在,我们对 OSI 七层模型的各层进行简要的介绍:物理层、数据链路层、网络层、传输层、会话层、显示层、应用层

1). 物理层

参考模型的最低层,也是OSI模型的第一层,实现了相邻计算机节点之间比特流的透明传送,并尽可能地屏蔽掉具体传输介质和物理设备的差异,使其上层(数据链路层)不必关心网络的具体传输介质。


2). 数据链路层(data link layer)

接收来自物理层的位流形式的数据,并封装成帧,传送到上一层;同样,也将来自上层的数据帧,拆装为位流形式的数据转发到物理层。这一层在物理层提供的比特流的基础上,通过差错控制、流量控制方法,使有差错的物理线路变为无差错的数据链路,即提供可靠的通过物理介质传输数据的方法。


3). 网络层

将网络地址翻译成对应的物理地址,并通过路由选择算法为分组通过通信子网选择最适当的路径。


4). 传输层(transport layer)

在源端与目的端之间提供可靠的透明数据传输,使上层服务用户不必关系通信子网的实现细节。在协议栈中,传输层位于网络层之上,传输层协议为不同主机上运行的进程提供逻辑通信,而网络层协议为不同主机提供逻辑通信,如下图所示。实际上,网络层可以看作是传输层的一部分,其为传输层提供服务。但对于终端系统而言,网络层对它们而言是透明的,它们知道传输层的存在,也就是说,在逻辑上它们认为是传输层为它们提供了端对端的通信,这也是分层思想的妙处。


5). 会话层(Session Layer)

会话层是OSI模型的第五层,是用户应用程序和网络之间的接口,负责在网络中的两节点之间建立、维持和终止通信。


6). 表示层(Presentation Layer):数据的编码,压缩和解压缩,数据的加密和解密

表示层是OSI模型的第六层,它对来自应用层的命令和数据进行解释,以确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。


7). 应用层(Application layer):为用户的应用进程提供网络通信服务

28、网络层的 ARP 协议工作原理?

地址解析协议(ARP) 是通过解析网路层地址来找寻数据链路层地址的一个在网络协议包中极其重要的网络传输协议。

网络层的ARP协议完成了IP地址与物理地址的映射

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

29、IP地址的分类

整个的因特网就是一个单一的、抽象的网络。IP 地址就是给因特网上的每一个主机(或路由器)的每一个接口分配一个在全世界范围是唯一的 32 位标识符,它是一个逻辑地址,用以屏蔽掉物理地址的差异。IP地址编址方案将IP地址空间划分为A、B、C、D、E五类,其中A、B、C是基本类,D、E类作为多播和保留使用,为特殊地址。

每个IP地址包括两个标识码(ID),即网络ID和主机ID。同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机ID与其对应。A~E类地址的特点如下:

  • A类地址:以0开头,第一个字节范围:0~127;
  • B类地址:以10开头,第一个字节范围:128~191;
  • C类地址:以110开头,第一个字节范围:192~223;
  • D类地址:以1110开头,第一个字节范围为224~239;
  • E类地址:以1111开头,保留地址

1). A类地址:1字节的网络地址 + 3字节主机地址,网络地址的最高位必须是“0”

一个A类IP地址是指, 在IP地址的四段号码中,第一段号码为网络号码,剩下的三段号码为本地计算机的号码。如果用二进制表示IP地址的话,A类IP地址就由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”。A类IP地址中网络的标识长度为8位,主机标识的长度为24位,A类网络地址数量较少,有126个网络,每个网络可以容纳主机数达1600多万台。

A类IP地址的地址范围1.0.0.0到127.255.255.255(二进制表示为:00000001 00000000 00000000 00000000 - 01111110 11111111 11111111 11111111),最后一个是广播地址。A类IP地址的子网掩码为255.0.0.0,每个网络支持的最大主机数为256的3次方-2=16777214台。


2). B类地址: 2字节的网络地址 + 2字节主机地址,网络地址的最高位必须是“10”

一个B类IP地址是指,在IP地址的四段号码中,前两段号码为网络号码。如果用二进制表示IP地址的话,B类IP地址就由2字节的网络地址和2字节主机地址组成,网络地址的最高位必须是“10”。B类IP地址中网络的标识长度为16位,主机标识的长度为16位,B类网络地址适用于中等规模的网络,有16384个网络,每个网络所能容纳的计算机数为6万多台。

B类IP地址地址范围128.0.0.0-191.255.255.255(二进制表示为:10000000 00000000 00000000 00000000—-10111111 11111111 11111111 11111111),最后一个是广播地址。B类IP地址的子网掩码为255.255.0.0,每个网络支持的最大主机数为256的2次方-2=65534台。


3). C类地址: 3字节的网络地址 + 1字节主机地址,网络地址的最高位必须是“110”

一个C类IP地址是指,在IP地址的四段号码中,前三段号码为网络号码,剩下的一段号码为本地计算机的号码。如果用二进制表示IP地址的话,C类IP地址就由3字节的网络地址和1字节主机地址组成,网络地址的最高位必须是“110”。C类IP地址中网络的标识长度为24位,主机标识的长度为8位,C类网络地址数量较多,有209万余个网络。适用于小规模的局域网络,每个网络最多只能包含254台计算机。

C类IP地址范围192.0.0.0-223.255.255.255(二进制表示为: 11000000 00000000 00000000 00000000 - 11011111 11111111 11111111 11111111)。C类IP地址的子网掩码为255.255.255.0,每个网络支持的最大主机数为256-2=254台。


4). D类地址:多播地址,用于1对多通信,最高位必须是“1110”

D类IP地址在历史上被叫做多播地址(multicast address),即组播地址。在以太网中,多播地址命名了一组应该在这个网络中应用接收到一个分组的站点。多播地址的最高位必须是“1110”,范围从224.0.0.0到239.255.255.255。


5). E类地址:为保留地址,最高位必须是“1111”

30、IP地址与物理地址

物理地址是数据链路层和物理层使用的地址,IP地址是网络层和以上各层使用的地址,是一种逻辑地址,其中ARP协议用于IP地址与物理地址的对应。

31、影响网络传输的因素有哪些?

将一份数据从一个地方正确地传输到另一个地方所需要的时间我们称之为响应时间。影响这个响应时间的因素有很多。

  • 网络带宽:所谓带宽就是一条物理链路在 1s 内能够传输的最大比特数,注意这里是比特(bit)而不是字节数,也就是 b/s 。网络带宽肯定是影响数据传输的一个关键环节,因为在当前的网络环境中,平均网络带宽只有 1.7 MB/s 左右。
  • 传输距离:也就是数据在光纤中要走的距离,虽然光的传播速度很快,但也是有时间的,由于数据在光纤中的移动并不是走直线的,会有一个折射率,所以大概是光的 2/3,这个时间也就是我们通常所说的传输延时。传输延时是一个无法避免的问题,例如,你要给在杭州和青岛的两个机房的一个数据库进行同步数据操作,那么必定会存在约 30ms 的一个延时。
  • TCP 拥塞控制:我们知道 TCP 传输是一个 “停-等-停-等” 的协议,传输方和接受方的步调要一致,要达到步调一致就要通过拥塞控制来调节。TCP 在传输时会设定一个 “窗口”,这个窗口的大小是由带宽和 RTT(Round-Trip Time,数据在两端的来回时间,也就是响应时间)决定的。计算的公式是带宽(b/s)xRTT(s)。通过这个值就可以得出理论上最优的 TCP 缓冲区的大小。Linux 2.4 已经可以自动地调整发送端的缓冲区的大小,而到 Linux 2.6.7 时接收端也可以自动调整了。

32、TCP如何保证可靠性,并简述一下TCP建立连接和断开连接的过程?

TCP保证可靠性:

(1)序列号、确认应答、超时重传;数据到达接收方,接收方需要发出一个确认应答,表示收到该数据段,并且确认序列号会说明下次接收的数据序列号。如果发送方迟迟未收到确认应答,那么可能是发送数据丢失,也可能是确认应答丢失,这时发送方会等待一定时间后重传。

(2)窗口控制与高速重发控制/快速重传(重复确认应答);TCP利用窗口控制来提高传输速度,意思是在一个窗口大小内,不一定等到应答才能发送下一段数据,窗口大小就是无需等待确认而可以继续发送数据的最大值。

(3)拥塞控制;如果窗口定义的很大,发送端连续发送大量的数据,可能会造成网络的拥堵,甚至网络瘫痪。所以TCP为了防止这种情况而进行了拥塞控制。

TCP建立连接和断开连接过程:三次握手、四次挥手。

33、说一下IP地址的作用,以及MAC地址的作用。

MAC地址是硬件地址,用来定义网络设备的位置,主要由数据链路层负责;IP地址是IP协议提供的一种统一的地址格式,为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

34、常见状态代码、状态描述的详细说明:

  1. 200 OK:客户端请求成功
  2. 206 partial content:服务器正确处理部分GET请求,实现断点续传或者同时分片下载,该请求必须包含range请求头来指示客户端期望得到的范围。(这种情况经常发生在客户端继续请求一个未完成的下载的时候)
  3. 300 multiple choices(可选重定向):被请求的资源有一系列可供选择的反馈信息,由浏览器/用户自行选择一个。
  4. 301 moved permanently(永久重定向):该资源已被永久移动到新的位置,将来任何对该资源的访问都要使用本相应返回的若干个URI之一。
  5. 302 moved temporarily(临时重定向):请求的资源现在临时从不同的URI中选择。
  6. 303 moved temporarily(临时重定向):发送Post请求,收到303,直接重定向为get,发送get请求,不需要向用户确认。
  7. 304 not modified:如果客户端发送了一个带条件的GET 请求且该请求已被允许,而文档/网页的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回304。
  8. 403 Forbidden:服务器收到请求,但是拒绝提供服务。
  9. 404 Not Found:请求资源不存在,比如:输入了错误的URL。
  10. 502:作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
  11. 504:作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(如HTTP)或者辅助服务器(如DNS)收到响应。

35、用户从输入URL到显示页面整个过程。

DNS解析–>TCP连接–>发送HTTTP请求–>服务器处理请求并返回HTTP报文–>浏览器解析渲染页面–>连接结束。

36、请你说一说TCP/IP数据链路层的交互过程。

网络层等到数据链路层用mac地址作为通信目标,数据包到达网络准备往数据链路层发送的时候,首先会去自己的arp缓存表(存ip-mac对应关系)去查找该目标IP的mac地址,如果查到了,就将目标ip的mac地址封装到链路层数据包的包头。如果缓存中没有找到,会发起一个广播(who is ip XXX tell ip XXX),所有收到广播的机器看这个ip是不是自己,如果是自己,就一单播的形式将自己的mac地址回复给请求的机器。

37、请你说说传递到IP层怎么知道报文该给哪个应用程序,它怎么区分UDP报文还是TCP报文?

根据端口区分;看ip头中的协议标识字段,17是udp,6是tcp。

38、网络编程的基本步骤(socket)

TCP:

  • 服务端:socket–>bind–>listen–>accept–>recv/send–>close;
  • 客户端:socket–>connect–>send/recv–>close.

UDP:

  • 服务端:socket–>bind–>recvfrom/sendto–>close;
  • 客户端:socket–>sendto/recvfrom–>close.

39、TCP和UDP的区别和各自适用的场景。

区别:

  1. 连接:TCP是面向连接的传输层协议,即传输数据之前必须先建立好连接;UDP是面向无连接的。
  2. 服务对象:TCP是点对点的两点间服务,即一条TCP连接只能有两个端点;UDP支持一对一,一对多,多对一,多对多的交互通信。
  3. 可靠性:TCP是可靠交付:无差错,不丢失,不重复,按序到达;UDP是尽最大努力交付,不保证可靠交付。
  4. 拥塞控制,流量控制:TCP拥有拥塞控制和流量控制保证数据传输的安全性;UDP没有拥塞控制,网络拥塞不影响源主机的发送效率。
  5. 报文长度:TCP是动态报文长度,即TCP报文长度根据接收方窗口大小和当前网络拥塞情况决定;UDP面向报文,不合并,不拆分,保留上面传下来的报文边界。
  6. 首部开销:TCP首部开销大,首部20个字节;UDP首部开销小,8字节(源端口,目的端口,数据长度,校验和)

TCP:

  • 服务端:socket–>bind–>listen–>accept–>recv/send–>close;
  • 客户端:socket–>connect–>send/recv–>close.

UDP:

  • 服务端:socket–>bind–>recvfrom/sendto–>close;
  • 客户端:socket–>sendto/recvfrom–>close.

39、TCP和UDP的区别和各自适用的场景。

区别:

  1. 连接:TCP是面向连接的传输层协议,即传输数据之前必须先建立好连接;UDP是面向无连接的。
  2. 服务对象:TCP是点对点的两点间服务,即一条TCP连接只能有两个端点;UDP支持一对一,一对多,多对一,多对多的交互通信。
  3. 可靠性:TCP是可靠交付:无差错,不丢失,不重复,按序到达;UDP是尽最大努力交付,不保证可靠交付。
  4. 拥塞控制,流量控制:TCP拥有拥塞控制和流量控制保证数据传输的安全性;UDP没有拥塞控制,网络拥塞不影响源主机的发送效率。
  5. 报文长度:TCP是动态报文长度,即TCP报文长度根据接收方窗口大小和当前网络拥塞情况决定;UDP面向报文,不合并,不拆分,保留上面传下来的报文边界。
  6. 首部开销:TCP首部开销大,首部20个字节;UDP首部开销小,8字节(源端口,目的端口,数据长度,校验和)

适用场景:若通信数据完整性大于实时性,则应选择用TCP协议(文件传输、重要状态等);反之,则使用UDP协议(如视频传输、实时通信等)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_之桐_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值