(秋招/春招)软件开发/软件测试面试题——计算机网络部分

计算机网络参考书籍:《TCP/IP网络知识轻松入门》、《图解HTTP》、《图解TCP/IP》

1. 网络协议为什么要分层?

按照网络分层,各层可以独立展开工作,明确定义每层协议的作用和责任以后,针对每层具体的协议进行编程更加有利于该协议的实现,也有利于后续对这些协议进行扩展和性能上的优化。

2. TCP/IP模型各层作用、协议及网络设备

(1)应用层

决定了服务器向客户端提供应用服务时通信的活动,让通信更符合应用程序。

     支持WWW服务的协议:HTTP
     负责把邮件转发到邮件服务器的协议:SMTP(Simple Mail Transfer Protocal)
     从邮件服务器上接收发给自己的电子邮件时的协议:POP(Post Office Protocal)
     文件传输协议:FTP(File Transfer Protocol)
     域名系统:DNS(Domain Name System)
     4-7层交换机/网关:负责传输层以上的数据转发及其协议的转换。

(2)传输层

传输层是应用层与网络层之间的桥梁,它提供网络连接中的两台计算机之间的数据传输,确保发出的数据能够切实到达收件人的应用程序处。

 安全可靠地传输协议:TCP(Transmission Control Protocol) 
 迅速传输的协议:UDP(User Datagram Protocol)

(3)网络层

网络层用来处理在网络上流动的数据包,实现终端节点之间的通信,规定了通过怎样的路径到达对方的计算机,并将数据包传输给对方。它不关心送达的数据是否损坏或者收件人是否收到。

  协议:IP、DNS、ARP、ICMP
  路由器/3层交换机:判断网络路径,转发至目标地址。
  备注:数据链路层的主要作用是在互联网同一数据链路的节点之间进行包传递。网络层可以跨越不同的数据链路,即使在不同的数据链路上也能显现两端节点之间的数据包传输。IP的主要作用是在复杂的网络环境中将数据包发送给最终的目标地址。

(4)数据链路层

确保能够在直接连接于网络上的设备之间的传递。将二进制数列分割成多个帧传递给网络层,或者将帧转换为二进制数列后传递给物理层。

协议:Ethernet,FDDI,ATM,PPP,PPPoE
网桥/2层交换机:识别数据链路层的数据帧,重构数据帧转发。丢弃错误的数据帧。

(5)物理层

对通信媒体做出规定的层。也执行将二进制数列转换为高低不同的电压以及闪烁的光,或者将电压的高低及光的闪烁转换为二进制数列的工作。转换方法因通信媒体不同而不同,所以没有特定的协议。

中继器:识别0/1序列调整波形进行相应的放大和转发。可以在双绞线电缆与光纤之间转换。

3. 计算机网络七层模型(OSI参考模型)

(1)应用层

处理通信服务持有架构的层。有文件转发、电子邮件以及远程登录(虚拟终端)等协议。

(2)表示层

改变数据的格式,在用户和计算机之间发挥桥梁作用。将想要发送的数据转变为适合通信的形态,将收到的数据转变为用户可以看懂的状态。

(3)会话层

负责建立或切断链接、设置所转发数据的分割线等,是管理数据转发的层。

(4)传输层

负责将数据安全送至收件人应用程序处的层。没有路由器等中继节点概念,提供发件人与收件人一对一通信功能。

(5)网络层

地址管理和路由选择。

(6)数据链路层

与直接连接的设备进行通信的层。将二进制数列分割成多个帧传递给网络层,或者将帧转换为二进制数列后传递给物理层。

(7)物理层

对通信媒体做出规定的层。也执行将二进制数列转换为高低不同的电压以及闪烁的光,或者将电压的高低及光的闪烁转换为二进制数列的工作。

4. 什么是http协议?

Http协议是对客户端和服务器端之间数据传输格式的规范,格式简称为“超文本传输协议”。

5. http里面的请求方式及区别。

(1)GET:请求访问已被URI识别的资源。

(2)POST:传输实体的主体(告诉服务器信息)。

(3)PUT:传输文件。要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。

(4)HEAD:获得报文首部。HEAD方法和GET方法一样,只是不返回报文主体部分。用于确认资源的有效性及资源更新的日期等。

(5)DELETE:删除文件。与PUT相反的方法,DELETE方法按请求URI删除指定的资源。

(6)OPTIONS:用来查询针对请求URI指定的资源支持的方法。

(7)TRACE:追踪路径。让web服务器将之前的请求通信返回给客户端的方法。

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

6. GET与POST请求区别

(1)get重点在从服务器上获取资源,post重点在向服务器发送数据。

(2)get传输数据是通过url请求,以filed(字段)= value的形式,置于url后,并用“?”连接,多个请求数据间用“&”连接,如http://127.0.0.1/Test/login.action?name=admin&password=admin,这个过程用户是可见的。POST传输数据是通过HTTP的pot机制,将字段与对应值封存在请求是体重发送给服务器,这个过程对用户是不可见的。

(3)GET传输的数据小,因为受到URL长度限制,但效率较高。POST可以传输大量数据,所以上传文件时只能用POST方式。

(4)GET是不安全的,因为URL是可见的,可能会泄漏私密信息,如密码等
POST较GET安全性较高。

(5)GET方法只能支持ASCII字符,向服务器传的中文字符可能会乱码。POST支持标准字符集,可以正确传递中文字符。

7.http持久连接

HTTP协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接。可是当发送请求一份包含多张图片的HTML文档对应的Web页面,会产生大量的通信开销。为解决上述TCP连接的问题,HTTP/1.1和一部分的HTTP/1.0想出了持久连接(HTTP Persistent Connections)的方法。持久连接的特点是,只要任意一端没有提出断开连接,则保持TCP连接状态。

