尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

网络编程面试题

网络编程面试题 网络编程1、OSI 的七层模型都有哪些TCP/IP五层模型?四层?2、TCP/IP是什么TCP/IP是一个协议族而不是单独的协议。包括arp、ip、icmp、tcp、udp、http、ftp等协议3、TCP 和 UDP 协议的区别1、TCP面向连接的; UDP是无连接的即发送数据之前不需要建立连接2、TCP提供可靠的服务, 传送的数据无差错不丢失不重复且按序到达; UDP尽最大努力交付不保证可靠交付3、TCP面向字节流实际上是TCP把数据看成一连串无结构的字节流; UDP是面向报文的, UDP没有拥塞控制因此网络出现拥塞不会使源主机的发送速率降低对实时应用很有用如IP电话实时视频会议等4、每一条TCP连接只能是点到点的; UDP支持一对一一对多多对一和多对多的交互通信5、TCP首部开销20到80字节; UDP的首部开销小只有8个字节6、TCP的逻辑通信信道是全双工的可靠信道UDP则是不可靠信道TCP报文结构UDP报文结构4、TCP三次握手; 两次不行吗TCP/IP详解图解TCP/IP详解seq:(Sequence Number)本报文段数据的第一个字节的序号ack:(Acknowledgment Number)确认号——期望收到对方下个报文段的第一个数据字节的序号SYN(synchronize)请求同步标志——用于建立连接当SYN1时表示建立连接。ACK(acknowledge)确认标志——仅当 ACK1时确认号字段才有效。建立 TCP 连接后所有报文段都必须把 ACK 字段置为 1。FIN(Finally)结束标志——用于释放连接当 FIN1表明发送方已经发送完毕要求释放TCP连接。三次握手流程第一次握手客户端向服务器端发送连接请求SYN包 (SYN1, seqx)并进入SYN_SENT状态, 等待服务器回应第二次握手服务器端收到请求包后将客户端的请求包 SYN1seqx放入到自己的未连接队列此时服务器需要发送两个包(SYN包和ACK包)给客户端(SYN1, ACK1, seqy, ackx1), 此时服务器进入SYN_RECV状态。第三次握手客户端收到服务器的包后知道服务器同意建立连接向服务器发送连接建立的确认ACK包 (ACK1, seqx1, acky1)告诉服务器已经收到你的确认信息了我们可以正式连接, 进行数据通信了。服务器收到后此时服务器与客户端进入ESTABLISHED状态开始进行数据传送。为什么要三次握手握手的过程实际上是在通知对方自己的初始化序号seq(Initial Sequence Number)简称ISN也就是上图中的x和y。x和y会被当作之后传输数据的一个依据以保证TCP报文在传输过程中不会混乱。解决两个问题1、避免连接请求的数据包丢失假设连接途中客户端网络不稳定出现丢包服务端根据seqx来确定客户端请求到第几个包。然后告诉客户端你从第seqx个包开始发送给我之前的不用发送了我这里有记录了。2、数据传输过程因为网络并发量很大在某结点被阻塞传输过程因为网络并发量很大在某结点被阻塞了Server端将先后收到2次请求并持续等待两个Client请求向他发送数据但是Client端实际上只有一次请求而Server端却有2个响应极端的情况可能由于Client端多次重新发送请求数据而导致Server端最后建立了N多个响应在等待因而造成极大的资源浪费三次握手的seq与ack确定了包的顺序。客户端每次请求时询问服务端说这是第一号包服务端收到后告诉客户端下次你给我的只能是二号包别的都不要同时给返回到客户端的包作标记这是我返回给你的一号包。这样出现阻塞时根据包的序号就知道要响应的是几号包。如果没有第三次握手, 服务端会认为客户端没有收到服务端返回的确认包, 所以会重试发送第二次握手的包, 重试次数会不断增加造成资源浪费。5、TCP四次挥手四次挥手流程第一次挥手客户端向服务器端发送一个断开请求FIN包(结束标志FIN1, sequ)并进入FIN-WAIT-1状态。第二次挥手服务器收到FIN包后先向客户端发送确认ACK包 (确认标志ACK1, seqv, acku1)向客户端表明已知道了其断开请求, 服务器进入CLOSE-WAIT状态, 但是不会立即断开, 而是继续传送剩下的数据。客户端收到服务器的确认包后, 进入FIN-WAIT-2状态, 并继续接收服务器传送的数据。第三次挥手服务器将剩下的数据传送完毕后, 向客户端发送断开请求FIN包和确认ACK包(FIN1, ACK1, seqw, acku1), 并进入LAST-ACK状态。第四次挥手客户端收到服务器的FIN包后知道服务器已经做好断开连接的准备了向服务器发送断开确认ACK包 (ACK1, sequ1, ackw1)进入TIME-WAIT状态, 等待2MSL时间后进入CLOSED状态。服务器收到客户端的断开确认ACK包后, 直接进入CLOSED状态。为什么要四次挥手tcp关闭连接需要四次挥手原因TCP连接是全双工通道需要双向关闭。client向server发送关闭请求表示client不再发送数据server响应。此时server端仍然可以向client发送数据待server端发送数据结束后就向client发送关闭请求然后client确认。6、如果一个客户端和服务器建立了TCP连接三次握手之后之后他就宕机了服务器会知道吗?对于通信双方出现的宕机对端是无法感知的。只能采取保活措施进行规避1、采用tcp固有机制keepalive2、应用层自定义保活包。7、TCP 粘包/拆包的原因及解决方法TCP是以流的方式来处理数据一个完整的包可能会被TCP拆分成多个包进行发送也可能把小的封装成一个大的数据包发送。TCP粘包/拆包的原因应用程序写入的字节大于套接字发送缓冲区的大小会发生拆包现象应用程序写入数据小于套接字缓冲区大小网卡将应用多次写入的数据发送到网络上这将会发生粘包现象进行MSS大小的TCP分段当TCP报文长度-TCP头部长度MSS的时候将发生拆包以太网帧的payload净荷大于MTU1500字节进行ip分片。解决方法消息定长FixedLengthFrameDecoder类包尾增加特殊字符分割行分隔符类LineBasedFrameDecoder或自定义分隔符类 DelimiterBasedFrameDecoder将消息分为消息头和消息体LengthFieldBasedFrameDecoder类。分为有头部的拆包与粘包、长度字段在前且有头部的拆包与粘包、多扩展头部的拆包与粘包。8、滑动窗口滑动窗口概念不仅存在于数据链路层也存在于传输层两者有不同的协议但基本原理是相近的。其中一个重要区别是一个是针对于帧的传送另一个是字节数据的传送。滑动窗口协议Sliding Window Protocol该协议是 TCP协议 的一种应用用于网络数据传输时的流量控制以避免拥塞的发生。该协议允许发送方在停止并等待确认前发送多个数据分组。由于发送方不必每发一个分组就停下来等待确认。因此该协议可以加速数据的传输提高网络吞吐量。滑动窗口引入IP层协议属于不可靠的协议IP层并不关心数据是否发送到了对端TCP通过确认机制来保证数据传输的可靠性在比较早的时候使用的是send--wait--send的模式其实这种模式叫做stop-wait模式发送数据方在发送数据之后会启动定时器但是如果数据或者ACK丢失那么定时器到期之后收不到ACK就认为发送出现状况要进行重传。这样就会降低了通信的效率如下图所示这种方式被称为 positive acknowledgment with retransmission (PAR)滑动窗口可以假设一下来优化一下PAR效率低的缺点比如我让发送的每一个包都有一个id接收端必须对每一个包进行确认这样设备A一次多发送几个片段而不必等候ACK同时接收端也要告知它能够收多少这样发送端发起来也有个限制当然还需要保证顺序性不要乱序对于乱序的状况我们可以允许等待一定情况下的乱序比如说先缓存提前到的数据然后去等待需要的数据如果一定时间没来就DROP掉来保证顺序性在TCP/IP协议栈中滑动窗口的引入可以解决此问题先来看从概念上数据分为哪些类Sent and Acknowledged这些数据表示已经发送成功并已经被确认的数据比如图中的前31个bytes这些数据其实的位置是在窗口之外了因为窗口内顺序最低的被确认之后要移除窗口实际上是窗口进行合拢同时打开接收新的带发送的数据Send But Not Yet Acknowledged这部分数据称为发送但没有被确认数据被发送出去没有收到接收端的ACK认为并没有完成发送这个属于窗口内的数据。Not SentRecipient Ready to Receive这部分是尽快发送的数据这部分数据已经被加载到缓存中也就是窗口中了等待发送其实这个窗口是完全由接收方告知的接收方告知还是能够接受这些包所以发送方需要尽快的发送这些包Not SentRecipient Not Ready to Receive 这些数据属于未发送同时接收端也不允许发送的因为这些数据已经超出了发送端所接收的范围对于接收端也是有一个接收窗口的类似发送端接收端的数据有3个分类因为接收端并不需要等待ACK所以它没有类似的接收并确认了的分类情况如下Received and ACK Not Send to Process这部分数据属于接收了数据但是还没有被上层的应用程序接收也是被缓存在窗口内Received Not ACK: 已经接收并但是还没有回复ACK这些包可能属于Delay ACK的范畴了Not Received有空位还没有被接收的数据。发送窗口 和 可用窗口对于发送方来讲窗口内的包括两部分就是发送窗口已经发送了但是没有收到ACK可用窗口接收端允许发送但是没有发送的那部分称为可用窗口。Send Window 20个bytes 这部分值是有接收方在三次握手的时候进行通告的同时在接收过程中也不断的通告可以发送的窗口大小来进行适应Window Already Sent: 已经发送的数据但是并没有收到ACK。滑动窗口原理TCP并不是每一个报文段都会回复ACK的可能会对两个报文段发送一个ACK也可能会对多个报文段发送1个ACK【累计ACK】比如说发送方有1/2/3 三个报文段先发送了2,3 两个报文段但是接收方期望收到1报文段这个时候2,3报文段就只能放在缓存中等待报文1的空洞被填上如果报文1一直不来报文2/3也将被丢弃如果报文1来了那么会发送一个ACK对这3个报文进行一次确认。举一个例子来说明一下滑动窗口的原理假设32~45 这些数据是上层Application发送给TCP的TCP将其分成四个Segment来发往internetseg1(32 ~ 34), seg2(35 ~ 36), seg3(37~ 41), seg4(42 ~ 45)这四个片段依次发送出去此时假设接收端之接收到了seg1 seg2 seg4此时接收端的行为是回复一个ACK包说明已经接收到了32~36的数据并将seg4进行缓存保证顺序产生一个保存seg3 的hole发送端收到ACK之后就会将32~36的数据包从发送并没有确认切到发送已经确认提出窗口这个时候窗口向右移动假设接收端通告的Window Size仍然不变此时窗口右移产生一些新的空位这些是接收端允许发送的范畴对于丢失的seg3如果超过一定时间TCP就会重新传送重传机制重传成功会seg3 seg4一块被确认不成功seg4也将被丢弃就是不断重复着上述的过程随着窗口不断滑动将整个数据流发送到接收端实际上接收端的Window Size通告也是会变化的接收端根据这个值来确定何时及发送多少数据从对数据流进行流控。原理图如下图所示滑动窗口动态调整主要是根据接收端的接收情况动态去调整Window Size然后来控制发送端的数据流量客户端不断快速发送数据服务器接收相对较慢看下实验的结果a. 包175发送ACK携带WIN 384告知客户端现在只能接收384个字节b. 包176客户端果真只发送了384个字节Wireshark也比较智能也宣告TCP Window Fullc. 包177服务器回复一个ACK并通告窗口为0说明接收方已经收到所有数据并保存到缓冲区但是这个时候应用程序并没有接收这些数据导致缓冲区没有更多的空间故通告窗口为0, 这也就是所谓的零窗口零窗口期间发送方停止发送数据d. 客户端察觉到窗口为0则不再发送数据给接收方e. 包178接收方发送一个窗口通告告知发送方已经有接收数据的能力了可以发送数据包了f. 包179收到窗口通告之后就发送缓冲区内的数据了.总结一点就是接收端可以根据自己的状况通告窗口大小从而控制发送端的接收进行流量控制9、介绍各种网络协议。网络协议与标准是基于OSI七层模型每一层都有其对应的协议。下面挑几个熟悉的协议标准一TCP/IPTCP/IP是分层协议如层次图所示从底层到应用层分别是物理层链路层网络层传输层应用层。数据是层层封装封装的方式一般都是在原有数据的前面加一个数据控制头数据封装格式如数据封装图所示。二HTTP协议从上面两个图可以看到HTTP(hypertexttransfer protocol 超文本传输协议)是基于TCP协议可靠传输的应用层协议。简单理解HTTP是一种请求响应式协议一个客户机和服务器建立连接后发送一个请求给服务器服务器接到请求后给予相应的响应信息。HTTP是一种无状态协议即不保存状态每当有新的请求发送时就会产生对应的新响应协议本身并不保留之前的一切请求或响应报文的信息这样可以更快的处理大量事物确保协议的可伸缩性但同时也带来一些不便比如用户登录到一家购物网站如果他跳转到该网站其他页面也是希望能继续保持登录状态为了实现期望的保持状态功能于是引入Cookie技术Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息通知客户端保存Cookie当客户端下次再往服务器端发送请求时客户端会自动在请求报文中加入Cookie值后发送出去。服务器端发现客户端发送过来的Cookie后会去检和比对服务器上的记录最后得到之前的状态信息。HTTP使用明文本身不具备加密的功能同时它所基于的TCP/IP网也是很容易被窃听的网络所以即使传输的报文经过加密也只是在破解上增加障碍而已。HTTP协议没有加密机制后来人们引入SSLsecure socketlayer ,安全套接层和TLSTransport layer security安全传输层协议结合使用的手段也就是现在常说的HTTPS简而言之HTTPS就是身披SSL协议的HTTP了。在HTTP协议通信时本身是不存在确认通信方的步骤也就是说任何人都可以发起请求服务器不管对方是谁都会响应。所以会出现一些常见的隐患无法确定请求发送至目标的Web服务器是否是按真实意图返回响应的那台服务器。即我发送给A服务器的请求被一台伪装成A的服务器给接收了。无法确定响应返回到的客户端是否是按真实意图接收响应的那个客户端。即服务器想发送给我的东西被一个伪装成我的人给拿走了。无法确定正在通信的对方是否具备访问权限。因为某些Web服务器上保存着重要的信息只想发给特定用户通信的权限。无法判定请求是来自何方出自谁手。即使是无意义的请求也会照单全收无法阻止海量请求下的DoS攻击。所以在HTTP上引入SSL后SSL不仅提供加密处理而且用了一种被称为证书的手段可用户确定方可以减少信息泄露的危险性。 另外由于HTTP协议无法证明报文的完整性因此在请求或响应传输中即使内容遭到篡改也无从得知。比如有可能你从服务器请求一张正常的图片结果在传输过程中被人改成了一张限制级的图片结果你就被查水表了。三Telnet协议Telnet协议是TCP/IP协议族是Internet远程登录服务标准协议应用这个协议能够把本地用户所使用的计算机变成远程主机系统的一个终端。具体说来它实现三种基本服务。其一Telnet定义一个网咯虚拟终端为远的系统提供一个标准接口。客户机只需构造使用标准接口的程序即可。其二Telnet包括一个允许客户机和服务器协商选项的机制而且还提供一组标准选项。其三Telnet对称处理连接的两端。四FTP协议FTP是网络共享文件的传输协议目标是提高文件的共享性和可靠地传输数据。相比HTTP协议FTP协议要相对复杂她的命令和数据会分开传送。在传输文件时FTP 客户端程序先与服务器建立连接然后向服务器发送命令。服务器收到命令后给予响应并执行命令。FTP 协议与操作系统无关任何操作系统上的程序只要符合 FTP 协议就可以相互传输数据。FTP使用 2 个端口一个数据端口和一个命令端口也叫做控制端口。这两个端口一般是21命令端口和 20 数据端口。控制 Socket 用来传送命令数据 Socket 是用于传送数据。每一个 FTP 命令发送之后FTP 服务器都会返回一个字符串其中包括一个响应代码和一些说明信息。其中的返回码主要是用于判断命令是否被成功执行了。有主动模式和被动模式两种。主动模式 (PORT)客户端随机打开一个大于 1024 的端口向服务器的命令端口 P即 21 端口发起连接同时开放N 1 端口监听并向服务器发出“port N1” 命令由服务器从它自己的数据端口 (20) 主动连接到客户端指定的数据端口 (N1)。FTP 的客户端只是告诉服务器自己的端口号让服务器来连接客户端指定的端口。对于客户端的防火墙来说这是从外部到内部的连接可能会被阻塞。被动模式 (PASV)为了解决服务器发起到客户的连接问题有了另一种 FTP 连接方式即被动方式。命令连接和数据连接都由客户端发起这样就解决了从服务器到客户端的数据端口的连接被防火墙过滤的问题。被动模式下当开启一个 FTP 连接时客户端打开两个任意的本地端口 (N 1024 和 N1) 。第一个端口连接服务器的21 端口提交 PASV 命令。然后服务器会开启一个任意的端口 (P 1024 )返回如“227 entering passive mode (127,0,0,1,4,18)”。 它返回了 227 开头的信息在括号中有以逗号隔开的六个数字前四个指服务器的地址最后两个将倒数第二个乘 256 再加上最后一个数字这就是FTP 服务器开放的用来进行数据传输的端口。如得到 227 entering passive mode (h1,h2,h3,h4,p1,p2)那么端口号是 p1*256p2ip 地址为h1.h2.h3.h4。这意味着在服务器上有一个端口被开放。客户端收到命令取得端口号之后, 会通过 N1 号端口连接服务器的端口 P然后在两个端口之间进行数据传输。10、DNS域名解析从客户端到本地DNS服务器是属于递归查询而DNS服务器之间就是的交互查询就是迭代查询。浏览器缓存: 浏览器先检查浏览器缓存中有没有被解析过的这个域名对应的ip地址如果有解析结束。同时域名被缓存的时间也可通过TTL属性来设置。系统缓存: 如果浏览器缓存中没有专业点叫还没命中浏览器会检查操作系统缓存中有没有对应的已解析过的结果。而操作系统也有一个域名解析的过程。在windows中可通过c盘里一个叫hosts 文件来设置如果你在这里指定了一个域名对应的ip地址那浏览器会首先使用这个ip地址。但是这种操作系统级别的域名解析规程也被很多黑客利用通过修改你的hosts文件里的内容把特定的域名解析到他指定的ip地址上造成所谓的域名劫持。所以在windows7中将hosts文件设置成了readonly防止被恶意篡改。如果hosts文件还没有命中域名才会真正的请求本地域名服务器Local DNS来解析这个域名这台服务器一般在你的城市的某个角落距离你不会很远并且这台服务器的性能都很好一般都会缓存域名解析结果大约80%的域名解析到这里就完成了。如果本地DNS服务器本地区域文件与缓存没有命中则根据本地DNS服务器的设置是否设置转发器进行查询如果未用转发模式1.本地DNS就把请求发至13个根DNS根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理并会返回一个负责该顶级域名服务器的一个IP地址gTLD Server国际顶级域名服务器如.com .cn .org等。本地DNS服务器收到IP信息后再发送请求给上一步返回的gTLD。这台负责.com域的服务器收到请求后如果自己无法解析它就会找一个管理.com域的下一级DNS服务器地址(http://qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后就会找http://qq.com域服务器重复上面的动作进行查询直至找到www.qq.com主机。如果用的是转发模式此本地DNS服务器就会把请求转发至上一级DNS服务器由上一级服务器进行解析上一级服务器如果不能解析或找根DNS或把转请求转至上上级以此循环。不管是本地DNS服务器用是是转发还是根提示最后都是把结果返回给本地DNS服务器由此DNS服务器再返回给客户机。本地DNS缓存这个域名和对应的ip本地DNS把解析的结果返回给用户用户根据TTL值缓存到本地系统缓存中域名解析过程至此结束其中顶级域名分为国家顶级域名、通用顶级域名、反向域名。国家顶级域名中国:cn 美国:us英国uk…通用顶级域名com 公司企业 edu教育机构 gov政府部门 int国际组织 mil军事部门 net网络 org非盈利组织…反向域名只有一个arpa用于PTR查询IP地址转换为域名 。DNS 查询的顺序1.是否是本机2.是否是缓存3. HOSTS文件查询4. DNS服务器查询11、DNS在网络层用哪个协议为什么?域名解析是将域名映射为IP地址的过程。DNS是应用层协议client端一般指浏览器构建DNS查询请求依次被传输层网络层数据链路层等封装传送到达DNS服务器端最终client端接收到DNS响应消息DNS 在传输层主要基于UDP协议一次UDP名字服务器交换可以短到两个包一个查询包、一个响应包。一次TCP交换则至少包含9个包三次握手初始化TCP会话、一个查询包、一个响应包以及四次分手的包交换。考虑到效率原因TCP连接的开销大得故采用UDP作为DNS的运输层协议这也将导致只有13个根域名服务器的结果。DNS 在网络层基于IP/IPv6协议12、介绍HTTPS协议详述SSL建立连接过程。HTTPS是在HTTP的基础上和ssl/tls证书结合起来的一种协议,保证了传输过程中的安全性,减少了被恶意劫持的可能.很好的解决了解决了http的三个缺点被监听、被篡改、被伪装在使用HTTPS是需要保证服务端配置正确了对应的安全证书客户端发送请求到服务端服务端返回公钥和证书到客户端客户端接收后会验证证书的安全性,如果通过则会随机生成一个随机数,用公钥对其加密,发送到服务端服务端接受到这个加密后的随机数后会用私钥对其解密得到真正的随机数,随后用这个随机数当做私钥对需要发送的数据进行对称加密客户端在接收到加密后的数据使用私钥(即生成的随机值)对数据进行解密并且解析数据呈现结果给客户SSL加密建立对称加密和非对称加密对称加密: 即加密的密钥和解密的密钥相同,非对称加密: 非对称加密将密钥分为公钥和私钥,公钥可以公开,私钥需要保密,客户端公钥加密的数据,服务端可以通过私钥来解密13、http请求从输入url开始都经过什么过程浏览器地址栏输入url浏览器会先查看浏览器缓存–系统缓存–路由缓存如有存在缓存就直接显示。如果没有接着第三步域名解析DNS获取相应的 ip (详见第10题: DNS域名解析)浏览器向服务器发起tcp连接与浏览器建立tcp三次握手握手成功浏览器向服务器发送http请求请求数据包服务器请求数据将数据返回到浏览器浏览器接收响应读取页面内容解析html源码生成DOm树解析css样式、浏览器渲染js交互请求页面中需要的js脚本和图片或者样式表14、http 协议的理解1.超文本的传输协议是用于从万维网服务器超文本传输到本地资源的传输协议2.基于TCP/IP通信协议来传递数据HTML图片资源3.基于运用层的面向对象的协议由于其简洁、快速的方法、适用于分布式超媒体信息系统4.http请求信息request请求行request line、请求头部header,空行和请求数据四部分构成请求行用来说明请求类型,要访问的资源以及所使用的HTTP版本.请求头部用来说明服务器要使用的附加信息空行请求头部后面的空行是必须的请求数据也叫主体可以添加任意的其他数据。5.http响应信息Response: 状态行、消息报头、空行和响应正文状态行由HTTP协议版本号 状态码 状态消息 三部分组成消息报头用来说明客户端要使用的一些附加信息空行消息报头后面的空行是必须的响应正文服务器返回给客户端的文本信息。15、http拥塞控制TCP的拥塞控制拥塞即对资源的需求超过了可用的资源。若网络中许多资源同时供应不足网络的性能就要明显变坏整个网络的吞吐量随之负荷的增大而下降。拥塞控制防止过多的数据注入到网络中这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程涉及到所有的主机、路由器以及与降低网络传输性能有关的所有因素。流量控制指点对点通信量的控制是端到端正的问题。流量控制所要做的就是抑制发送端发送数据的速率以便使接收端来得及接收。拥塞控制代价需要获得网络内部流量分布的信息。在实施拥塞控制之前还需要在结点之间交换信息和各种命令以便选择控制的策略和实施控制。这样就产生了额外的开销。拥塞控制还需要将一些资源分配给各个用户单独使用使得网络资源不能更好地实现共享。几种拥塞控制方法慢开始( slow-start )、拥塞避免( congestion avoidance )、快重传( fast retransmit )和快恢复( fast recovery )。慢开始 和 拥塞避免发送方维持一个拥塞窗口 cwnd ( congestion window )的状态变量。拥塞窗口的大小取决于网络的拥塞程度并且动态地在变化。发送方让自己的发送窗口等于拥塞。发送方控制拥塞窗口的原则是只要网络没有出现拥塞拥塞窗口就再增大一些以便把更多的分组发送出去。但只要网络出现拥塞拥塞窗口就减小一些以减少注入到网络中的分组数。慢开始算法当主机开始发送数据时如果立即所大量数据字节注入到网络那么就有可能引起网络拥塞因为现在并不清楚网络的负荷情况。因此较好的方法是 先探测一下即由小到大逐渐增大发送窗口也就是说由小到大逐渐增大拥塞窗口数值。通常在刚刚开始发送报文段时先把拥塞窗口 cwnd 设置为一个最大报文段MSS的数值。而在每收到一个对新的报文段的确认后把拥塞窗口增加至多一个MSS的数值。用这样的方法逐步增大发送方的拥塞窗口 cwnd 可以使分组注入到网络的速率更加合理。拥塞避免算法让拥塞窗口cwnd缓慢地增大即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1而不是加倍。这样拥塞窗口cwnd按线性规律缓慢增长比慢开始算法的拥塞窗口增长速率缓慢得多。无论在慢开始阶段还是在拥塞避免阶段只要发送方判断网络出现拥塞其根据就是没有收到确认就要把慢开始门限ssthresh设置为出现拥塞时的发送 方窗口值的一半但不能小于2。然后把拥塞窗口cwnd重新设置为1执行慢开始算法。这样做的目的就是要迅速减少主机发送到网络中的分组数使得发生 拥塞的路由器有足够时间把队列中积压的分组处理完毕。16、http 和 https 的区别https是以安全为目标的HTTP通道简单讲是HTTP的安全版本通过SSL加密http超文本传输协议。是一个客服端和服务器端请求和应答的标准tcp,使浏览器更加高效使网络传输减少17、http和https tls处于哪一层7层中的哪一层http和https 是应用层SSLSecure Socket Layer安全套接层以及其继承者TLSTransport Layer Security 传输层安全是为了网络通信安全 提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。18、发消息时 网络传输过程中只说应用层信息怎么保证不被窃取一般采用双向证书SSL通信19、介绍一下SSL / TLS20、密钥泄漏怎么办预防私钥泄密最好的方法从来都是把密钥保存在线下将您的私钥存储在外部硬件令牌上, 不给他人任何机会获取。
返回列表