首页 > 编程知识 正文

计算机网络面试基础知识,计算机网络

时间:2023-05-05 10:16:56 阅读:15898 作者:3529

OSI和TCP/IP各层的结构和功能有哪些协议? http://www.Sina.com/http://www.Sina.com/APP应用层协议定义了应用进程之间的通信和交互规则。 每个网路APP应用程式都需要不同的APP应用层通讯协定。 在互联网上,APP应用层的协议很多,包括域名系统DNS、支持www APP应用的HTTP协议和支持电子邮件的SMTP协议。 由APP应用层交换的数据单位称为消息

http://www.Sina.com/http://www.Sina.com/APP应用进程使用此服务传输APP应用层的消息。 “常规”表示多个APP应用程序可以使用同一传输层服务,而不是针对某个特定的网络APP应用程序。 传输层具有重用和重用功能,因为一台主机可以同时运行多个进程。 复用意味着多个APP应用层过程可以同时使用下一个传输层的服务,而与复用相反,复用是将传输层收到的信息分别传递给上层APP应用层的适当过程。应用层

传输控制协议传输控制协议(TCP )提供面向连接、可靠的数据传输服务。 用户数据协议UDP(userdatagramprotocol,用户数据协议)不连接,尽最大努力实现数据传输服务(不保证数据传输的可靠性) http://www.Sina.com/http://www 在发送数据时,网络层将传输层中生成的分组或用户数据封装成分组或分组进行发送。 在TCP/IP实现结构中,由于在网络层使用IP协议,分组也被称为IP数据报(简称为数据报)。

这里需要注意的是,不要把传输层的“用户数据报UDP”和网络层的IP数据报混淆起来。 另外,无论是哪个层次的数据单元,都可以大致用“分组”来表示。

在此,我要强调网络层中的“网络”一词指的是计算机网络体系结构模式中的第三层名称,而不是我们通常提到的具体网络。

在互联网中,许多异构网络通过路由器(router )相互连接。 因特网上使用的网络层协议是未连接的因特网协议(Intert Protocol )和许多路由协议,因此因特网的网络层也称为因特网层或IP层

http://www.Sina.com/http://www.Sina.com /在两个相邻节点之间传送数据时,数据链路层将网络层传递的IP数据报组装成帧,并在两个相邻节点之间传送链路每一帧包含数据和所需的控制信息(同步信息、地址信息、错误控制等)。

当接收到数据时,控制信息使得接收端能够知道一帧从哪个比特结束到哪个比特。 这样,数据链路层就可以在接收到帧后,从该帧中提交数据部分,并传递给网络层。 控制信息还使得接收端能够检测接收的帧是否有错误。 如果发现错误,数据链路层将轻松丢弃发生此错误的帧,以避免继续在网络上传输并浪费网络资源。 如果数据在链路层传输过程中发生错误,也就是说,数据链路层不仅需要检测错误,而且还需要纠正错误,则必须使用可靠的传输协议纠正错误。 这种方法使链路层协议变得复杂。

应用层的任务是通过应用进程间的交互来完成特定网络应用

物理层传输的数据单位是位。 *物理层的作用是提供相邻计算机节点之间的比特流透明传输,并尽可能隔离特定传输介质和物理设备之间的差异。 *其上的数据链路层不需要考虑网络的具体传输介质是什么。 “透明传输比特流”指示通过实际电路传输的比特流没有变化,对于所传输的比特流来说,该电路似乎不可见。

互联网上使用的各种协议中最重要、最有名的是TCP/IP这两个协议。 现在经常提到的TCP/IP并不一定只指两个具体的协议: TCP和IP,它们通常表示互联网上使用的整个TCP/IP协议家族。

请详细介绍TCP的3次握手的机制。 为什么要握手三次?

服务器端建立链接之前的状态为侦听状态,因为首先需要服务器端在建立链接之前侦听端口。 在这种情况下,客户端准备建立链接,首先发送SYN同步分组,发送同步分组,然后客户端返回ACK。

因为TCP是双重传输,所以服务器端也会同时向客户端发送SYN,申请与客户端建立链接。 发送ACK和SYN后,服务器端的链接状态为SYN_RCVD。

当客户端从服务器接收到ACK时,客户端的链路状态为ESTABLISHED,客户端向服务器发送ACK以响应服务器端的SYN请求。

服务器端从客户端接收到ACK后,服务器端的链接状态也变为ESTABLISHED状态,此时连接完成,双方可以随时进行数据传输。

为什么需要握手?

握手是为了建立双向链接

TCP

是协议具有一个重要的特性 可靠性,可靠性体现在,假如client端发送一个消息给server端,并不是Client发完就完了,如果server端没有回复收到了,那么client就会一直重发,一定要server端回复收到了,这个消息才算发送成功。

为什么是3次

客户端和服务端都需要知道各自可收发,因此需要三次握手。

C发起请求连接

S确认,也发起请求

C确认

第一次握手:S只可以确认自己可以接受C发送的报文段

第二次握手: C可以确认S收到了自己发送的报文段,并且可以确认自己可以接受S发送的报文段