持久连接的好处在于减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。另外减少开销的那部分时间,使HTTP请求和响应都能更早的结束,这样web界面显示速度也提高了。

8.HTTP/1.1与HTTP/1.0不同

在HTTP/1.1中,所有的连接默认都是持久连接。

但在HTTP/1.0中,每进行一次HTTP通信就要断开一次TCP连接。

9.什么是http协议无状态(stateless)协议?怎样解决无状态协议?

无状态协议是指自Http协议自身不对请求与响应之间的通信状态进行保存,也就是说在http这个级别,协议对于发送过的请求或响应都不做持久化处理。这是为了能快速地处理大量的事务,确保协议的可伸缩性,而特意把HTTP协议涉及的这么简单。

为了实现期望保存状态的功能,可以通过Cookie技术和Session会话保存。

10. Cookie和Session技术

Cookie和Session都是用来跟踪浏览器用户身份的会话方式。

Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。Cookie会根据从服务器端发送的响应报文中内的一个叫作Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器端发现客户端发送过来的Cookie后,会检查究竟是从哪一个客户端发送来的请求,然后对比服务器上的记录,最后得到之前的状态信息。

Session技术是将数据存储在服务器端的技术,会为每个客户端都创建一块内存空间存储客户的数据,但客户端需要每次都携带一个标识去服务器中寻找属于自己的内存空间。所以说Session的实现是基于Cookie,Session需要借助Cookie存储客户的唯一性标识。

11.Cookie和Session的区别

(1)Cookie数据是存放在客户的浏览器上,Session数据放在服务器上。

(2)Cookie不是很安全,别人可以分析存放在本地的Cookie并进行Cookie欺骗,考虑到安全应当使用Session。

(3)Session会在一定时间内保存在服务器上,当访问增多,会比较占用服务器性能,考虑减轻服务器性能方面,应当使用Cookie。

(4)单个Cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个Cookie。

(5)可以考虑将登陆信息等重要信息存放为Session,其他信息如果需要保留,可以放在Cookie中。

12.http协议由什么组成?

一、请求报文

请求行:包括请求方法、请求URI和HTTP版本

各种首部字段:请求首部字段、通用首部字段、实体首部字段

空行

报文主体

二、响应报文

状态行:包括响应结果的状态码,原因短语和HTTP版本

各种首部字段:响应首部字段、通用首部字段、实体首部字段

空行

报文主体

13.HTTP响应状态码的类别

类别 原因短语

1XX Informational(信息性状态码) 接收的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 需要进行附加的操作以完成请求
4XX Client Error(客户端错误状态码) 服务器无法处理请求
5XX Server Error(服务器错误状态码) 服务器请求出错

14.HTTP响应状态码

(1)2XX 成功

200 OK:表示从客户端发来的请求在服务器端被正常处理了。

204 No Content:代表服务器接收的请求已经成功处理,但返回的响应报文中不含实体的主体部分。

206 Partial Content:表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求。

(2)3XX 重定向

301 Moved Permanently:永久性重定向。表示请求的资源已经分配了新的URI,以后使用资源应使用现在资源所指的URI。

302 Found:临时性重定向。该状态表示请求的资源已被分配了新的URI,希望用户本次使用新的URI访问。

303 See Other:表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。

304 Not Modified:表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但因发生请求未满足条件的情况后,直接返回304 Not Modified。

307 Temporary Redirection:该状态码与302 Found有着相同的含义。尽管302标准禁止POST变成GET,但实际使用时大家并不遵守。307会遵照浏览器标准,不会从POST变成GET。

(3)4XX 客户端错误

400 Bad Request:该状态码表示请求报文中存在语法错误。

401 Unauthorized:该状态码表示发送的请求需要通过HTTP认证的认证信息。另外若之前已进行过一次请求,则表示用户认证失败。

403 Forbidden:表明对请求资源的访问被服务器拒绝了,服务器没有必要给出拒绝的详细理由。

404 Not Found:表明服务器上无法找到请求的资源。

(4)5XX 服务器错误

500 Internal Server Error:表明服务器端在执行请求时发生了错误。也有可能是Web应用存在的bug或某些临时的故障。

503 Service Unavailable:该状态码表示服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

15.http和https的区别?

https是在http上加入加密处理、认证以及完整性保护的协议。对通信报文进行加密,防止内容被窃听。查明对手的证书,避免遭遇伪装。验证报文的完整性,看请求或响应在传输图中是否被攻击者拦截并篡改。https就是身披ssl(secure socket layer)协议外壳的http。

16.https怎么加密的

HTTPS采用对称密钥加密(共享密钥加密)和非对称密钥加密(公共密钥加密)两者并用的混合加密机制。在交换密钥环节使用非对称密钥加密方式,客户端收到服务器发送的 “公开密钥”以及公钥证书,在验证证书真实有效后,制作可以加密解密的“对称密钥”,再用“对称密钥”为数据加密,用“公开密钥”为“对称密钥”加密。服务器端收到加密后的钥匙和数据,用“私钥”打开加密后的“对称密钥”,用“对称密钥”打开加密后的数据。之后用“对称密钥”加密并交流。这种方式保证了数据的加密通信,并且加快了处理速度,提高了效率。

17.HTTPS和HTTP现在哪个用得多?虽然HTTPS安全但是申请证书开销也大,那为什么HTTPS安全就要用这个?

因为https加密通信与纯文本通信相比会消耗更多的cpu以及内存资源,整体的通信量不可能避免的会增加,能够处理的请求数量必定对随之减少,因此如果是非敏感信息则使用http通信,只有在包含个人信息等敏感数据时,才利用https加密通信。因为使用证书可以证明作为通信一方的服务器是否规范,另外一个作用是可确认对方服务器背后运营的企业是否真实存在。

18.SSL具体原理?既然HTTPS要申请证书,怎么申请的?

