测开-面试题-计网
1 TCP/IP协议三次握手和四次挥手?
答:
(1)三次握手
第一次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
seq-序列号;
ack-确认号=收到序列号+1。
(4)四次挥手
第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可 以接受数据。
第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。
第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。
第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。
1.0 syn底层是什么?
答:
1.1 为什么连接的时候是三次握手,关闭的时候是四次握手?
答:(B端-服务器,A端-客户端)
在TCP连接中,服务端的SYN和ACK是一次性向客户端发送的。而在断开连接的过程中,B端向A端发送的ACK和FIN是分两次发送的。因为在B端接收到A端的FIN后,B端可能还有数据要传输,所以先发送ACK,等B端处理完自己的事情后就可以发送FIN断开连接了。
1.2 为什么TIME_WAIT状态需要经过2MSL(最大报文生存时间)才能返回到CLOSE状态?
答:
(1)确保最后一次挥手的报文被对端收到。
为了保证客户端最后一次挥手的报文能够到达服务器,如果第四次挥手的报文段丢失了,服务器会超时重传这个第三次挥手的报文段,所以客户端不是直接进入CLOSED,而是要保持TIME_WAIT(等待2MSL就是TIME_WAIT)就起到作用了,当再次收到服务器的超时重传的断开连接的第三次挥手的请求的时候,客户端会继续给服务器发送一个第四次挥手的报文,能够保证对方(服务器)收到客户端的回应报文,最后客户端和服务器正确的关闭连接。
(2)确保该连接产生的所有报文全部消逝,不会影响到下一次连接。
有可能新连接和老连接的端口号是相同的。一般来说不会发生什么问题,但是还是有特殊情况出现:假设新连接和已经关闭的老连接端口号是一样的,如果前一次连接的某些数据仍然滞留在网络中,这些延迟数据在建立新连接之后才到达Server,由于新连接和老连接的端口号是一样的,于是,TCP协议就认为那个延迟的数据是属于新连接的,这样就和真正的新连接的数据包发生混淆了。所以TCP连接还要在TIME_WAIT状态等待2倍MSL,这样可以保证本次连接的所有数据都从网络中消失。
1.3 为什么需要三次握手?为什么不能用两次握手?
答:(A端-客户端,B端-服务器端)
(1)TCP的三次握手过程:A端向B端发送连接请求;B对收到的A的报文段进行确认;A再对B的确认进行确认。
(2)采用三次握手是为了防止失效的连接请求报文段突然又传送到B端,因而产生错误。
失效的连接请求报文段是指:A端发出的连接请求没有收到B端的确认,经过一段时间后,A端又重新向B端发送连接请求,且建立成功顺序完成数据传输。
考虑这样一种特殊情况,主机A第一次发送的连接请求并没有丢失,而是因为网络节点导致延迟达到主机B,主机B以为是主机A又发起的新连接,于是主机B同意连接,并向主机A发回确认,但是此时主机A根本不会理会,主机B就一直在等待主机A发送数据,导致主机B的资源浪费。
(3)采用两次握手不行,原因就是上面说的失效的连接请求的特殊情况。
1.4 已经建立了连接,但是客户端突然出现故障了怎么办?
答:
TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。
服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
2 TCP、UDP区别?
答:
TCP传输控制协议 提供面向连接的、可靠的数据流传输,注重数据安全性。
UDP用户数据报协议 提供的是非面向连接的、不可靠的数据流传输,数据传输快,因为不需要连接等到,少了许多操作,但是安全性一般。
TCP传输单位称为TCP报文段,
UDP传输单位称为用户数据报。
TCP对应的协议和UDP对应的协议
TCP对应的协议:
(1) FTP 21:文件传输协议。
(2) Telnet 23:用于 远程登陆 的端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。
(3) SMTP 25:邮件传送协议,用于发送邮件。
(4) POP3 110:用于接收邮件。
(5)HTTP 80:是从Web服务器 传输 超文本 到本地浏览器的传送协议。
UDP对应的协议:
(1) DNS 53:用于域名解析服务,将域名地址转换为IP地址。
(2) SNMP 161:简单网络管理协议,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
(3) TFTP(Trival File Transfer Protocal) 69:简单文件传输协议。
TCP 协议如何保证可靠传输
1 分割 数据块:应用数据被分割成 TCP 认为最适合发送的数据块。
2 编号 有序:TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
3 校验和: TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
4 TCP 的接收端会丢弃重复的数据。
5 流量控制: TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制)
6 拥塞控制: 当网络拥塞时,减少数据的发送。
7 停止等待协议 也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。
8 超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
滑动窗口 是传输层进行流量控制的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的发送速度,防止发送方发送速度过快而导致自己被淹没。将窗口字段设置为 0,则发送方不能发送数据。
2.1 怎么判断是TCP还是UDP?
答:
虚拟信道的释放时机不同:
一个TCP协议连接其实就是在物理线路上创建的一条“虚拟信道”。这条“虚拟信道”建立后,在TCP协议发出FIN包之前(两个终端都会向对方发送一个FIN包),是不会释放的。正因为这一点,TCP协议被称为面向连接的协议。
UDP协议一样会在物理线路上创建一条“虚拟信道”,否则UDP协议无法传输数据。但是,当UDP协议传完数据后,这条“虚拟信道”就被立即注销了。因此,称UDP是不面向连接的协议。
3 七层协议、五层协议有什么?
答:
OSI分层 (7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
TCP/IP分层(4层):网络接口层、 网际层、运输层、 应用层。
五层协议 (5层):物理层、数据链路层、网络层、运输层、 应用层。
每一层的协议及作用如下:
物理层:IEEE802.3 (中继器,集线器)
物理层:通过 媒介传输 比特,确定机械及电气规范(比特Bit)//建立.维护和断开物理连接。
数据链路:PPP、MAC (网桥,交换机)
数据链路层:将 比特组装成 帧,点到点的传递(帧Frame)//建立逻辑连接,进行硬件地址的寻址,差错校验等功能。
网络层:IP、ICMP、ARP、RARP (路由器)
网络层:负责 数据包从源到宿的传递,网际互连(包PackeT)//进行逻辑地址的寻址,实现不同网络之间的路径选择。
是不是同一个网段是由子网掩码和Ip地址做二进制与操作来决定的。
传输层:TCP、UDP
传输层:提供端到端的可靠 报文传递和错误恢复(段Segment)//定义传输数据的协议端口号,以及流控和差错校验,数据包一旦离开网卡即进入网络传输层。
会话层:SQL
会话层:建立、管理和终止会话(会话协议数据单元SPDU)。
表示层:
表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)//数据的表示.安全和压缩。
应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS
应用层:为特定应用程序提供数据传输服务
4 HTTP状态码了解?
答:
(1)1开头的状态码(信息类)
100,接受的请求正在处理,信息类状态码
(2)2开头的状态码(成功类)
2xx(成功)表示成功处理了请求的状态码
200(成功)服务器已成功处理了请求。
(3)3开头的状态码(重定向)
3xx(重定向)表示要完成请求,需要进一步操作。通常这些状态代码用来重定向。
301,永久性重定向,表示资源已被分配了新的 URL
302,临时性重定向,表示资源临时被分配了新的 URL
303,表示资源存在另一个 URL ,用 GET 方法获取资源
304,(未修改)自从上次请求后,请求网页未修改过。服务器返回此响应时,不会返回网页内容
(4)4开头的状态码(客户端错误)
4xx(请求错误)这些状态码表示请求可能出错,妨碍了服务器的处理
400(错误请求)服务器不理解请求的语法
401表示发送的请求需要有通过 HTTP 认证的认证信息
403(禁止)服务器拒绝请求
404(未找到)服务器找不到请求网页
(5)5开头的状态码(服务器错误)
5xx(服务器错误)这些状态码表示服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求的错误
500,(服务器内部错误)服务器遇到错误,无法完成请求
503,表示服务器处于停机维护或超负载,无法处理请求
5 DNS的作用?
答:
域名解析协议,使用UDP端口53。用于将域名转化为IP地址。
5.1 DNS 的解析过程?
答:
1、主机m.abc.com先向本地服务器dns.xyz.com进行递归查询。
2、本地服务器采用迭代查询。它先向一个根域名服务器查询。
3、根域名服务器告诉本地服务器,下一次应查询的顶级域名服务器dns.com的IP地址。
4、本地域名服务器向顶级域名服务器dns.com进行查询。
5、顶级域名服务器dns.com告诉本地域名服务器,下一步应查询的权限服务器dns.abc.com的IP地址。
6、本地域名服务器向权限域名服务器dns.abc.com进行查询。
7、权限域名服务器dns.abc.com告诉本地域名服务器,所查询的主机的IP地址。
8、本地域名服务器最后把查询结果告诉m.xyz.com。
6 GET、POST区别?
答:
GET:在浏览器的地址栏中输入网址的方式访问网页时,浏览器采用GET方法向服务器获取资源。 参数以“?”连接在网址后面,参数长度受限。
POST:要求被请求服务器接受附在HTTP请求数据中的数据,常用于提交表单。需传输大量数据时,采用post。更安全。
无状态 的意思是数据包的发送、传输、接收都是相互独立的,
无连接 的意思是双方都不长久的维持对方的任何消息
疑:
post不是在浏览器的地址栏中输入网址?
post也是通过url访问的 只不过get在url后面加的参数 然后post是在body里面加参数的
7 cookie的作用?
答:
保存状态信息。
7.1 cookie、session区别?
答:
Cookie是由服务端产生的,再发送给客户端保存,当客户端再次访问的时候,服务器可根据cookie辨识客户端是哪个,以此可以做个性化推送,免账号密码登录等等
session用于标记特定客户端信息,存在在服务器的一个文件里。 一般客户端带Cookie对服务器进行访问,可通过cookie中的session id从整个session中查询到服务器记录的关于客户端的信息。
8 怎么诊断网络不好?
答:
(0)确定这是你的问题
有时看起来像网络中断实际上是特定网站的问题。 如果你无法访问打开想要访问的网站,例如www.beijinghuayu.com.cn,请访问检查其他几个网站,如果其他网站也不能访问,则代表你不能连接互联网。
(1)重启所有设备并检查其他设备
没有必要感到沮丧,因为解决问题的方法可能就像重新启动设备一样简单。 重新启动修复了大量问题,因此请确保这是您对网络问题的第一次响应。
重新启动您的PC,以及您的猫和路由器。关闭猫和路由器后请等待20秒再重新打开它们。
重新启动后,请尝试使用另一台计算机(或移动设备)联网。 如果您发现其他计算机或移动设备也不能连网,则可能是您的设备或ISP的问题。
如果您发现只有一台计算机无法上线,您可以继续缩小问题的范围。 在该设备上,请确保运行防病毒扫描,以确保您没有恶意软件干扰您的连接。 确保未更改防火墙设置。
(2)检查物理连接
重启后问题是否仍然存在? 在我们开始深入设置和测试之前,接下来要检查的是你是否已经物理连接。 如果使用以太网电缆连接到路由器,请检查以确保没有拔下插头。 如果您的笔记本电脑配有物理无线开关(请查看固定无线连接的具体提示),请确保它没有碰到关闭位置。
(3)运行网络故障排除程序
Windows包含一些内置的故障排除程序,可以自动查找和修复问题。 要针对网络问题运行故障排除程序,请右键单击系统托盘中的网络图标,然后选择“疑难问题”。 一旦故障排除程序运行,它可以解决问题,发现问题但无法解决问题或找不到问题。
如果故障排除程序发现其修复的问题,请尝试再次连接。 如果您收到Windows无法自动修复的特定错误或问题名称,请记下该名称以供日后研究使用。
(4)检查有效的IP地址
此时,我们已经验证问题不是暂时的,并且我们所有的硬件都能正常工作。 由于Windows无法自行解决问题,因此我们需要查明发生问题的连接点。
确保您没有选择任何奇怪的IP设置是个好主意。 要进行检查,请在“开始”菜单中键入“网络和共享中心”以打开该实用程序。 在右侧,您可以看到“连接”,单击Wi-Fi或有线网络的名称。 选择“属性”,然后双击“Internet协议版本4”。
除非您设置了静态IP(如果您不知道这是什么,您可能不会使用它),请务必检查自动获取IP地址并自动获取DNS服务器地址。
完成此操作后,我们可以检查确认路由器是否为您提供了有效的IP地址。 通过在“开始”菜单中键入cmd打开命令提示符。 键入ipconfig并查找以太网适配器(用于有线连接)或无线LAN适配器(用于无线连接)下的文本。
如果IPv4地址以169.x.x.x开头,则表明您的计算机未从路由器接收有效的IP地址。 键入以下两个命令可以解决此问题:
ipconfig /release
ipconfig /renew
如果在再次输入上述命令和ipconfig后仍然有169.x.x.x地址,您的机器仍然没有从路由器接收IP。 尝试使用以太网电缆将PC直接插入调制解调器,看看是否可以联机。 如果是这样,你的路由器就是问题所在。
(5)尝试Ping 和追踪其路由
如果在运行ipconfig时IP地址以169以外的任何其他地址开头,则路由器上有一个有效的IP地址,路由器和互联网之间就会出现问题。
输入此命令来ping DNS服务器以查看您是否可以联机:(您可以将114.114.114.114替换为任何内容,例如www.beijinghuayu.com.cn.com)
ping 114.114.114.114
这将向114.114.114.114发送四个数据包。 如果他们没有返回,你会被告知问题是什么。 有关详细信息,请键入此行以跟踪计算机与 DNS服务器之间的路由:
tracert 114.114.114.114
上面的命令可以逐步分析信息到达指定目标所用的路径。 观察它,如果失败,请检查问题发生的位置。 如果路由中的早期错误弹出,则问题可能出在本地网络上。
(6)联系您的ISP
如果以上所有步骤都成功完成,我们已经验证我们的设备正在运行,我们从路由器获得了有效的IP地址,并且我们的网络外部出现了多个设备的问题。 如果是这种情况,您的下一个最佳选择是找出您的ISP是否有问题。
(7)等待
一旦你让你的ISP知道这个问题,并确认它不只是一台有问题的电脑,你所能做的就是等待。 很多时候,您无法自行解决网络问题。
9 用户输入网址到显示对应页面的全过程?
答:
第一步:首先你得在浏览器中输入网址,比如输入www.baidu.com。其中www为主机,baidu为域名,com为类型。但是有网址不能直接找到对应的响应主机,必须把网址,即域名转化为ip地址。
第二步:进行DNS(Domain Name System,域名系统)查询,它的作用是将域名转化为具体的ip地址;
先谈一下DNS的结构:
(1)根域名服务器,全球只有13个不同ip地址的服务器,注意不是服务器只有13台,只是他们所代表的地址只有13个,也就是存在镜像服务器,一个地址可以对应多个镜像服务器。
(2)根域名服务器之下的顶级域名服务器,如com、net、cn、gov等。
(3)顶级域名服务器之下的权威服务器,比如baidu、facebook等。
(4)权威服务器之下的资源记录,比如www、ftp、mail等。
查询的过程如下:
(1)首先会在浏览器缓存中去查询,之前每浏览一个网站,浏览器都会在缓存中存有域名与ip地址的映射关系。不过缓存失效的时间不由浏览器决定,而由操作系统决定。
(2)浏览器缓存中查询不到后,之后会在系统缓存中查询,由浏览器发起一个系统调用,查询系统缓存中的数据。
(3)系统缓存中也查询不到后,将会去路由器缓存中查找。
(4)路由器缓存中也找不到的话,将会从本地DNS服务器的缓存中查找,本地服务器即用户自己配置的DNS服务器。
(5)如果本地的DNS服务器也找不到的话,本地DNS将会发送请求至根域名服务器,根域名服务器中没有相关缓存数据的时候,就会返回com顶级域名服务器的地址。
然后本地DNS服务器再发送请求至com顶级域名服务器,com顶级域名服务器中查询不到的话,就会返回baidu权威服务器的地址,
然后本地DNS服务器再发送请求至baidu权威服务器,baidu权威服务器就会返回www主机地址。
(这是一种迭代的过程,还有一种递归的过程。即local至根域名,根域名不直接返回com地址,而是发送请求至com,com发送请求至baidu,baidu发送请求至www,www再返回给baidu,baidu返回给com,com再返回给local)至此,整个DNS查询步骤结束,现在浏览器拿到了域名对应的ip地址。
第三步:浏览器发送请求至服务器,假设我们现在输入的地址是www.baidu.com,那么浏览器默认将网址改成这样的形式,即http://www.baidu.com;
发现返回了307状态码,也就是临时重定向,需要我们重定向到location表明的地址,即https://www.baidu.com。仔细观察,仅仅多了个s。
第四步:浏览器向重定向后的地址发送请求
第五步:服务器处理http请求
服务器可以根据Cookie中的数据,通过遍历内存中的Session集合,从而判断用户的登录状态。如果用户未登录,则展示一些诸如首页的基本宣传数据。如果用户已经登录,通过解析get请求头、post请求体中的参数,查询数据库,返回用户相关数据,填充到视图中。并将此次处理完的内容通过相应的压缩算法,压缩成某个块。
第六步:服务器返回http响应
第七步:浏览器请求样式以及图片文件,用以渲染界面并显示给用户
浏览器解压缩响应体后,在界面显示的同时,下载css、png、gif等一些静态文件,这些静态文件可以被浏览器缓存,防止多次请求。很多公司将自己的静态文件托管在CDN上(Content Delivery Network,即内容分发网络),从CDN上加载大量静态文件,加快查找速度,减少原本网站的并发压力。
第八步:浏览器通过Ajax(Asynchronous Javascript And XML 异步 JavaScript 和 XML)
在传统的web应用,用户每发一次请求,用户的动作就会被阻塞,即在服务器返回响应之前,用户不可以进行其他的操作,只能等待响应。然后服务器会响应一个完整的html页面,浏览器再次进行渲染。哪怕是一个很小的一个请求,都会阻塞用户动作,以及刷新整个页面,极大地浪费了用户的时间和网络的带宽,也增加了服务器的压力。
Ajax出现之后,通过此技术发起的http请求,将不会阻塞用户的动作,服务器响应之后,页面会进行一个局部的刷新,也就是不会刷新整个页面,极大提高了页面加载与服务器处理的效率。当然Ajax也要自身的缺点,暴露了浏览器和服务器通信的具体逻辑,容易造成漏洞攻击。此外,Ajax没有后退机制,在一定程度上,用户的体验感降低。
百度界面显示出来后,百度又利用了ajax去请求我之前的搜索关键词,然后利用js填充到搜索框的下拉列表中。
10 什么是ARP协议?ARP具体工作过程?
答:
(1)ARP 协议(Address Resolution Protocol,地址解析协议)的主要作用是通过目标设备的 IP 地址,查询目标设备的 MAC 地址,以保证通信的顺利进行。ARP 协议将局域网中的 32 位 IP 地址转换为对应的 48 位物理地址,即网卡的 MAC 地址,如 IP 地址是192.168.0.10,而网卡 MAC 地址为 00-1B-7C-17-B0-79,整个转换过程是一台主机先向目标主机发送包含 IP 地址和 MAC 地址的数据包,再通过 MAC 地址连接两台主机,就可以实现数据传输了。
(2)ARP工作过程:
计算机相互通信,实际上是互相解析对方的 MAC 地址。其具体的操作步骤如下。
1)每台主机都会在自己的 ARP 缓冲区中建立一个 ARP 列表,来表示 IP 地址和 MAC地址的对应关系。
2)当源主机需要将一个数据包发送到目的主机时,会检查自己 ARP 列表中是否存在该 IP 地址对应的 MAC 地址。如果存在,则将数据包发送到这个 MAC 地址;如果不存在,就向本地网段发起一个 ARP 请求的广播包,来查询此目标主机对应的 MAC 地址。此 ARP请求数据包里包括源主机的 IP 地址、硬件地址,以及目的主机的 IP 地址。
3)网络中所有的主机收到这个 ARP 请求后,会检查数据包中的目的 IP 地址是否和自己的 IP 地址相同。如果不相同,就忽略此数据包;如果相同,该主机首先将发送端的 MAC地址和 IP 地址添加到自己的 ARP 列表中。
4)如果 ARP 表中已经存在该 IP 地址的信息,则将其覆盖,然后给源主机发送一个ARP 响应数据包,告诉对方自己是它需要查找的 MAC 地址。
5)当源主机收到这个 ARP 响应数据包后,将得到的目的主机的 IP 地址和 MAC 地址添加到自己的 ARP 列表中,并利用此信息开始数据的传输。
11 IP协议首部结构?
答:
12