网络协议
文章平均质量分 89
tyler_download
这个作者很懒,什么都没留下…
展开
-
java实现HTTP协议:POST协议代码实现
本节我们使用代码实现HTTP的POST协议流程。任何HTTP服务器都会支持客户端将文件上传,该功能的实现往往要走POST协议流程。为了使用代码实现该协议,首先需要一个目的HTTP服务器,我选择iPhone版本的福昕pdf阅读器,它支持通过POST协议将文件从电脑上传到手机,在打开其上传功能后,在电脑输入相应网址就能看到如下画面:点击”选择文件“按钮,然后选择要上传的文件,最后点击"upload"按钮,那么浏览器就会执行POST协议实现数据上传。我们先通过抓包的方式了解POST协议数据包的结构,在执行文件原创 2020-06-16 10:26:59 · 5229 阅读 · 0 评论 -
Java实现HTTP:回应数据包头格式详解
本节我们看看服务器返回给客户端的数据包头有什么特点。在HTTP1.1中有9种数据包头字段需要了解和掌握。第一个叫Accept-Ranges,他告诉客户端服务器是否处理了包含Range请求的请求数据包。该字段以Accept-Range: bytes的形式出现,在客户端向服务器提交数据时,它可能只提交从某个位置起的部分数据,这些数据在请求数据包中以Range字段来标明,如果服务器支持这种局部数据上传模式,那么他就会返回Accept-Range: x bytes表示成功接收客户端发来的数据,如果不支持它就会以Ac原创 2020-06-10 17:53:08 · 1319 阅读 · 0 评论 -
Java实现HTTP:HTTP数据包头部格式解读1
HTTP协议的大部分功能其实通过其协议包头来实现。因为HTTP协议包头作用如此重要,因此需要单独列出一节来详细讲解。协议包头大体上分为4类,分别为通用包头,请求包头,回复包头,和实体包头。先看看通用包头的主要作用。第一就是缓存控制,在协议包头中存有很多类型的指令,这些指令用于控制发送数据的设备执行指定操作,这里我们举出关于缓存指令的集中常见情况来说明:缓存控制指令HTTP消息类型具体描述no-cache在请求和回复数据包中使用当头部存在该指令时,他要求接收数据包的设备将后续接收原创 2020-05-30 11:09:54 · 657 阅读 · 0 评论 -
java实现HTTP协议:HTTP协议的状态码解读
当客户端把请求发送给服务器后,对方会根据处理结果返回一系列HTTP数据包。其中第一行就用给定格式表明服务器对请求处理的结果。第一行包括三部分信息,第一部分是一个数值,也叫状态码,用来表明请求是否成功,第二部分是对状态码的字符串解读,用于说明状态码表示的含义,第三部分就是协议的版本。第一部分的数值其实是用于机器解读,因为机器适用于解读数值。第二部分字符串其实是为了方便与人来解读。状态码跟我们前面描述的FTP协议一样拥有给定形式,它由三位数字组成,其中第一位数字的作用最为重要,它用于表达状态的分类,第二和第三原创 2020-05-25 12:05:38 · 470 阅读 · 0 评论 -
使用java实现HTTP的GET请求
在前几节我们详细讲解了http协议的相关信息,基于“知行合一”的原则,只有通过具体动手实践才有可能检验知识点被我们真正掌握,本节我们就使用代码实现http的get请求。首先需要一个http服务器,基于简单原则,我使用了在手机上的福昕pdf阅读器iPhone版,安卓版效用一样,它自身附带了小型http服务器,用于将文档从电脑传给手机,打开该App,在菜单中选择Wi-Fi,点击“允许文件传输”即可启动http服务器,然后在浏览器中输入“http://192.168.2.127:8888",其中192.168.原创 2020-05-12 11:33:03 · 13879 阅读 · 0 评论 -
java开发HTTP协议:HTTP协议的方法详解
如图所示,HTTP请求数据包第一行第一个单词具有重要意义:第一行第一个单词是"GET",客户端会根据对服务器的请求来指定该单词,因此第一行第一个单词被称为HTTP协议的方法。客户端发送给服务器的请求数据包,第一个单词永远作为该请求的“方法”。通常情况下,客户端通知服务器采取某种操作并将操作的结果返回给它都被称为命令,只有在HTTP协议下被称为方法,因此HTTP协议的方法与其他协议所说的命令并没...原创 2020-05-05 11:24:52 · 806 阅读 · 0 评论 -
Java实现HTTP协议:数据包格式概览
我们看看http协议的数据包格式,首先可以使用wireshark抓包,由于http协议使用80端口,因此可以在wiresharks中使用过滤条件tcp.prot==80,然后用浏览器打开一个页面,在wireshark里会看到这样的抓包:双击打开会看到如下内容,这就是http协议的主要内容和结构:下面我们对其内容进行详细解读。HTTP数据包遵守以下基本格式:<起始行><...原创 2020-04-18 11:02:57 · 925 阅读 · 0 评论 -
HTTP协议原理及java实现:数据的基本传输模式
zu说到基于TCP协议的上层协议,绝对绕不开的是HTTP协议,在其设计之初,设计者绝对想不到该协议具备的灵活性能够让其成为最广泛使用的TCP上层协议,在我看来HTTP协议几乎能够取代任何基于TCP的上层协议,如今基于互联网的绝大多数移动应用,他们使用的都是HTTP协议,甚至苹果专用的流媒体传输协议HLS,使用的也是HTTP协议,同时现在非常流行的所谓小程序,它们也要基于HTTP协议实现客户端与服务...原创 2020-04-08 18:41:58 · 1014 阅读 · 0 评论 -
java代码实现FTP协议
前几节我们完成了ftp协议的主要讲解,同时使用wireshark抓包了解ftp数据协议包的特征,本节我们使用代码完成ftp协议,代码将模仿ftp客户端,它与服务器建立连接后,使用用户名和密码登陆服务器,然后获得服务器的当前目录内容,继而通过数据连接获取服务器推送目录具体信息,最后客户端关闭,下面我们看看具体的代码实现,首先在工程目录下新建名为FTPClient的类,相关实现如下:package ...原创 2020-02-29 17:44:05 · 2842 阅读 · 1 评论 -
java实现FTP协议:wireshark抓包解析
本节我们看看ftp协议的数据包格式,同时使用代码加以实现。首先我们现在机器上安装ftp服务器,我在自己的机器上安装了QuickFTP Server,它是我随便找来的一款Mac ftp服务器,如下图所示,我将连接端口设置为2100,同时设置了用户名和密码,如此我们就可以通过抓包的方式了解协议的数据包格式:然后打开wireshark,在过滤条件中输入tcp.port==2100,接着开始监听,如此...原创 2020-02-20 17:22:57 · 2011 阅读 · 0 评论 -
FTP协议数据包命令含义详解
本节我们掌握FTP协议的数据包格式,为编码实现奠定基础。我们先看看控制命令的格式。当用户端通过控制命令通道想服务器端发送数据后,服务器端一定会产生回复。回复主要有三个目的,首先是让客户端确定服务端收到了消息,其次是通知客户端请求是否能被接收,第三通知客户端当前服务器的状态。数据包格式的组成特点是数字与文本信息相混合。服务器返回给客户端的数据包中一定包含回复码,该数值用来通知客户端数据包的格式和内...原创 2020-02-12 21:09:31 · 1578 阅读 · 0 评论 -
java实现FTP协议:数据传输模型和相关命令说明
上文说过,一旦FTP数据发送双方建立控制命令通道和数据传输通道后,双方就可以发送数据。在数据传输中,FTP协议又规定了三种模式,分别是流模式,块模式和压缩模式。流模式其实就是简单的将要传输的数据比特以一种连续的非结构化的方式在TCP协议的帮助下发送给对方,这里它就是一段数据,不存在包头或字段这类有关数据组织结构的信息。由于被传输的信息是裸数据,没有任何结构化组织,因此发送的准确性完全依赖于传输方...原创 2020-01-21 16:51:13 · 1381 阅读 · 0 评论 -
FTP:构建在TCP协议之上的文件传输协议
在前几节我们辛苦完成了TCP协议的基本设计,我们的代码当然无法达到工业级要求,但是基本将TCP协议的要点表达出来,是一个”基本可用版本“。TCP协议类似于一条货轮,负责把货物也就是上层数据从一端稳定的运输到另一端,我们既然已经有了货轮,如果不让他来运货,那么其作用就难以体现,从本节开始我将从基于TCP之上的协议入手,理解它们的设计原理,并掌握上层协议如何应用TCP实现自己的数据传输目的。我们首先...原创 2020-01-07 11:38:23 · 2842 阅读 · 0 评论 -
java从零开发TCPIP协议:实现TCP数据的收发机制
本节我们在上一节基础上进一步完成TCP协议的收发机制。上一节我们已经实现了向服务器方发送一个字符,本节我们要实现连续发送多个字符,并且能正常接收数据功能,完成了这些功能后,我们就可以基于此去开发其他构建在TCP之上的其他协议。为了保证数据能正确的连续收发,本节的设计思路是使用一个队列将发送的数据存储起来,然后将数据包发送,只有等待收到对方回发的ack后,我们才将数据从队列中删除,如果数据包一直没...原创 2019-12-17 10:56:50 · 1042 阅读 · 0 评论 -
java开发TCPIP协议:实现TCP单向裸数据发送
前面我们花费大量篇幅完成了TCP协议各种细节的讲解,从中我们能体会到该协议的复杂和烦琐。因此要想从零实现工业级鲁棒性的TCP数据传输协议几乎不可能,因此我们在实现过程中必须尽可能简化,就像老子说的天下难事必作于易,天下大事必作于细,因此我们在实现这么复杂的协议系统时必须从最简单的情况入手,然后一点点增加其骨架和血肉的丰富性。本节我们先实现一次单向数据传输,我们将开放一个基于TCP协议的客户端,使...原创 2019-11-08 11:35:16 · 1063 阅读 · 0 评论 -
TCP窗口调整与数据流控制以及病态窗口症状
TCP协议主要依赖不断调整窗口大小来保证数据收发吞吐率。在三次握手时,客户端会告诉服务器自己一次能接收数据量的大小,这就对应客户端的接收窗口以及服务器的发送端口。同理服务器也会告知客户端它一次能接收的数据量,这就成为客户端的发送窗口以及服务器端的接收窗口。TCP数据发送的灵活之处在于,发送窗口或接收窗口可以根据数据收发的情况不断调整。我们看一种具体情况,假设服务器一次能接收360字节,当客户端把...原创 2019-10-19 17:15:04 · 1302 阅读 · 0 评论 -
详解TCP数据包中SYN,ACK字段与数据发送的关联
在TCP协议中,为了确保数据能稳定发送,协议使用数据包中的syn,ack两个字段来监控数据是否正确发生和接收,本节我们看看这两个字段如何保证数据的平稳传输。假设客户端和服务器通过三次握手建立了连接,然后双方准备互相发生数据。假设握手时客户端将自己的syn字段设置为0,而服务器将自己的syn字段设置为240,于是当服务器收到客户端的SYN包后,在返回的ACK+SYN数据包中,它附带的ack字段就会...原创 2019-09-25 16:36:13 · 5865 阅读 · 0 评论 -
详解TCP协议数据发送中需要关注的细节
TCP数据传输一个特点是,协议层在发送数据时不会关心数据形成的逻辑结构,不管上层协议如何组织数据,一旦数据抵达TCP协议层后,他们只会被当做数据流对待。TCP协议层在接收到上层协议传来数据时,它会将数据缓存在内存中,等到合适时机在选取一部分数据发送出去。这种把数据缓存然后再发送的方式在传输文件时不会有问题,但在需要实时反馈的应用情景下就会出现严重问题。例如Telnet协议,也就是我们常用的远程登...原创 2019-10-08 15:55:57 · 865 阅读 · 0 评论 -
TFTP:简单文本传输协议的数据包格式解析以及文件读取代码实现
本节我们看看TFTP数据包的组装方式,为我们代码实现该协议奠定基础。TFTP协议总共有5中不同数据包,分别对应读请求,写请求,数据块,接收回应(ACK),以及错误。前两种数据包格式一样,只不过某些值域设置有差别,剩下的三种数据包格式各不相同。但无论哪一种数据包,他们都包含一个值域叫操作码,用来定义该数据包属于那种类型。我们先看读请求和写请求数据包的格式,首先是2字节表示操作码,它用来表示当前数据...原创 2019-05-31 10:03:49 · 2984 阅读 · 1 评论 -
从0到1用java再造tcpip协议栈:架构重建,完整实现ping应用
在原先代码设计中,我们为了方便,喜欢在一个模块中组织数据包的协议头,然后将要发送的数据融合在一起,并调用网卡将数据发送出去,这种偷懒的做法将多种逻辑融合在一起。这种做法一旦遇到复杂的数据发送需求时,系统逻辑的复杂性会呈现出爆炸性的增长,最后超出我们的控制范围。为了实现体系的层次化,将各种功能剥离成单独模块,实现系统的可理解性,我将体系结构改动为以下模式:从上图看,所有的应用实例,也就是调用网...原创 2019-01-25 10:42:29 · 1079 阅读 · 0 评论 -
详解TCP的重置功能和实现连接结束功能
上一节我们完成了TCP三次握手原则,当双方通过三次握手交换了各自用于传递信息的参数后,双方进入数据分发模式,在TCP协议上说双方都进入了ESTABLISHED状态。基于早期质量低下的数据传输网络,连接建立只不过是开始,在通讯过程中保持稳定和通畅是TCP协议的重要内容。由于TCP协议目的是保持长时间数据传输的稳定,因此它必须有效应对在连接过程中出现的突然中断情况。突然中断最常见的叫"半开“过程,也...原创 2019-09-17 17:23:16 · 3309 阅读 · 2 评论 -
TCP协议数据传输的基本机制:滑动窗口运行过程详解
TCP协议为了尽可能保证数据传输的可靠性,因此数据的传输过程就比较复杂和烦琐。TCP为了保证数据传输速率,它需要一次尽可能多的传送数据,但数据一次发送太多出错的可能性也大,因此TCP通过一套机制来动态调整每次数据的发送量,这套机制就是我们前面提到过的滑动窗口。同时在上一节中,我们构造TCP数据包头时需要设置一个option叫maximun segment size,这个数据结构决定了无论当前滑动窗...原创 2019-08-21 18:16:09 · 1502 阅读 · 0 评论 -
DHCP:实现基于UDP的主机动态配置协议
主机动态配置协议是在无线互联时代,我们“日用而不知”的幕后英雄。试想你拿着手机,连接上wifi后就可以上网,如果没有改协议的存在,我们估计没有那么轻松自如就能惬意的在指尖冲浪。该协议的做大作用是动态的为加入网络的设备分配IP地址,在该协议出现前,IP地址的分配基于静态模式,你把设备的mac地址手动在路由器设置,然后路由器自动生成一个IP与你的mac地址绑定起来。这种应用在有线网络时代可以适用,但...原创 2019-03-08 08:29:09 · 1687 阅读 · 0 评论 -
DHCP:主机动态配置协议过流解析和数据包格式说明
本节,我们使用代码实现主机配置协议。对协议实现而言,一是要理解数据包的交互流程,二是要了解数据包的结构,因此我们首先抓取DHCP协议的数据包,先了解它的大致结构。首先启动wireshark,然后输入过滤条件为:bootp.option.type == 53 。然后找到DHCP协议配置地方,在我的mac机器上,情景如下:然后点击按钮"DHCP续租”,在wireshark上可以捕捉到数据包:...原创 2019-03-14 16:43:25 · 541 阅读 · 0 评论 -
ICMP timestamp 协议原理和实现
大量的设备连接到互联网,而设备之间需要通讯以及相互协作,这就要求不同设备之间需要保持时钟同步。然而无论是多么精准的时钟,一旦运行久了后,它指示的时间与真实时间会产生偏差,在假设不同设备启动时时间初始化不同,这就很难保证不同设备之间的时钟频率还能够保持一致。TCP/IP协议在创建时就已经意识到,不同设备间一旦时钟不同频就可能导致相互协作出现问题。于是就想构造出一套协议让不同设备间相互协商,然后确保...原创 2019-02-09 17:56:07 · 6713 阅读 · 0 评论 -
一个有趣的网络程序TraceRoute:记录数据包传送路径上的路由器IP
在大多数操作系统上都附带一个网络程序叫TraceRoute,它的作用是追踪数据包发送到指定对象前,在传送路径上经过了几个路由器转发,下图是用TraceRoute程序追踪从我这台主机发送数据包到百度服务器时所经过的各个路由器的ip:其中14.215.177.38是域名www.baidu.com对应的服务器ip,从显示上看,数据包从我当前电脑发出,经过7个路由器后才能到达百度服务器,本节我们就看看...原创 2019-02-21 18:13:11 · 1215 阅读 · 0 评论 -
从0到1用java再造tcpip协议栈:基于ICMP echo协议的ping应用原理
如果你发现突然上不了网时,技术小白最常用的手段是重启一下,而有点技术范的人会打开控制台,然后输入:ping www.baidu.com然后观察控制台是否有相应的数据包信息显示。ping功能是我在机器上不了网时最常用的命令,它的作用是用于甄别到底是我要访问的网站挂了,还是网络出了问题,如果我连续ping几个对象,发现没有相应的回复数据包,那么我就知道我的网络出了问题,本节我们就看看如何从代码上...原创 2019-01-11 16:53:44 · 619 阅读 · 0 评论 -
从0到1用java再造tcpip协议栈:ICMP协议的原理和实现
绝大多数TCPIP传输协议基于IP寻址协议,然后建造在IP之上的TCP和UDP两种协议用于控制数据包的传输。问题在于这些协议只关注数据传输,在传输过程中如果出现错误信息,或者是网络出现某种异常情况需要数据发送双方做一些控制操作时,我们就需要在这些协议的控制范围之外传递一些有关数据发送的控制信息,这些数据的发送就必须依赖于控制数据报协议,也就是ICMP协议。ICMP协议在保证数据的准确发送上发挥了...原创 2018-12-22 17:18:45 · 1102 阅读 · 0 评论 -
从0到1用java再造tcpip协议栈:使用责任链模式实现ICMP错误数据报解析
上一节我们讲述了ICMP协议的数据格式,说到了ICMP数据报包含两种类型的信息:错误消息和控制消息。同时我们详细解析了包含错误消息时的数据格式,本节我们使用代码来实现ICMP错误数据报的解析。上图显示的是ICMP数据报包含错误消息时的格式。它一个特点是底层数据格式需要根据上头type和code两个字段指定,这两个字段不同数值的组合对应底层不同数据结构,由于type有125种取值,而对应固定的t...原创 2018-12-28 07:26:57 · 477 阅读 · 1 评论 -
从0到1用java再造tcpip协议栈:实现ARP协议层
经过前两节的准备,我们完成了数据链路层,已经具备了数据包接收和发送的基础设施,本机我们在此基础上实现上层协议,我们首先从实现ARP协议开始。先简单认识一下ARP协议,ARP是一种寻址协议,它要找寻目标的物理地址,连接在互联网上的设备有两种地址,一种叫IP,也就是我们常见的192.168.2.1这类地址,另一种叫物理地址,例如我们电脑上的mac地址。为何要使用两种地址呢?这类似与个人的名字与身份证...原创 2018-12-13 17:55:51 · 974 阅读 · 0 评论 -
DHCP,主机动态配置协议的代码实现第一步:实现设备请求和服务器应答
本节开始,我们代码实现DHCP的协议流程。其本质上是在相应的阶段,构造相应的数据包进行发送和接收,总体而言,DHCP数据包的格式如下:它最复杂的其实是填写options字段,该字段种类及其繁杂,我们根据不同协议的不同阶段去搞清楚options字段的内容。根据我们前面描述,DHCP协议启动时,第一步是客户端在子网内广播dhcp discover消息,然后子网内相应的dhcp服务器回发dhcp o...原创 2019-03-22 09:18:57 · 1112 阅读 · 1 评论 -
DHCP,代码实现主机动态配置协议IP租用请求和应答
我们在上一节中完成了客户端请求和服务器应答的第一个步骤。客户端发出DHCP_DISCOVER消息,局域网内的所有DHCP服务器发出DHCP_OFFER消息,在该消息中包含一个特殊字段叫Your_IP_Address,这是服务器分配给客户端的IP地址,如下图:客户端可能会同时受到多个DHCP服务器发送的回应,然后它从中选择一个服务器发送过来的IP地址,并构造一个DHCP_REQUEST发送给对方...原创 2019-04-02 11:51:54 · 781 阅读 · 0 评论 -
代码实现TCP三次握手:基本数据结构说明
从本节开始,我们用代码实现TCP的三次握手流程,首先我们通过wireshark抓包,看看相关数据包的基本机构。首先打开wireshark,然后用浏览器打开一个网页,接着在wireshark过滤框输入:tcp.port==80,这时我们会把http协议发送的数据包过滤出来,从中就可以看到三次握手对应的数据包,如下图所示:从当前选中的那行往下三行我们看到数据包SYN, SYN+ACK,ACK,这三...原创 2019-07-27 17:40:24 · 1375 阅读 · 1 评论 -
TCP三次握手详解:传输控制块TCB以及积极和消极的连接建立方式
TCP协议目的是为了保证数据能在两端准确连续的流动,可以想象两个建立起TCP通道的设备就如同接起了一根水管,数据就是水管中的水由一头流向另一头。然而TCP为了能让一个设备连接多根“水管”,让一个设备能同时与多个设备交互信息,它必须要保证不同水管之间不会产生串联或相互影响,一根水管中的水绝不能流入另一根水管,要保证这样的效果,TCP协议使用socket数据结构来实现不同设备之间的连接。socket...原创 2019-07-23 17:37:23 · 5218 阅读 · 2 评论 -
数据传输的主心骨,传输控制协议TCP:TCP基本概念和滑动窗口机制介绍
更多技术信息,包括操作系统,编译器,面试算法,机器学习,人工智能,请关照我的公众号:原创 2019-06-25 11:17:23 · 306 阅读 · 3 评论 -
TFTP:实现简单文本传输协议的上传功能
上一节我们开发的客户端能成功的从服务器端下载文件,本节我们完成相反功能,实现客户端向服务器端上传文件。文件上传与下载非常相似,首先我们向服务器发送一个写请求,相应数据包的格式与读请求类似,只不过option code对应的值从1变成2,同时在数据包中添加了要上传的文件名,我们首先在tftp客户端通过connect连接到服务器后,通过如下命令上传文件:put 1.pdf然后我们在服务器端通过w...原创 2019-06-11 12:00:43 · 738 阅读 · 0 评论 -
java开发TCPIP:TFTP,简单文本传输协议的基本原理
随着互联网发展,文件传输效率越来越快,相应的传输协议也越来越复杂。早年有很多文件传输协议如今已经很少再用,所谓老兵不死,只是慢慢凋零。这些协议尽管现在使用不多,但它们的设计思想依然值得我们好好研究和掌握。例如FTP以及它的UDP版本TFTP,它们实现文件传输的协议设计思想依然非常值得研究,它对我们设计新协议依然很有启发性。本节开始,我们研究TFTP协议的原理以及相关代码实现。TFTP原名叫Tr...原创 2019-05-24 16:10:20 · 864 阅读 · 3 评论 -
java构建TCP/IP协议:代码实现DNS解析协议
本节,我们基于上一节理论的基础上,用代码实现DNS数据包的发送和解析。这里有两点需要重复,一是我们将使用DNS的递归式传输模式,也就是消息的发送如下图:也就是我们将在数据包中的特定数据段内设置标志位,要求第一台域名解析服务器帮我们实现所有的查询流程,然后把最终结果返回给我们,这样我们可以省却多种数据交互和解析流程,一般而言第一台域名解析服务器都是路由器。第二个值得我们了解的要点是DNS数据包...原创 2019-05-09 15:59:51 · 1897 阅读 · 0 评论 -
java构建TCP/IP协议:DNS,域名解析协议系统的运行流程
DNS协议的运转需要客户端和服务器进行交互。由于服务器端需要存储大量的域名信息,同时每天需要应答海量的解析请求,因此它的设计必须遵循分布式系统。客户端向一台服务器请求解析服务时,对方可能没有相应的域名信息,于是它会向上一层查询,获得拥有给定域名信息的服务器,然后把对应服务器的信息归还给客户端,然后客户端再重新发起请求。我们还需要关注域名信息如何在服务器上存储。在域名服务器上,信息存储有两种方式,...原创 2019-04-23 16:21:06 · 601 阅读 · 0 评论 -
java构建TCP/IP协议:DNS,域名解析协议的基本原理介绍
从本节开始,我们研究和实现一个体系较为复杂的协议,也就是域名解析协议,简写为DNS。该协议几乎也是我们”日用而不知“的幕后英雄,没有它肯定就没有现在的互联网繁荣。当我们在浏览器上输入网址,例如www.baidu.com时,浏览器先通过DNS协议找到与该网址对应的IP地址,然后再使用IP去向服务器获取网页信息。也就是说互联网上的设备其实有两种辨认方法,一种是IP,一种是域名。就如同人的身份证,人有...原创 2019-04-11 17:24:49 · 966 阅读 · 1 评论