SSL是安全套接层,用SSL建立安全通信线路后,就可以在这条线路上进行http通信了。SSL提供加密、认证以及摘要功能。

服务器的运营人员向数字认证机构提出公开密钥的申请,数字认证机构在判明提出申请者的身份之后,会对已经申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公钥证书后绑定在一起。

19.讲一下密码学,哈希算法,DH密钥交换协议

密码学现在是用来保护信息安全的核心技术。现代密码学主要有三个方向:私钥密码(对称密码)、公钥密码(非对称密码)、安全协议。区分对称加密和非对称加密的标准是:加密和解密是否使用相同的密钥,如果使用相同的密钥则是对称加密,如果加密和解密使用的密钥是不同的那么则是非对称加密。

哈希(Hash),一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出通常称作散列值、数字指纹或消息摘要。常见的哈希算法有:MD4、MD5、SHA1、SHA224、SHA256、SHA384、SHA 512。

DH密钥交换协议主要解决的是密钥分发问题,是公钥密码学的开端,它的安全性是基于计算Diffie-Hellman问题的难解性。计算 Diffie-Hellman 的难解性:给定元祖计算困难。这个协议的具体描述为:

Alice选择群G中的秘密元素a,计算,将A发送给Bob;
Bob选择群G中的秘密元素b,计算,将B发送给Alice;
Alice计算双方共享密钥;
Bob计算双方共享密钥。

20.你对web攻击方面了解哪些?

对web应用的攻击模式有以下两种:主动攻击和被动攻击。

主动攻击是指攻击者通过直接访问web应用,把攻击代码传入的攻击模式,该模式是直接针对服务器上的资源进行攻击,代表性的攻击是SQL注入攻击和OS命令注入攻击。

被动攻击是指利用圈套策略执行攻击代码的攻击模式。在被攻击得过程中,攻击者不直接对目标web应用发起攻击。该模式中具有代表性的攻击是跨站脚本攻击(xss)和跨站点请求伪造。
实施web应用的安全对策大致可以分为以下两个部分:客户端的验证和web应用端(服务器端)的验证,其包括输入值验证和输出值转义。

21.介绍一下跨站脚本攻击(XSS),SQL注入攻击,OS命令注入攻击?如何预防

跨站脚本攻击是指通过存在安全漏洞的web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击。它可能造成以下影响:利用虚假输入表单骗取用户个人信息;利用脚本窃取用户的Cookie值,在被害者不知情的情况下,帮助攻击者发送恶意请求;显示伪造的文章或图片。

SQL注入是指针对web应用使用的数据库,通过运行非法的SQL而产生的攻击。它可能会造成非法查看或者篡改数据库内的数据、规避认证、执行和数据库服务器业务关联的程序等。

OS命令注入攻击是指通过Web应用执行非法的操作系统命令达到攻击目的。

【sql注入防护】

过滤关键字

限制mysql关键字以输入的形式注入sql,防止恶意代码对数据库产生破坏。

控制输入字符长度

防止输入以16进制码注入,以长度限制,补充过滤关键字的漏洞。

关闭php错误提示

防止sql输入试探,避免用户试探数据库名称、数据表名称等。

数据库权限控制

控制用户权限,限制用户通过恶意代码注入进行恶意操作。

【xss攻击防护】

对用户的提交内容进行可靠的验证;例如查询关键字、url、http、post 数据等,特别是可以让用户提供 HTML 的地方;

避免 cookie 中泄漏用户的隐私;

尽量采用 post 请求而非 get 请求;

对用户提交信息总的 img 等 link 链接,检查是否有重定向回功能为链接;

对 http refer 进行严格的效验

22.输入网址到显示内容,流程是什么?

(1)在客户端浏览器中输入网址URL;

(2)发送到DNS(域名服务器)获得域名对应的WEB服务器的IP地址;

(3)客户端浏览器与WEB服务器建立TCP(传输控制协议)连接;

(4)客户端浏览器向对应IP地址的WEB服务器发送相应的HTTP或HTTPS请求;

(5)WEB服务器响应请求,返回指定的URL数据或者错误信息;如果设定重定向,则重定向到新的URL地址;

(6)客户端浏览器下载数据,解析HTML源文件,解析的过程中实现对页面的排版,解析完成后,在浏览器中显示基础的页面;

(7)分析页面中的超链接,显示在当前页面,重复以上过程直至没有超链接需要发送,完成页面的全部显示。

23.交换机和路由器的区别

交换机(英文:Switch,意为“开关”)是一种用于电信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路。最常见的交换机是以太网交换机。其他常见的还有电话语音交换机、光纤交换机等。

路由器(Router)是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号的设备。

二者的区别:

(1)交换机工作在第二层,数据链路层;路由器工作在第三层,网络层。

(2)在数据链路层只能识别物理地址,因此当交换机的某个端口收到一个数据帧时,交换机会读取数据帧中相应的目标地址的MAC地址,然后在自己的MAC地址表中查找是否有目标MAC地址的端口信息,如果有,则把数据帧转发到相应的端口;如果没有,则向除源端口外的所有端口进行转发。

(3)当路由器的某个接口收到一个包时,路由器会读取包中相应目标的逻辑地址的网络部分,然后在路由表中进行查找。如果在路由表中找到了目标地址的路由条目,则把包转发到路由器的相应接口;如果在路由表中没有找到目标地址的路由条目,那么,如果路由器配置了默认路由,就根据默认路由的配置转发到路由器的相应接口;如果路由器中没有配置默认路由,则将该包丢弃,并返回不可达信息。

(4)传统的交换机只能分割冲突域,不能分割广播域;而路由器可以分割广播域。

(5)路由器提供了防火墙的服务:路由器仅仅转发特定地址的数据包,不传送不支持路由协议的数据包传送和未知目标网络数据包的传送,从而可以防止广播风暴。

