【Java面试】网络编程

      最后更新:2022-06-15 18:08:19 手机定位技术交流文章

      网络编程

      文章目录

      • 网络编程
        • 计算机网络系统结构
          • 网络协议是什么?
          • 2.为什么网络协议是层级的?
        • TCP/IP协议家族
          • 1、应用层
          • 2、运输层
          • 3、网络层
          • 4、数据链路层
          • 5、物理层
          • TCP/IP协议家族
        • TCP手三次,手四次
          • 1.TCP消息的标题结构
          • 2、三次握手
          • 3、四次挥手
        • 四、常见面试题
          • 为什么有3次的TCP连接?是2次的吗?
          • 为什么有3次的TCP连接和4次的关闭?
          • 3,为什么需要等待2msL,以便客户端在第四个挥动确认消息后释放TCP连接?
          • 如果连接已经建立,但客户端突然失败了怎么办?
          • 什么是HTTP,HTTP与HTTPS之间的区别
          • 6.一般HTTP状态代码
          • GET和 POST之间的区别
          • 不对称加密和不对称加密是什么?
          • HTTP2是什么
          • Session 、 Cookies 和 Token 之间的主要区别
          • 网上服务是否安全?
          • Servlet接口和Servlet生命周期中的方法是什么?
          • 如果客户端禁止使用 cookies,会否使用该会话?

      计算机网络系统结构

      网络协议是什么?

      为了在计算机网络中顺利交换数据,必须遵守一些既定的规则,例如数据交换的格式、发送响应消息等,这些规则被称为网络协议。

      2.为什么网络协议是层级的?

      • 由于层的独立性,我们可以把大问题分成小问题。
      • 灵活性是好的。 当一个技术层发生变化时,只要层接口关系保持不变,其他层不会受到影响。
        易于实现和维护。
      • 促进标准化工作。 分离后,每个层函数可以相对简单地描述。
      • 网络协议层化弊端: 功能性可以在多个层中出现, 造成额外的成本.

      网络协议层化弊端: 功能性可以在多个层中出现, 造成额外的成本.

      1977年,國際標準化組織(ISO)提出一個標準框架,旨在將所有電腦連接到全世界,稱為Open System Interconnection Basic Reference Model(OSI/RM),也稱為OSI。

      OSI的七层协议架构的概念很明确,理论也较完整,但它既复杂又不实用,TCP/IP系统结构不同,但现在它被广泛使用。TCP/IP是一个四层系统结构,它包含应用层,运输层,网络层和网络接口层(名称“网络层”强调该层的目的是解决不同网络的互连问题),不过从实质上讲,TCP/IP只有三个顶层,因为网络接口层的底部没有具体的内容,因此,在学习计算机网络的原理时,我们经常使用折叠方法。集成OSI和TCP/IP的优点,采用了只有五层协议的系统结构.这样,这个概念既简单又清晰。有时为了方便,下两个层也可以称为网络接口层。

      四级协定、五级协定和七级协定之间的关系如下:

      • TCP/IP是一个四层架构,主要包括应用程序层、传输层、网络层和网络接口层。
      • 五层协议的架构主要包括:应用程序层、传输层、网络层、数据链层和物理层。
      • OSI的七层协议模型主要包括应用层、表示层、对话层、传输层、网络层、数据链层和物理层。

      注:该五层协议架构仅为引入网络原理而设计,但实际应用是TCP/IP四层架构。

      TCP/IP协议家族

      1、应用层

      应用程序层的任务是通过应用程序进程之间的相互作用完成特定的网络应用程序。 应用程序层协议定义了应用程序进程之间的通信和相互作用规则(进程:在主机上运行的程序)。

      不同的网络应用程序需要不同的应用程序层协议。 互联网上有许多层协议,例如域名系统DNS、支持通用网络应用的HTTP协议、支持电子邮件的SMTP协议等等。

      2、运输层

      传输层的主要任务是为两个主机进程之间的通信提供通用数据传输服务。

      运输层主要采用两项协议

      • 传输控制协议-TCP: 提供一种面向连接、可靠的数据传输服务.
      • 用户数据协议-UDP:提供无连接、 effortless数据传输服务(不保证数据传输的可靠性)。

      TCP和UDP协议之间的区别:

      UDP TCP
      是否连接 无连接 面向连接
      是否可靠 不可靠的传输,没有流量控制和拥堵控制 使用流量控制和交通堵塞控制的可靠传输
      连接对象个数 支持单人、单人、多人和多人交互通讯 只能是一对一通信
      传输方式 面向报文 面向字节流
      首部开销 第一个开支很小,只有8字节 最小初始20字节,最大60字节
      场景 适用于实时应用(IP电话、视频会议、现场广播等) 适用于需要可靠传输的应用程序,如文件传输

      每个应用层(TCP/IP参考模型的最高级别)协议通常用于两个传输层协议中的一个:

      在TCP协议上运行的协议:

      • HTTP(Hypertext Transfer Protocol)主要用于一般浏览。
      • HTTPS(HTTP over SSL)是HTTP协议的安全性版本。
      • FTP(File Transfer Protocol)用于文件传输。
      • POP3(Post Office Protocol,版本3,Post Office Protocol)。
      • SMTP(Simple Mail Transfer Protocol)用于发送电子邮件。
      • 电话网(Teletype over the Network)是连接到网络的终端。
      • SSH(Secure Shell)用于加密的安全登陆。

      在UDP协议上运行的协议:

      • BOOTP(Boot Protocol, boot protocol)用于无磁盘设备。
      • NTP(Network Time Protocol)用于网络同步。
      • DHCP(Dynamic Host Configuration Protocol)是一个动态主机配置协议。
        在TCP和UDP协议上运行:

      DNS(域名服务)用于完成地址搜索、邮件转发等。

      3、网络层

      网络层的任务是选择适当的网络间路由和交换点,确保计算机通信数据及时传输.在发送数据时,网络层传输由传输层生成的消息段或用户数据消息包组件和包。在TCP/IP架构中,因为网络层使用IP协议,因此,该分组也称为IP数据报告,简称数据报。

      互联网通过路由器由大量的异构网络相互连接.因特网使用的网络层协议是未连接的IntertPrococol和许多路由选项协议,因此,网络层也被称为网络层或IP层。

      4、数据链路层

      数据链层通常被称为链层,两个主机之间的数据传输总是在单一链上进行,这需要使用专门的链层协议。

      当数据在两个邻接节点之间传输时,数据链层将IP数据信息汇集,将网络层传递到帧中,并传输两个邻接节点之间的链上帧。 每个帧包含数据和必要的控制信息(如同步信息、地址信息、错误控制等)。

      当接收数据时,控制信息允许接收器知道帧从哪个位开始和结束到哪个位。

      典型的网络应用程序通信流程如下:

      在这里插入图片描述

      当发送器在层间传输数据时,每次通过层时都会输入该层的第一个信息,而当接收器在层间传输数据时,它每次通过层时都会删除相应的第一个信息。

      5、物理层

      在物理层上传输的数据单元是位流.

      物理层的功能是实现邻近的计算机节点之间的透明传输,尽量避免特定传输介质和物理设备之间的差异。上面的数据链层不需要考虑网络的特定传输媒体是什么。透明的传输比特流量意味着实际电路传输后,比特流量不会改变。对于传输的位流,这个电路似乎是看不见的。

      TCP/IP协议家族

      在互联网上使用的各种协议中,最重要的和最著名的是TCP/IP协议。现在经常被称作TCP/IP并不一定意味着只有TCP和IP特定的协议,它通常指整个TCP/IP协议家族,由互联网使用。

      在这里插入图片描述

      互联网协议套件Ips是一个网络通信模型。以及整个网络传输协议家族,网络的基本通信架构。它通常被称为TCP/IP协议套件。或TCP/IP协议),简称TCP/IP。由于协议家族的两个核心协议:TCP(传输控制协议)和IP(内部协议),这是家庭采用的第一个标准。

      TCP(传输控制协议)和IP(网络协议)是定义的第一个两个核心协议,因此它们通常被称为TCP/IP协议家族。

      TCP手三次,手四次

      CP是一个面向连接的、可靠的、基于字节流的传输层通信协议,需要双方在发送数据之前建立互联。 所谓的“互联”实际上是一个由客户端和服务端子存储的信息,例如IP地址、端口号码等。

      TCP可以被视为处理IP层或以下的包丢失、重复和错误的字节流。 在建立连接的过程中,双方需要交换一些连接参数。

      TCP连接由四个元素组成,分别由两个IP地址和两个端口号码组成。 TCP连接通常分为三个阶段:连接、数据传输和退出。

      当连接建立或终止时,交换消息节只包含TCP头条,没有数据。

      1.TCP消息的标题结构

      TCP消息标题结构:
      在这里插入图片描述
      上面图中的一些行需要突出:

      序列数(英语:Sequence number)是32位元,用于识别从TCP源发送到目的地的字节流,并且在发源者发送数据时被标记。

      (2)确认序列: ack序列需要32位,只有ACK标记位数为1,所以确认序列字段是有效的, ack=seq+1。

      (三)签名位置:总共六个,即URG、ACK、PSH、RST、SYN、FIN等,具有下列具体意义:

      • ACK: 确认序列有效性.
      • FIN: 释放一个连接.
      • PSH:接收器应尽快将此消息提交到应用程序层。
      • RST:重置连接。
      • 苏恩:启动新的连接。
      • URG: 紧急提示有效.

      注意:不要把确认的序列空格与标记位置的空格混淆。

      2、三次握手

      三个握手的本质是确认双方接收和传输数据的能力。

      首先,我让信把信送到另一个人身上,他接受了信,这样他知道我能发信的能力,他能接受信的能力也是可能的。

      然后他把信还给我,如果我收到的话,我就会知道我能发信和他能发信是可能的,他能发信和我能发信是可能的。

      但此时他不知道他的发信能力和我的发信能力是什么,所以我最后一次回来,如果他收到了,他知道他的发信能力和我的发信能力是可能的。

      那是三个手,明白了吗?

      在这里插入图片描述
      第一个握手:客户端向服务器发起连接请求,首先客户端随机生成一个初始序列编号ISN(例如100),发送给服务器的消息字段包含SYN符号位(例如SYN=1),序列编号seq=100。

      第二次握手:收到客户的消息后,发现SYN=1,知道这是连接请求,因此,客户最初的序列编号100被存储,它也可以随机生成服务端的初始序列数(例如300)。然后你向客户发送一个消息,响应消息包含SYN和ACK符号(即SYN=1、ACK=1),序列数 seq=300,和确认数 ack=101(客户端发送的序列数+1)。

      第三个握手:在收到服务器的答复后,客户端发现ACK=1和 ack=101,知道服务器已经收到了序列号100的消息;以及SYN=1,知道服务器同意连接,然后存储服务端的编号300。然后客户端返回消息到服务端,该消息包含ACK符号(ACK=1), ack=301(服务结束序列数+1), seq=101(第一手握时发送的消息占序列数,这个分数从101开始,注意,没有数据的ACK消息不占序列数,因此,第一次正式发送数据后,序列为101。当服务器收到消息时,它发现ACK=1和ack=301,知道客户收到300个序列号的讯息,因此,客户端和服务端通过TCP建立连接。

      3、四次挥手

      四波的目的是关闭一个连接.

      在这里插入图片描述

      例如,客户端初始化了序列编号ISA=100,服务端则初始化了序列编号ISA=300。 在成功的TCP连接后,客户端发送了总数100字节数据,服务器返回总数200字节数据,然后客户端发送 FIN消息。

      第一波:一旦客户的数据转移,客户端向服务器发送连接释放消息(当然,您也可以发送连接释放消息,在数据尚未完成时停止发送数据),释放连接消息包含FIN标记点(FIN=1),序列数seq=1101 (100+1+100,其中一个是序列数,它占有建立连接的时间。应该指出,客户在 FIN 声明发送后不能发送数据,但它也可以正常接收数据;即使它没有数据,FI声明部分也占有序列数。

      第二波:服务端接收客户端的 FIN消息,并响应客户端的确认消息,确认消息包含ACK标记位置(ACK=1),确认编号 ack=1102(客户端 FIN消息序列编号1101+1),序列编号seq=2300(300+200)。此时服务结束处于封闭的等待状态,而不是向客户发送 FIN消息,这种状况将持续一段时间,因为服务端可能仍然没有数据完整.

      第三波:服务终止向客户端发送最终数据(例如50字节)并发送连接释放消息。报告包含FIN和ACK标记位置(FIN=1,ACK=1),确认号和第二波为ack=1102,以及序列号seq=2350(2300+50)。

      第四个手势:客户从服务端口接收 FIN消息,向服务端发送确认消息,确认消息包含ACK标记位置(ACK=1),确认数 ack=2351,和序列数 seq=1102。注意,在发送确认消息后,客户端不会释放TCP连接,相反,TCP连接只能在2MSL之后释放(最长的消息段的寿命为2倍)。一旦服务器收到客户端的确认消息,它立即释放TCP连接。因此服务会比客户端提前终止TCP连接。

      四、常见面试题

      为什么有3次的TCP连接?是2次的吗?

      由于需要考虑在连接时包装丢失的问题,如果只握手2次,如果服务端口发送给客户端的确认消息在第二次握手期间丢失,此时,服务器已编写收据号码(可以理解为服务器已成功连接),客户没有从服务端收到确认消息,因此客户端不知道服务器是否准备好(可以理解的是客户端没有成功连接),在这种情况下,客户不会向服务端口发送数据,它也忽略服务端口发送的数据。

      如果是三次握手,即使你丢失了你的包, 也没什么问题.例如,如果第三个握手客户端发送丢失的确认Ack消息,如果服务端在一定时间内没有收到确认的“缺口”消息,则将再次进行第二次握手,即,服务端将检索SYN声明段落,客户端收到一个重复的消息,并再次向服务器发送一个确认缺口消息。

      为什么有3次的TCP连接和4次的关闭?

      因为只有当客户端和服务端没有发送数据时才能切断TCP。当客户端发送 FIN消息时,它只能确保客户端不会发送任何数据。不知道服务器是否没有数据传输客户端。收到客户端 FIN消息后,服务器只能以确认消息向客户端作出答复,通知客户端我的服务器收到了您的 FIN消息。但服务器上还有一些尚未完成的数据,直到数据到服务结束时才发送到客户端(因此确认声明和Fin声明不会同时发送到客户端,只是我来过这里不止一次。

      3,为什么需要等待2msL,以便客户端在第四个挥动确认消息后释放TCP连接?

      如果第四波被丢失,服务没有收到确认,第三波被重复,所以波长最长的时间是2MSL,所以需要这么长时间才能确认服务已经收到它。

      如果连接已经建立,但客户端突然失败了怎么办?

      TCP有一个实时计时器,如果客户端失败,服务器不能永远等待,白白浪费资源。每次服务器收到客户端的请求,它会重新设置计时器,时间通常定为2小时,如果客户两个小时没有收到任何数据,服务器将发送检测信息,随后,每75秒发送一次消息。如果一行中发送了10个检测消息,但仍没有响应,服务器假设客户端有故障,接着就关闭连接。

      什么是HTTP,HTTP与HTTPS之间的区别

      HTTP是一个在计算机世界两个点之间传输文本、图像、音频、视频和其他超文本数据的惯例和标准。

      区别 HTTP HTTPS
      协议 在TCP上运行,明确传输,客户端和服务器不能互相验证身份 在SSL上运行的SSL(Secure Socket Layer)壳和TCP上运行的SSL,是添加加密和认证机制的HTTP
      端口 80 443
      资源消耗 较少 由于解密处理,更多的CPU和内存资源被消耗
      开销 无需证书 证明书是必需的,通常是从一个证明机构购买的
      加密机制 共享密钥加密和开放密钥加密的混合加密机制
      安全性 由于加密机制,安全性很强

      6.一般HTTP状态代码

      状态码的类别:

      类别 原因短语
      1XX 收到的资料请求正在处理中
      2XX 成功(成功状态代码)请求成功处理
      3XX 重新定位需要额外的操作完成请求
      4XX 客户端错误(客户端错误状态代码)服务器无法处理请求
      5XX 服务器错误(服务器错误状态代码)服务器处理请求错误

      GET和 POST之间的区别

      他说,GET和 POST必须提及HTTP协议,因为浏览器和服务器的交互通过HTTP协议执行,GET和 POST是HTTP协议中的两种方法。

      HTTP被称为HTTP(英语:Hyper Text Transfer Protocol),以确保浏览器与服务器之间的通信。 HTTP是一个客户端与服务器之间的请求响应协议。

      HTTP协议定义了与浏览器和服务器交互的不同方式,有四个基本方法:GET、 POST、PUT和 DELETE。 这些四个方法可以理解为检查、修改、添加和删除服务器资源。

      • GET:从服务器中获取数据,即所谓的检查,只不过是未经修改获取服务器资源。
      • POST: 向服务器提交数据, 包括更新数据, 即更改服务器的数据.
      • PUT: 英语的意思是置换, 即增加新的数据到服务器上, 即增加.
      • 删除:这是删除服务器数据的过程。

      GET和 POST之间的区别:

      • 当浏览器返回时,GET是无害的, POST将再次提交请求。
      • GET生成的URL地址可以被标记,但不能 POST。
      • GET请求将由浏览器缓存, POST则不会,除非手动设置。
      • GET请求只能由url编码, POST则支持多个编码方法。
      • GET请求参数完全存储在浏览器历史记录中, POST参数则不存储。
      • GET请求在URL中传输的参数是有限的长度,而 POST 不是。
        对于参数数据类型,GET只接受 ASCII字符,而 POST没有限制。
      • GET比 POST更不安全,因为参数直接暴露于URL,不能用于传输敏感信息。
      • GET参数通过URL传递, POST在请求体中放置。
      • 关于GET方法的请求,浏览器将http头条和数据一起发送,服务器响应200(返回数据); POST,浏览器首先发送标题,服务器响应100继续,浏览器再次发送数据,服务器响应200 ok(返回数据)。

      不对称加密和不对称加密是什么?

      对称加密:指使用相同的密钥加密和解密,其中最大的问题是密钥发送问题,即如何安全地发送密钥给另一方;

      不对称加密是指使用一对不对称密钥,即公开密钥加密和私钥解密。 加密过程由另一方公开密钥进行,另一方接收加密信息并使用自己的私钥解密。

      由于非对称加密不需要发送私钥去解密,它可以保证安全性;然而,它与对称加密相比很慢。

      HTTP2是什么

      HTTP2可以提高网页的性能。

      在HTTP1中,浏览器限制在相同域名下的请求数目(通常是6个在Chrome下),在请求大量资源时,由于浏览器到达最大请求数目时的队列封锁,剩余资源必须等待当前6个请求完成,然后开始请求。

      HTTP2引入了多路径复制技术,允许所有请求数据只通过一个TCP连接传输。 多路径复制可以绕过浏览器在同一域名下限制请求数的问题,从而提高网页的性能。

      Session 、 Cookies 和 Token 之间的主要区别

      HTTP协议本身是无状态的,无状态的是服务器不能判断用户的身份。

      (一)Cookie是什么

      cookie是一个小文件(关键值格式),由网页服务器存储在用户浏览器上,它包含与用户有关的信息。

      客户端向服务器发起请求,如果服务器需要记录用户的状态,使用响应向客户端浏览器发送一个cookie。客户端浏览器存储Cookie。当浏览器再次请求网站时,浏览器将请求的网站与cookie一起提交给服务器。服务器检查了cookie,用于识别用户。

      什么是会议

      会话取决于cookie的实现。会话是服务器端的对象。

      会议是浏览器和服务器对话的过程,由服务器分配的存储空间。服务器默认设置浏览器在cookie中设置 sessionid,浏览器向服务器请求发送的cookie包含了 sessionid,服务器根据 Sessionid 获取存储在 Session 中的信息,然后确定对话的身份信息。

      cookie 和 សម័យ 之间 的 区别 :

      • 存储位置和安全性:Cookie数据存储在客户端上,安全性差,会话数据存储在服务器上,安全性相对较高;
      • 存储空间:单个Cookie存储的数据不能超过4K,许多浏览器限制每个网站存储最大20个Cookie,没有限制任何សម័យ;
      • 占用服务器资源:会话存储在服务器上一段时间,访问增加时,它占用服务器性能。如果考虑到服务器性能,则应该使用Cookie。

      托克是什么?

      托克的介绍:托克是一个经常向服务器请求数据的客户端,服务器经常到数据库查询和比较用户名和密码,判断用户名和密码是否正确,并给出相应的提示。

      托克的定义:托克是一个由服务端生成的字符串,一张卡片,作为客户的要求,当第一次登录后,服务器生成一个トークン,并将这个トークン返回到客户端,之后,客户只能带这个トークン来请求数据,你不需要再带你的用户名和密码。

      使用托克的目的:托克旨在减轻服务器压力,减少频繁查询数据库,并使服务器更可靠。

      如果前面端使用用户名/密码请求服务端的认证,服务端的认证成功,并返回到前面端的服务端。

      会议与记号之间的区别:

      • 会话机制存在于服务器压力增加、CSF跨站伪造请求攻击、非扩展性等因素;
      • 会话存储在服务器上,トークン存储在客户端上;
      • 托克提供身份验证和授权功能,因为身份验证,托克的安全比សម័យ更好;
      • 该សម័យ存储方法仅适用于运行在同一服务器上的客户端代码和服务端代码,而トークン则适用于项目级的前端分离。

      网上服务是否安全?

      Servlet不是线程安全的,并且多个线程同时读写会导致数据不同步。

      解决办法是尽量不定义名称属性,相反,在 doGet() 和 doPost() 方法中,名称变量应该单独定义。虽然使用同步(name){}项块可以解决这个问题,但它会使线条等待,不是很科学的办法。

      注意:多线性同时读写Servlet类属性可能导致数据不同步,但如果属性同时读写,数据不同步,则不存在问题。

      Servlet接口和Servlet生命周期中的方法是什么?

      在JavaWeb程序中,Servlet主要负责接收用户请求 HTTP ServletRequest,在doGet(),在 doPost()中进行相应的处理,它会响应HTTP ServletResponse反馈给用户。服务器可以设置初始化参数,使用在Servlet内。

      Servlet接口定义了五个方法,其中第一三个与Servlet生命周期有关:

      • void init(ServletConfig config) throws ServletException
      • void service(ServletRequest req, ServletResponse resp) throws ServletException, java.io.IOException
      • void destory()
      • java.lang.String getServletInfo()
      • ServletConfig getServletConfig()

      生命周期:

      • 在Web容器载入Servlet和实际实例后,Servlet生命周期开始,容器运行其init()方法以启动Servlet;
      • 请求到达时调用Servlet的服务()方法。服务()方法将根据请求的doGet或doPost方法调用。
      • 当服务器关闭或项目卸载时,服务器将摧毁Servlet实例,调用Servlet destroy()方法。
      • init方法和destory方法只执行一次,服务方法客户端每次请求服务器执行服务。服务员有时需要调试和摧毁的资源,所以你可以将初始化资源的代码插入init方法中,破坏源代码进入破坏方法,因此,在每次处理客户端请求时,不需要初始化和摧毁资源。

      如果客户端禁止使用 cookies,会否使用该会话?

      不能。

      会议是浏览器和服务器对话的过程,由服务器分配的存储空间。服务器默认设置浏览器在cookie中设置 sessionid,浏览器向服务器请求发送的cookie包含了 sessionid,服务器根据 Sessionid 获取存储在 Session 中的信息,然后确定对话的身份信息。

      如果假设用户在cookie关闭时使用 Session, 则有几种实现方法:

      • 手动通过URL传递セッションID,然后隐藏表格。
      • 以文件、数据库等形式保存会话ID,并在交叉页过程中手动调用它们。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/27429.html

          热门文章

          文章分类