第三次握手 S可以确认C收到了自己发送的报文段

详解四次挥手


TCP链接的关闭,通信双方都可以先发起,我们暂且把先发起的一方看作Client,从图中看出,通信中Client和Server两端的链接都是ESTABLISHED状态,然后 Client先主动发起了关闭链接请求,Client向Server发送了一个FIN包,表示Client端已经没有数据要发送了,然后Client进入FIN_WAIT_1状态。

Server 端收到 FIN 后,返回 ACK,然后进入 CLOSE_WAIT 状态。此时 Server 属于半关闭状态,因为此时 Client 向 Server 方向已经不会发送数据了,可是 Server 向 Client 端可能还有数据要发送。

当 Server 端数据发送完毕后,Server 端会向 Client 端发送 FIN,表示 Server 端也没有数据要发送了,此时 Server 进入 LAST_ACK 状态,就等待 Client 的应答就可以关闭链接了。

Client 端收到 Server 端的 FIN 后,回复 ACK,然后进入 TIME_WAIT 状态。TIME_WAIT 状态下需要等待 2 倍的最大报文段生存时间,来保证链接的可靠关闭,之后才会进入 CLOSED 关闭状态。而 Server 端收到 ACK 后直接就进入 CLOSED 状态。

这里面试官可能会问为什么需要等待 2 倍最大报文段生存时间之后再关闭链接,原因有两个:

保证 TCP 协议的全双工连接能够可靠关闭;

保证这次连接的重复数据段从网络中消失,防止端口被重用时可能产生数据混淆。

从这个交互流程可以看出,无论是建连还是断链,都是需要在两个方向上进行,只不过建连时,Server 端的 SYN 和 ACK 合并为一次发送,而断链时,两个方向上数据发送停止的时间可能不同,所以不能合并发送 FIN 和 ACK。这就是建连三次握手而断链需要四次的原因。

另外回答断链的问题时,可以提到实际应用中有可能遇到大量 Socket 处在 TIME_WAIT 或者 CLOSE_WAIT 状态的问题。一般开启 tcp_tw_reuse 和 tcp_tw_recycle 能够加快 TIME-WAIT 的 Sockets 回收;而大量 CLOSE_WAIT 可能是被动关闭的一方存在代码 bug,没有正确关闭链接导致的。

TCP和UDP协议的区别 是否面向连接传输可靠性传输形式传输效率所需资源应用场景TCP面向连接可靠字节流慢多要求通信数据可靠
(如文件传输、邮件传输)UDP无连接不可靠数据报文段快少要求通信速度高
(如域名转换)地址栏键入URL后,发生了什么? 浏览器查找域名的IP地址
(DNS查找过程:浏览器缓存、路由器缓存、DNS缓存)浏览器向web服务器发送一个HTTP请求
(cookies会随着请求发送给服务器)服务器处理请求服务器发回一个HTML响应浏览器开始显示HTML

总体来说分为以下几个过程:

DNS 解析TCP链接发送HTTP请求服务器处理请求并返回HTTP报文浏览器解析连接结束 状态码 类别原因短语1XXInforational(信息性状态码)接收的请求正在处理2XXSuccess(成功状态码)请求正常处理完毕3XXRedirection(重定向状态码)需要进行附加操作以完成请求4XXClient Error(客户端错误状态码)服务器无法处理请求5XXServer Error(服务器错误状态码)服务器处理请求出错HTTP长连接,短连接

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

而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:
Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器直接用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。

HTTP和HTTPS的区别 端口:HTTP的URL由 ”http://“起始且默认使用端口80,而HTTPS的URL由”https://“起始且默认使用端口443.安全性和资源消耗:HTTP协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。所以说,HTTP安全性没有HTTPS高,但是HTTPS比HTTP耗费更多的服务器资源。 对称加密:密钥只有一个,加密解密为同一个密码,且加密解密速度快,典型的对称加密算法有DES、AES等非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。 TIME_WAIT 和 CLOSE_WAIT的区别在哪

CLOSE_WAIT是被动关闭形成的;当对方close socket而发送FIN报文过来时,回应ACK之后进入CLOSE_WAIT状态。随后检查是否存在未传输数据,如果没有则发起第三四挥手,发送FIN报文给对方,进入LAST_ACK状态并等待对方ACK报文到来

TIME_WAIT是主动关闭连接形成的;处于FIN_WAIT_2状态时,收到对方FIN报文后进入TIME_WAIT状态;之后再等待两个MSL(Maximum Segment Lifetime :报文最大生存时间)

TIME_WAIT的作用,为什么状态时间要保持两个MSL TIME_WAIT的作用是为了保证最后一次挥手的ACK报文送达给对方,如果ACK丢失,对方会超时重传FIN,主动关闭端会再次响应ACK过去;如果没有TIME_WAIT状态,直接关闭,对方重传的FIN报文则被响应一个RST报文,此RST会被 动关闭端被解析成错误

为什么状态时间要保持两个MSL

保证TCP协议的全双工连接能够可靠关闭保证这次连接的重复数据段从网络中消失,防止端口被重用时可能产生数据混淆。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。