24.常见应用层协议端口号

常用服务 协议 端口号

HTTP 超文本传输协议 TCP 80

HTTPS 安全文本传输协议 TCP 443

POP3从邮件服务器上接收邮件 TCP 110

SMTP 把邮件转发到邮件服务器 TCP 25

FTP文件传输协议(控制) TCP 21

FTP文件传输协议(数据) TCP 20

DNS域名系统 TCP/UDP 53

25.输入网址可以自己带一个端口号吗?

URL中的端口号是可选项,用户省略时则自动使用默认的端口号,因为可以通过应用协议名称判断。

26.TCP首部、IP数据包和以太网包首部

每个包首部至少都包含两个信息:一个发送端和接收端地址,另一个是上一层的协议类型。

TCP首部中包含源端口号和目标端口号(用以识别发送主机跟接收主机上的应用)、序号(用以表示该包中数据是发送端整个数据中第几字节的序列号)以及校验和(用以判断数据是否损坏)。

IP数据包中IP首部后紧跟着TCP首部,然后才是应用的数据首部和数据本身。IP首部中包含接收端IP地址以及发送端IP地址。紧随IP首部的还有用来判断其后面的数据是TCP还是UDP的信息。

以太网包首部中包含接收端MAC地址、发送端MAC地址以及标志以太网类型的以太数据的协议。

27.简述UDP与TCP的区别和应用场景

(1)TCP提供面向连接的、可靠的数据流传输,而UDP提供的是非面向连接的、不可靠的数据流传输。

(2)TCP是动态报文长度,即TCP报文长度是根据接收方的窗口大小和当前网络拥塞情况决定的。UDP面向报文,不合并,不拆分,保留上面传下来报文的边界。

(3)TCP注重数据安全性,UDP数据传输快,因为不需要连接等待,少了许多操作,但是其安全性却一般。

(4)可靠性。TCP是可靠交付:无差错,不丢失,不重复,按序到达。UDP是尽最大努力交付,不保证可靠交付。

(5)服务对象。TCP是点对点的两点间服务,即一条TCP连接只能有两个端点;UDP支持一对一,一对多,多对一,多对多的交互通信。

(6)TCP有拥塞控制和流量控制保证数据传输的安全性。UDP没有拥塞控制,网络拥塞不会影响源主机的发送效率。

(7)TCP首部开销大,首部20个字节。UDP首部开销小,8字节。(源端口,目的端口,数据长度,校验和)。

应用场景:

若通信数据完整性需让位与通信实时性,则应该选用TCP 协议(如文件传输、重要状态的更新等);反之,则使用 UDP 协议(如视频传输、实时通信等)。

UDP:

包总量较小的通信(DNS、SNMP等);

视频、音频等多媒体通信(即时通信);

限定于LAN等特定网络中的应用通信;

广播通信(广播、多播)

TCP对应的协议:

FTP:定义了文件传输协议,使用21端口;

Telnet:一种用于远程登陆的端口,使用23端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务;

SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口;

POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口;

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

UDP对应的协议:

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

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

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

28.HTTP是基于TCP还是基于UDP的?为什么?

大部分是基于TCP。TCP充分实现了数据传输时各种控制功能,可以进行丢包时的重发机制,还可以对次序乱掉的分包进行顺序控制。而这些在UDP中都没用。此外,TCP作为一种面向连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。

29.微信/QQ好友聊天用的TCP还是UDP?

1.登陆过程,客户端采用TCP协议向服务器发送信息,HTTP协议下载信息。登陆之后,会有一TCP连接来保持在线状态。

2.和好友发消息,客户端采用UDP协议,但是需要通过服务器转发。腾讯为了确保传输消息的可靠,采用上层协议来保证可靠传输。如果消息发送失败,客户端会提示消息发送失败,并可重新发送。

3.如果是在内网里面的两个客户端传文件,采用的是P2P技术,不需要服务器中转。

登陆成功之后,QQ都会有一个TCP连接来保持在线状态。QQ采用的通信协议以UDP为主,辅以TCP协议。由于QQ的服务器设计容量是海量级的应用,一台服务器要同时容纳十几万的并发连接,因此服务器端只有采用UDP协议与客户端进行通讯才能保证这种超大规模的服务。QQ客户端之间的消息传送也采用了UDP模式,因为国内的网络环境非常复杂,而且很多用户采用的方式是通过代理服务器共享一条线路上网的方式,在这些复杂的情况下,客户端之间能彼此建立起来TCP连接的概率较小,严重影响传送信息的效率。而UDP包能够穿透大部分的代理服务器,因此QQ选择了UDP作为客户之间的主要通信协议。采用UDP协议,通过服务器中转方式。因此,现在的IP侦探在你仅仅跟对方发送聊天消息的时候是无法获取到IP的。腾讯采用了上层协议来保证可靠传输:如果客户端使用UDP协议发出消息后,服务器收到该包,需要使用UDP协议发回一个应答包。如此来保证消息可以无遗漏传输。之所以会发生在客户端明明看到“消息发送失败”但对方又收到了这个消息的情况,就是因为客户端发出的消息服务器已经收到并转发成功,但客户端由于网络原因没有收到服务器的应答包引起的。登陆采用TCP协议和HTTP协议,你和好友之间发送消息,主要采用UDP协议,内网传文件采用了P2P技术。

30.MAC地址、IP地址和端口号

MAC地址用来识别同一链路中不同的计算机;

IP地址用来识别TCP/IP网络中互连的主机和路由器;

端口号用来识别同一台计算机中进行通信的不同的应用程序。

31.如何用UDP实现可靠传输?

在应用层模仿传输层TCP的可靠性传输。下面不考虑拥塞处理,可靠UDP的简单设计。

