当前位置: 首页 > 后端技术 > Java

【访谈系列】计算机网络(一)

时间:2023-04-02 01:33:51 Java

计算机网络基础知识点击登录等,以后还会分享更多计算机网络知识,欢迎关注!1、网络体系结构1.1、OSI模型1.2、TCP/IP模型OSI的七层协议体系结构概念清晰,理论比较完备,但复杂而不实用,TCP/IP架构不同,但现在已经被广泛使用。TCP/IP网络模型一般是五层模型,但也可以分为四层,即链路层和物理层表示为Networkinterfacelayer1.3。各层功能物理层本层为上层协议提供可靠的数据传输物理介质。简单来说,物理层就是保证原始数据可以在各种物理介质上传输。数据链路层数据链路层为网络层提供可靠的数据传输。基本数据单元是帧,主要协议是以太网协议。两个重要的设备名称:网桥和交换机网络层网络层负责在网络之间选择合适的路由和交换节点,以保证计算机通信数据的及时传输。此外,网络层还可以实现拥塞控制、互联网互联等功能。基本数据单元是IP数据报。包括的主要协议有:IP协议(InternetProtocol,互联网互联网协议)ICMP协议(InternetControlMessageProtocol,互联网控制消息协议);ARP协议(AddressResolutionProtocol,地址解析协议);RARP协议(ReverseAddressResolutionProtocol,反向地址解析协议)。重要设备:路由器传输层传输层负责对上层数据进行分段,提供端到端、可靠或不可靠的传输,以及端到端的差错控制和流量控制。主要协议包括:TCP协议(TransmissionControlProtocol,传输控制协议)、UDP协议(UserDatagramProtocol,用户数据报协议);重要设备:网关应用层应用层通过应用进程之间的交互完成特定的网络应用数据传输。数据传输的基本单位是报文中包含的主要协议:FTP(文件传输协议)Telnet(远程登录协议)DNS(域名解析协议)SMTP(邮件传输协议)POP3协议(邮局协议)HTTP协议(HyperTextTransferProtocol)2.Singlesign-on全称SingleSignOn(简称SSO),意思是在多系统应用组中登录一个系统后,无需登录即可在其他所有系统中获得授权再次,包括单点登录和单点注销,sso需要一个独立的认证中心,只有认证中心可以接受用户的用户名和密码等安全信息,其他系统不提供登录入口,只接受认证中心的间接授权。间接授权是通过令牌实现的。sso认证中心验证用户的用户名和密码没有问题,并创建一个授权令牌。在接下来的跳转过程中,将授权令牌作为参数发送给各个子系统,子系统获得令牌,即已授权,您可以使用它来创建本地会话。本地session的登录方式与单系统相同。这个过程,也就是单点登录单点登出的原理,单点登入自然也需要单点登出。如果在一个子系统中注销,所有子系统的会话都会被销毁。用户登录成功后,会与sso认证中心和各个子系统建立session。用户与sso认证中心之间建立的会话称为全局会话,用户与各子系统之间建立的会话称为本地会话。本地会话建立后,用户访问子系统受保护的资源将不再通过sso认证中心。全局会话和本地会话具有以下约束。如果本地会话存在,则全局会话必须存在。全局会话必须存在,本地会话不一定存在。全局会话销毁,本地会话必须通过sso认证中心销毁。始终监视全局会话的状态。一旦全局会话被销毁,监听器将通知所有注册系统执行注销操作。JWTJWT(jsonwebtoken)机制是一种让你的浏览器有内存的机制。与Cookie不同,JWT是存储在客户端的信息,广泛应用于单点登录的场合。JWT有两个特点:JWT的cookie信息是保存在客户端的,而不是在服务端的内存中。也就是说,JWT可以直接在本地进行验证。验证完成后,Token会随着Session中的请求发送到服务器。这样既可以节省服务器资源,又可以多次验证token。JWT支持跨域认证,Cookies只能在单个节点的域或其子域中使用。如果他们试图通过第三方节点访问,他们将被禁止。使用JWT可以解决这个问题。使用JWT可以通过多个节点进行用户认证,也就是我们常说的跨域认证。用户登录认证流程用户使用用户名和密码请求服务器服务器对用户信息进行验证。服务器验证通过后,向用户发送token。客户端存储令牌并将令牌值附加到每个请求。服务器验证令牌值并返回数据3.TCP协议TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。在发送数据之前,通信双方必须相互建立连接。所谓“连接”,其实就是客户端和服务端保存的一条关于彼此的信息,比如ip地址,端口号等。TCP可以看成一个字节流,处理丢包,重复,IP层或以下的错误。在建立连接的过程中,双方需要交换一些连接参数。这些参数可以放在TCP报头中。一个TCP连接由一个4元组组成,即两个IP地址和两个端口号。一个TCP连接通常分为三个阶段:连接、数据传输、退出(关闭)。三次握手建立连接,四次握手关闭连接。当连接建立或终止时,交换的报文段只包含TCP头,不包含数据3.1、TCP报文头结构上图中有几个字段需要强调:(1)序列号:seqTheserialnumber,占32位,用于标识从TCP源端发送到目的端的字节流,在发起端发送数据时标记。(2)Acknowledgementsequencenumber:ack序号,占用32比特,只有当ACK标志为1时,acknowledgementsequencenumber字段才有效,ack=seq+1。(3)标志位:共6位,分别为URG、ACK、PSH、RST、SYN、FIN等。具体含义如下:ACK:确认序列号有效。FIN:释放一个连接。PSH:接收方应尽快将此消息传递给应用层。RST:重置连接。SYN:发起一个新的连接。URG:紧急指针有效。需要注意的是:不要将确认序号ack和标志位中的ACK混淆。确认方ack=initiatorseq+1,两端配对。3.2.三次握手首先,我让快递员给对方送了一封信,对方收到了,他就知道我的发送能力和他的接收能力是可接受的。于是他回信给我,如果我收到了,我就知道我发邮件他收邮件没问题,他发邮件我收邮件没问题。不过这个时候,他还不知道他的发邮件能力和我的收邮件能力是否可以接受,所以我最后还一次。如果他收到了,他就会知道他发邮件的能力和我收邮件的能力是否可以接受。的。三次握手的本质是确认通信双方发送和接收数据的能力。一开始,客户端处于Closed状态,服务器处于Listen状态。进行三次握手:第一次握手:客户端向服务器发送SYN报文,并指明客户端的初始化序列号ISN(c)。此时客户端处于SYN_SEND状态。包头同步位SYN=1,初始序号seq=x,SYN=1的报文段不能携带数据,但会消耗一个序号。第二次握手:服务器收到客户端的SYN报文后,会回复自己的SYN报文,同时指定自己的初始化序列号ISN(s)。同时client的ISN+1会作为ACK的值,表示已经收到client的SYN,此时server处于SYN_RCVD状态。在确认段中,SYN=1,ACK=1,确认号ack=x+1,初始序号seq=y。第三次握手:客户端收到SYN报文后,会发送ACK报文。当然,它也把服务器的ISN+1作为ACK的值,表示收到了服务器的SYN报文。此时客户端处于ESTABLISHED状态。服务器收到ACK报文后,也处于ESTABLISHED状态。此时,双方已经建立了连接。确认报文段ACK=1,确认号ack=y+1,序列号seq=x+1(初始是seq=x,所以第二个报文段需要+1),ACK报文段可以carrydata,no携带数据不消耗序号。第三次握手时,可以携带数据。但是,第一次和第二次握手不能携带数据。为了防止服务器被恶意攻击,如果每次握手都可以携带数据,一些恶意请求在握手过程中会携带大量的垃圾数据包,服务器的解析能力有限。更频繁地,会发生崩溃。3.3、四次挥手四次挥手的目的是关闭一个连接。一开始,双方都处于ESTABLISHED状态。如果客户端先发起关闭请求。四次挥手的过程如下:第一次挥手:客户端发送FIN报文,报文中指定一个序号。此时客户端处于FIN_WAIT1状态。即发送一个连接释放段(FIN=1,序号seq=u),停止发送数据,主动关闭TCP连接,进入FIN_WAIT1(终止等待1)状态,等待服务器的确认。第二次挥手:服务端收到FIN后,会发送ACK报文,将客户端的序号值+1作为ACK报文的序号值,表示收到客户端的报文。此时,服务器处于CLOSE_WAIT状态。即服务器收到连接释放报文段后,发送确认报文段(ACK=1,确认号ack=u+1,序号seq=v),服务器进入CLOSE_WAIT(关闭等待)状态.此时,TCP处于半关闭状态,客户端到服务器的连接被释放。客户端收到服务器的确认后,进入FIN_WAIT2(终止等待2)状态,等待服务器发送的连接释放报文段。第三次挥手:如果服务器端也想断开连接,就发送一个FIN报文,并指定一个序号,和客户端的第一次挥手一样。此时服务器处于LAST_ACK状态。即服务器无数据发送给客户端,服务器发送连接释放报文段(FIN=1,ACK=1,序号seq=w,确认号ack=u+1),服务器进入LAST_ACK(finalconfirmation)状态,等待客户端确认。第四次挥手:客户端收到FIN后,同样发送ACK报文作为回应,将服务器的序号值+1作为自己ACK报文的序号值。此时客户端处于TIME_WAIT状态。需要一段时间才能保证服务器在收到自己的ACK报文后会进入CLOSED状态。服务器收到ACK报文后,会关闭连接,处于CLOSED状态。即客户端收到服务器的连接释放报文段后,发送确认报文段(ACK=1,seq=u+1,ack=w+1),客户端进入TIME_WAIT(时间等待)状态。此时TCP还没有被释放,经过时间等待定时器设置的时间2MSL后客户端进入CLOSED状态。收到FIN仅意味着该方向没有数据流。客户端主动关机进入TIME_WAIT是正常的。服务器通常是被动关机,不会进入TIME_WAIT状态。3.4、TCP/IP协议族TCP(TransmissionControlProtocol)和IP(InternetProtocol)是最早定义的两个核心协议,所以统称为TCP/IP协议族TCP是一种面向连接的通信协议,建立通过三向握手连接,当通信完成时,应该移除连接。由于TCP是面向连接的,它只能用于端到端的通信。TCP提供的是一种可靠的数据流服务,利用“肯定确认重传”技术来实现传输的可靠性。TCP还使用一种称为“滑动窗口”的方法进行流量控制。所谓窗口,其实代表的是接收能力,用来限制发送端的发送速度。TCP是一种传输控制协议,提供面向连接的、基于字节流的、可靠的数据传输服务。它只能进行一对一的通信。标头最小为20个字节,最大为60个字节。适用于需要可靠传输的应用场合。比如文件传输、收发邮件等场景。UDP是一种用户数据协议,提供无连接的、基于消息的数据传输服务,不保证数据传输的可靠性。支持一对一、一对多、多对多等多种交互通信方式,头部开销小,仅8字节,适合实时应用,如视频会议、直播等.4.TCP可靠传输TCP如何保证可靠传输是面试中经常被问到的问题。回答时,您必须确保自己有条理。先讲解主要方法,然后逐点扩大广度!应用程序数据被分割成TCP认为最适合发送的块。TCP对发送的每个数据包进行编号,接收方对数据包进行排序并将排序后的数据传输给应用层。校验和:TCP将维护其标头和数据的校验和。这是一个端到端的校验和,用于检测传输中数据的任何变化。如果接收到的数据段的校验和有误,TCP将丢弃该数据段并且不确认接收到该数据段。TCP的接收端丢弃重复数据。流量控制:TCP连接的每一方都有固定大小的缓冲区空间,TCP的接收端只允许发送端发送接收端缓冲区可以接受的数据。当接收方来不及处理发送方的数据时,它可以提示发送方降低发送速率以防止丢包。TCP使用的流量控制协议是一个可变大小的滑动窗口协议。(TCP使用滑动窗口实现流量控制)拥塞控制:当网络拥塞时,减少数据的发送。ARQ协议:也是为了实现可靠传输。它的基本原理是每发送一个数据包就停止发送,等待对方的确认。收到确认后发送下一个数据包。超时重传:当TCP发送一个报文段时,它启动一个定时器并等待目的地确认收到报文段。如果不能及时收到确认,将重新发送该段。4.1.重传机制TCP会使用重传机制来解决丢包的情况。以下是几种常见的重传机制:超时重传、快速重传、SACKD-SACK超时重传重传机制的方法之一是在发送数据时设置一个定时器。当超过规定的时间,没有收到对方的ACK确认响应报文后,就会重新发送数据,也就是我们常说的超时重传。超时触发重传的问题是超时时间可能比较长。因此,可以使用“快速重传”机制来解决等待超时重传的时间。FastRetransmit快速重传(FastRetransmit)机制,它不是时间驱动的,而是数据驱动的重传。快速重传的工作方式是当收到三个相同的ACK报文时,会在设备过期之前,重传丢失的段。快速重传机制只解决了一个问题,就是超时问题,但是它还面临另一个问题。即重传的时候,是重传之前的,还是重传所有的问题。为了解决不知道应该重传哪些TCP数据包的问题,??就有了SACK方法。SACK还有一种实现重传机制的方式叫做:SACK(SelectiveAcknowledgment选择性确认)。这个方法需要在TCP头的“option”字段中添加一个SACK的东西,可以把缓存的map发送给发送方,让发送方知道哪些数据已经收到,哪些数据还没有收到。了解此信息后,您可以仅重传丢失的数据。D-sackDuplicateSACK,又称D-SACK,主要是用SACK告诉“发送方”哪些数据被重复接收了。4.2.滑动窗口和流量控制TCP使用滑动窗口来实现流量控制。流量控制就是控制发送方的发送速率,保证接收方有时间接收。接收方发送的确认消息中的窗口字段可以用来控制发送方的窗口大小,从而影响发送方的发送速率。将窗口字段设置为0意味着发送方不能发送数据。4.3.拥塞控制在一定时间内,如果网络中对某种资源的需求超过了该资源所能提供的可用部分==,网络的性能就会恶化。这种情况称为拥塞。拥塞控制是为了防止过多的数据被注入网络,使网络中的路由器或链路不至于过载。拥塞控制的前提是网络能够承受现有的网络负载。对于拥塞控制,TCP发送方维护一个称为拥塞窗口(cwnd)的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,动态变化。发送方将其发送窗口设置为拥塞窗口和接收方接收窗口中较小的一个。TCP拥塞控制使用四种算法,即慢启动、拥塞避免、快速重传和快速恢复。在网络层,路由器也可以采取适当的丢包策略(如主动队列管理AQM)来减少网络拥塞。慢启动:慢启动算法的思想是当主机开始发送数据时,如果立即向网络注入大量的数据字节,可能会造成网络拥塞,因为网络的合规性不还为人所知。经验表明,较好的方法是先检测,即发送窗口由小到大逐渐增大,即拥塞窗口的值由小到大逐渐增大。cwnd的初始值为1,每传播一轮cwnd翻倍。拥塞避免:从慢启动可以看出,cwnd可以增长得比较快,但不能一直无限增长。需要一定的限制。TCP使用变量ssthresh。当cwnd超过这个值时,慢启动过程结束,进入拥塞避免阶段。拥塞避免的主要思想是加性增加,即让cwnd的值线性增加,cwnd的值随RTT线性增加,避免增长过快造成网络拥塞,慢慢增加到最优网络的价值。快速重传和快速恢复:在TCP/IP中,快速重传和恢复(FRR)是一种拥塞控制算法,可以快速恢复丢失的数据包。如果没有FRR,如果数据包丢失,TCP将使用计时器要求传输暂停。在此暂停期间,不会发送新的或重复的数据包。使用FRR,如果接收方接收到一个乱序的数据段,它会立即向发送方发送一个重复的确认。如果发送方收到三个重复的确认,则认为确认指示的数据段丢失,并立即重传丢失的数据段。使用FRR,不会因重传所需的暂停而造成延迟。 快速重传和恢复(FRR)在有个别数据包丢失时最有效。当多个数据包在短时间内丢失时,它不会非常有效地工作。在计算机网络的末端,涉及的知识越来越复杂。我会加紧更新【访谈系列】文章。希望各位兄弟姐妹可以点开再看一遍。欢迎继续关注!