(1)添加seq/ack机制,确保数据发送到对端;

(2)添加发送和接收缓冲区,主要是用户超时重传;

(3)添加超时重传机制。

详细说明:送端发送数据时,生成一个随机seq=x,然后每一片按照数据大小分配seq。数据到达接收端后接收端放入缓存,并发送一个ack=x的包,表示对方已经收到了数据。发送端收到了ack包后,删除缓冲区对应的数据。时间到后,定时任务检查是否需要重传数据。

32.TCP怎么保证可靠连接

TCP通过校验和、序列号、确认应答、超时重传、连接管理、窗口控制、流量控制、拥塞控制实现可靠传输。

校验和

计算方式:在数据传输的过程中,将发送的数据段都当作一个16位的整数。将这些整数加起来。并且前面的进位不能丢弃,补在后面,最后取反,得到校验和。

发送方:在发送数据之前计算检验和,并进行校验和的填充。

接收方:收到数据后,对数据以同样的方式进行计算,求出校验和,与发送方的进行比对。

注意:如果接收方比对校验和与发送方不一致,那么数据一定传输有误。但是如果接收方比对校验和与发送方一致,数据不一定传输成功。

序列号与确认应答

序列号:TCP传输时将每个字节的数据都进行了编号,这就是序列号。

确认应答:TCP传输的过程中,每次接收方收到数据后,都会对传输方进行确认应答。也就是发送ACK报文。这个ACK报文当中带有对应的确认序列号,告诉发送方,接收到了哪些数据,下一次的数据从哪里发。

序列号的作用不仅仅是应答的作用,有了序列号能够将接收到的数据根据序列号排序,并且去掉重复序列号的数据。这也是TCP传输可靠性的保证之一。

超时重传

首先,发送方没有介绍到响应的ACK报文原因可能有两点:

(1)数据在传输过程中由于网络原因等直接全体丢包,接收方根本没有接收到。

(2)接收方接收到了响应的数据,但是发送的ACK报文响应却由于网络原因丢包了。
TCP在解决这个问题的时候引入了一个新的机制,叫做超时重传机制。简单理解就是发送方在发送完数据后等待一个时间,时间到达没有接收到ACK报文,那么对刚才发送的数据进行重新发送。如果是刚才第一个原因,接收方收到二次重发的数据后,便进行ACK应答。如果是第二个原因,接收方发现接收的数据已存在(判断存在的根据就是序列号,所以上面说序列号还有去除重复数据的作用),那么直接丢弃,仍旧发送ACK应答。

那么发送方发送完毕后等待的时间是多少呢?如果这个等待的时间过长,那么会影响TCP传输的整体效率,如果等待时间过短,又会导致频繁的发送重复的包。如何权衡?由于TCP传输时保证能够在任何环境下都有一个高性能的通信,因此这个最大超时时间(也就是等待的时间)是动态计算的。

连接管理

三次握手、四次挥手。

窗口控制

TCP中窗口大小是指tcp协议一次传输多少个数据。因为TCP是一个面向连接的可靠的传输协议,既然是可靠的就需要传输的数据进行确认。TCP窗口机制有两种,一种是固定窗口大小,另一种是滑动窗口。数据在传输时,TCP会对所有数据进行编号,发送方在发送过程中始终保持着一个窗口,只有落在发送窗口内的数据帧才允许被发送;同时接收方也始终保持着一个接收窗口,只有落在窗口内的数据才会被接收。这样通过改变发送窗口和接收窗口的大小就可以实现流量控制。

TCP的窗口滑动技术通过动态改变窗口的大小来调节两台主机之间数据传输。每个TCP/IP主机支持全双工数据传输,因此TCP有两个滑动窗口,一个用于接收数据,一个用于发送数据。接收方设备要求窗口大小为0时,表明接收方已经接收了全部数据,或者接收方应用程序没有时间读取数据,要求暂停发送。

流量控制

TCP在传送数据时,第一次接收方窗口大小是由链路带宽决定的,但是接收方在接收到的数据后,返回ack确认报文,同时也告诉了发送方自己的窗口大小,此时发送方第二次发送数据时,会改变自己的窗口大小和接收方一致。当窗口过大时,会导致不必要的数据来拥塞我们的链路,但是窗口太小时,会造成很大的延时,比如为1时,发送方每发送一个数据,接收方就会返回一个ack报文,在发送方未接收到接收方的确认报文ack之前不会进行下一次发送。

拥塞控制

TCP传输的过程中,发送端开始发送数据的时候,如果刚开始就发送大量的数据,那么就可能造成一些问题。网络可能在开始的时候就很拥堵,如果给网络中在扔出大量数据,那么这个拥堵就会加剧。拥堵的加剧就会产生大量的丢包,就对大量的超时重传,严重影响传输。

所以TCP引入了慢启动的机制,在开始发送数据时,先发送少量的数据探路。探清当前的网络状态如何,再决定多大的速度进行传输。这时候就引入一个叫做拥塞窗口的概念。发送刚开始定义拥塞窗口为 1,每次收到ACK应答,拥塞窗口加 1。在发送数据之前,首先将拥塞窗口与接收端反馈的窗口大小比对,取较小的值作为实际发送的窗口。

拥塞窗口的增长是指数级别的。慢启动的机制只是说明在开始的时候发送的少,发送的慢,但是增长的速度是非常快的。为了控制拥塞窗口的增长,不能使拥塞窗口单纯的加倍,设置一个拥塞窗口的阈值,当拥塞窗口大小超过阈值时,不能再按照指数来增长,而是线性的增长。在慢启动开始的时候,慢启动的阈值等于窗口的最大值,一旦造成网络拥塞,发生超时重传时,慢启动的阈值会为原来的一半(这里的原来指的是发生网络拥塞时拥塞窗口的大小),同时拥塞窗口重置为1。

33.TCP报文段

端口号:每个TCP报文段都包含源端口号和目的端口号,用于寻找发送端和接收端的应用程序,这两个值加上IP首部中的源端IP地址和目的端IP地址就可以确定唯一的TCP连接。

序号:用于将失序的数据重新排列,TCP报文段的序号被设置为其数据部分的第一个字节的编号。

确认序号:接收方在接收到数据后,会回复确认报文,其中包含确认序号,作用是告诉发送发自己接收到了哪些数据,下一次数据从哪里开始发,因此,确认序号影视上次已经成功收到数据字节序号加1。只有ACK标志为1时确认序号字段才有效。

首部长度:首部中选项部分的长度是可变的,因此首部的长度也是可变的,所以需要这个字段来明确表示首部的长度。

保留字段:未来可能有具体用途,目前默认值为0。

控制位:

URG:值为1时,紧急指针生效

ACK:值为1时,确认序号生效

PSH:接收方应尽快将这个报文段交给应用层

RST:发送端遇到问题,想要重新连接

SYN:同步序号,用于发起一个连接

FIN:发送端要求关闭连接

窗口大小:TCP的流量控制由连接的每一端通过声明的窗口大小来提供。窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端正期望接收的字节。

检验和:功能类似于数字签名,用于验证数据完整性。

紧急指针:它是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。

34.TCP三次握手,四次挥手?以及常见面试题

TCP三次握手?

第一次握手:建立连接时,客户端向服务器发送报文段1,其中SYN标志位为1,序号字段被设置为初始序号x。发送完报文段1后,并进入SYN_SENT状态,等待服务器确认。

第二次握手:服务器收到客户端的连接请求后,向客户端发送报文段2作为应答,其中ACK标志位设置为1,表示对客户端作出应答,其确认序号字段生效,该字段值为x+1。此外,报文段2的SYN标志位也设置为1,代表这同时也是一个用于发起连接的报文段,序号seq设置为服务器初始序号y。发送完报文段2后,服务器进入SYN_RECV状态。

第三次握手:客户端收到报文段2后,向服务器发送报文段3,其ACK标志位为1,代表对服务器作出应答,确认序列号字段ack为y+1,序号字段为x+1。此报文段发送完毕后,双方进入ESTABLISHED状态,表示连接已建立。

TCP建立连接为什么要三次握手而不是两次?

(1)防止已过期的连接请求报文突然又传送到服务器,因而产生错误。

在双方两次握手即可建立连接的情况下,假设客户端发送A报文段请求建立连接,由于网络原因造成A暂时无法到达服务器,服务器接收不到请求报文段就不会返回确认报文段,客户端在长时间得不到应答的情况下重新发送请求报文段B,这次B顺利到达服务器,服务器随即返回确认报文并进入 ESTABLISHED状态,客户端在收到确认报文后也进入 ESTABLISHED状态,双方建立连接并传输数据,之后正常断开连接。此时姗姗来迟的A报文段才到达服务器,服务器随即返回确认报文并进入 ESTABLISHED状态,但是已经进入 CLOSED状态的客户端无法再接受确认报文段,更无法进入ESTABLISHED状态,这将导致服务器长时间单方面等待,造成资源浪费。

(2)三次握手才能让双方均确认自己和对方的发送和接收能力都正常

第一次握手:客户端只是发送处请求报文段,什么都无法确认,而服务器可以确认自己的接收能力和对方的发送能力正常;第二次握手:客户端可以确认自己发送能力和接收能力正常,对方发送能力和接收能力正常;第三次握手:服务器可以确认自己发送能力和接收能力正常,对方发送能力和接收能力正常,可见三次握手才能让双方都确认自己和对方的发送和接收能力全部正常,这样就可以愉快地进行通信了。

(3)告知对方自己的初始序号值,并确认收到对方的初始序号值

TCP实现了可靠的数据传输,原因之一就是TCP报文段中维护了序号字段和确认序号字段,也就是图中的seq和ack,通过这两个字段双方都可以知道在自己发出的数据中,哪些是已经被对方确认接收的。这两个字段的值会在初始序号值得基础递增,如果是两次握手,只有发起方的初始序号可以得到确认,而另一方的初始序号则得不到确认

TCP建立连接为什么要三次握手而不是四次?

因为三次握手已经可以确认双方的发送接收能力正常,双方都知道彼此已经准备好,而且也可以完成对双方初始序号值得确认,也就无需再第四次握手了。

有一种网络攻击是利用了TCP建立连接机制的漏洞,你了解吗?这个问题怎么解决?

在三次握手过程中,服务器在收到了客户端的SYN报文段后,会分配并初始化连接变量和缓存,并向客户端发送SYN+ACK报文段,这相当于是打开了一个“半开连接( half-open connection)",会消耗服务器资源。如果客户端正常返回了ACK报文段,那么双方可以正常建立连接,否则,服务器在等待一分钟后会终止这个半开连接并回收资源。这样的机制为SYN洪泛攻击( SYN flood attack提供了机会,这是一种经典的DoS攻击( Denial of service,拒绝服务攻击),所谓的拒绝服务攻击就是通过进行攻击,使受害主机或网络不能提供良好的服务,从而间接达到攻击的目的。在SYN洪泛攻击中,攻击者发送大量的SYN报文段到服务器请求建立连接,但是却不进行第三次握手,这会导致服务器打开大量的半开连接,消耗大量的资源,最终无法进行正常的服务

解决方法: SYN Cookies,现在大多数主流操作系统都有这种防御系统。SYN Cookies是对TCP服务器端的三次握手做一些修改,专门用来防范SYN洪泛攻击的一种手段。它的原理是,在服务器接收到SYN报文段并返回SYN+ACK报文段时,不再打开一个半开连接,也不分配资源,而是根据这个SYN报文段的重要信息(包括源和目的ip地址,端口号可一个秘密数),利用特定散列函数计算出一个 cookie值。这个 cookie作为将要返回的SYN+ACK报文段的初始序列号(ISN)。当客户端返回一个ACK报文段时,服务器根据首部字段信息计算cookie,与返回的确认序列号进行对比,如果相同,则是一个正常连接,然后分配资源并建立连接,否则拒绝建立连接。

四次挥手

建立一个连接需要三次握手,而终止一个连接要经过4次握手。这由TCP的半关闭(ha-cose)造成的。既然一个TCP连接是全双工(即数据在两个方向上能同时传递),因此每个方向必须单独地进行关闭。这原则就是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向连接。当一端收到一个FIN,它必须通知应用层另一端已经终止了数据传送。理论上客户端和服务器都可以发起主动关闭,但是更多的情况下是客户端主动发起。

四次挥手过程:

(1)客户端发送关闭连接的报文段,FIN标志位1,请求关闭连接,并停止发送数据。序号字段seq=x(等于之前发送的所有数据的最后一个字节的序号加一),然后客户端会进入 FIN-WAIT-1状态,等待来自服务器的确认报文。

(2)服务器收到FIN报文后,发回确认报文,ACK=1,ack=x+1,并带上自己的序号seq=y,然后服务器就进入 CLOSE-WAIT状态。服务器还会通知上层的应用程序对方已经释放连接,此时TCP处于半关闭状态,也就是说客户端已经没有数据要发送了,但是服务器还可以发送数据,客户端也还能够接收。

(3)客户端收到服务器的ACK报文段后随即进入 FIN-WAIT2状态,此时还能收到来自服务器的数据,直到收到FN报文段。

(4)服务器发送完所有数据后,会向客户端发送FIN报文段,各字段值如图所示,随后服务器进入LAST-ACK状态,等待来自客户端的确认报文段。

(5)客户端收到来自服务器的FIN报文段后,向服务器发送ACK报文,随后进入 TIME-WA状态,等待2MSL(2· Maximum Segment Lifetime,两倍的报文段最大存活时间),这是任何报文段在被丢弃前能在网络中存在的最长时间,常用值有30秒、1分钟和2分钟。如无特殊情况,窖户端会进入CLOSED状态。

(6)服务器在接收到客户端的ACK报文后会随即进入 CLOSED状态,由于没有等待时间,一般而言服务器比客户端更早进入 CLOSED状态。
服务器比客户端更早进入 CLOSED状态。

为什么TCP关闭连接为什么要四次而不是三次?

服务器在收到客户端的FIN报文段后,可能还有一些数据要传输,所以不能马上关闭连接,但是会做出应答,返回ACK报文段,接下来可能会继续发送数据,在数据发送完后,服务器会向客户单发送FIN报文,表示数据已经发送完毕,请求关闭连接,然后客户端再做出应答,因此一共需要四次挥手。

客户端为什么需要在 TIME-WAIT状态等待2MSL时间才能进入 CLOSED状态?

按照常理,在网络正常的情况下,四个报文段发送完后,双方就可以关闭连接进入 CLOSED状态了,但是网络并不总是可靠的,如果客户端发送的ACK报文段丢失,服务器在接收不到ACK的情况下会一直重发FIN报文段,这显然不是我们想要的。因此客户端为了确保服务器收到了ACK,会设置一个定时器,并在 TIME-WAIT状态等待2MSL的时间,如果在此期间又收到了来自服务器的FIN报文段,那么客户端会重新设置计时器并再次等待2MSL的时间,如果在这段时间内没有收到来自服务器的FIN报文,那就说明服务器已经成功收到了ACK报文,此时客户端就可以进入 CLOSED状态了。

35.主机、路由器与节点

主机:配有IP地址,但是不进行路由控制的设备;

路由器:既配有IP地址又具有路由控制能力的设备;

节点:主机与路由器的统称。

36.为什么IP采用面向无连接呢?

一是为了简化,面向连接比起面向无连接处理相对复杂,甚至管理每个链接本身就是一个相当繁琐的事情。二是为了提速,每次通信前都要事先建立连接,会降低处理速度。

IP旨提供尽力服务,意指为了把数据包发送最终目标地址,尽最大努力,它并不做最终收到与否的验证。传输层的TCP则保证负责保证对端主机确实能接收数据。

37.在一个局域网中,两台电脑A,B用交换机连接,其中A:192.168.1.100/16,B:192.168.2.100/24。A能ping通B吗?B能ping通A吗?

要判断两个IP地址是不是在同一个网段,就将它们的IP地址分别与子网掩码做与运算,得到的结果一网络号,如果网络号相同,就在同一子网,否则,不在同一子网。

A ping B: A自己算得的子网是192.168.0.0,A也认为B的掩码是255.255.0.0,所以给B算得的子网是192.168.0.0,两者一样,即认为在同一网段。所以当A发ping包给B时,B也确实收到A的ping请求包,可道理同下,B的ping回复包是不能返回给A的,所以A ping B显示requesttimed out。

B ping A: B自己算得的子网是192.168.2.0,B也认为A的掩码是255.255.255.0,所以给A算得的子网是192.168.1.0,两者不在同一网段,所以B ping A的结果是Unreachable!

38.DNS解析具体怎么解析,端口号怎么处理的?

DNS是可以有效管理主机名和IP地址之间对应关系的系统。域名解析和端口号没关系,端口只是限定从哪个入口进入你的服务器。

(1)客户端发出DNS请求,请求翻译IP地址或主机名;

(2)DNS服务器收到客户机的请求后,检查DNS服务器的缓存,若查到请求的地址或名字,即向客户机发出应答信息;

(3)若没有查到,则在数据库中查找,若查到请求的地址或名字,即向客户机发出应答信息;

(4)若没有查找,则将请求发送给根域DNS服务器,并依序从根域查找顶级域,由顶级查找二级域,由二级域查找三级,直到找到要解析的地址或名字,即向客户机所在网络的DNS服务器发出应答信息,DNS服务器收到应答后在缓存中存储,然后,将解析结果发给客户机。

(5)若没有找到,则返回错误信息。

39.ARP协议,描述ARP的实现过程

ARP是一种解决地址问题的协议。以目标IP地址为线索,用来定位下一个应该接收数据分包的网络设备对应的MAC地址。如果目标主机不在同一个链路时,可以通过ARP查找下一跳路由器的MAC地址。

实现过程:

(1)首先,每个主机都会有自己的ARP缓存区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。

(2)当源主机要发送数据时,首先检测ARP列表中是否对应IP地址的目的主机的MAC地址。如果有,则直接发送数据。如果没有,就向同一链路上的所有主机发送ARP数据包,内容:
我是IP地址,mac地址,目标IP地址,mac?

(3)当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址。如果不是,则忽略该数据包;如果是,则首先从数据包中取出源主机的IP和mac地址写入到ARP列表中,如果以存在,则覆盖,然后将自己的mac地址写入arp响应包中,告诉源主机自己是它想要找的mac地址。

(4)源主机收到ARP响应包后,将目的主机的IP和mac地址写入arp列表,并利用此信息发送数据。如果源主机一直没有收到arp响应数据包,表示arp查询失败。

40.RARP协议,使用场景及实现过程

RARP是从MAC地址定位IP地址的一种协议。例如将打印机服务器等小型嵌入式设备接入到网络时会经常用到。

平常我们可以通过个人电脑设置IP地址,也可以通过DHCP自动分配获取IP地址。然而,对于使用嵌入式设备时,会遇到没有任何输入接口或者无法通过DHCP动态获取IP地址的情况。在类似情况下就可以使用RARP。

需要架设一台RARP的服务器,从而在这个服务器上注册设备的MAC地址及其IP地址。然后再将这个设备接入到网络,插电启动设备时,设备会发送一条“我的MAC地址是XXX,请告诉我我的IP地址应该是什么”的请求信息。RARP服务器接收到这个消息后返回类似于“MAC地址为XXX的设备,IP地址为XXX”的信息给这个设备。而设备就根据从RARP服务器所收到的应答设置自己的IP地址。

41.Socket编程实现过程

socket编程简述

Socket又称”套接字”, 是系统提供的用于网络通信的方法.它的是指并不是一种协议, 没有规定计算机应当怎么传递信息, 只是给程序员提供了一个发送消息的接口。程序员能使用这个接口同的方法, 发送与接收消息。Socket描述了一个IP,端口对,它简化了程序员的操作, 知道对方的IP以及port就可以给对方发送消息,再由服务器处理发送的这些消息。 Socket包含了通信的双发, 即客户端与服务端.TCP/IP的socket提供下列三种类型套接字:流式套接字、数据报式套接字、原始式套接字。

服务器端编程的步骤:

1:加载套接字库,创建套接字(WSAStartup()/socket());
2:绑定套接字到一个IP地址和一个端口上(bind());
3:将套接字设置为监听模式等待连接请求(listen());
4:请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept());
5:用返回的套接字和客户端进行通信(send()/recv());
6:返回,等待另一连接请求;
7:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。

客户端编程的步骤:

1:加载套接字库,创建套接字(WSAStartup()/socket());
2:向服务器发出连接请求(connect());
3:和服务器端进行通信(send()/recv());
4:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。

42.Css一般写在html哪里,为什么

层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。CSS 能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力。

CSS在HTML中有三种定义方式:外联式、嵌入式、内联式。

外联式,CSS代码放在一个单独的外部CSS文件(.css文件)中,然后使用link标签放在HTML文件的部分中。这是将CSS添加到html页面上最方便的方法。这样,您对外部CSS文件所做的任何更改都将反映在你的网站上。

嵌入式css样式就是使用标签之间。类和ID可用于引用CSS代码,但它们仅在该特定页面上处于活动状态。每次页面加载时都会下载以这种方式嵌入的CSS样式,这样可以提高加载速度。在某些情况下使用内嵌样式表很有用,比如:向某人发送页面模板, 因为一切都在一个页面中,所以看到预览要容易得多。

内联式:使用style属性把CSS样式放在特定的HTML标签内。建议不要使用内联CSS,因为每个HTML标记都需要单独设置样式,如果您只使用内联CSS,管理网站可能会变得十分困难。但是,它在某些情况下很有用。例如,在您无法访问CSS文件或仅需要为单个元素应用样式的情况下。带有内联CSS的HTML页面示例如下所示:

43.网络安全构成要素

防火墙最常见的两种是代理防火墙和包过滤防火墙,它们之间的主要区别是所操作的协议栈的层次及由此决定的IP地址和端口号的使用。包过滤防火墙是一个互联网路由器,能够对由外向内的流量进行过滤,丢弃符合(或者不符合)特定条件的数据包,一般而言由内向外的流量不做控制。简单的过滤器包含网络层或者传输层报头中各个部分的范围比较,常见的包括IP地址或选项、ICMP报文类型、根据数据包中端口号确定各种UDP或TCP服务。

IDS(入侵检测系统)检测已经入侵的内部网络进行非法访问的情况,并及时通知给网络管理员系统。IDS有定期采集日志、长期监控、通知异常等功能。它可以监控网络上流动的所有数据包。

反病毒/个人防火墙是用户使用的计算机或服务器上运行的软件。既可以监控计算机中进出的所有包、数据和文件,也可以防止对计算机的异常操作和病毒入侵。

你可能感兴趣的:(面试题,面试,计算机网络,软件开发,软件测试)