营销型网站建设是什么,网站邮件系统建设招标,深圳市门户网站建设怎么样,小甲虫抖音代运营一、计算机网络#xff08;概述、简介#xff09;
说起网络#xff0c;相信大家都不陌生#xff0c;把分散在不同地点的计算机设备#xff0c;通过传输介质、通信设施和网络通信协议#xff0c;实现资源共享和信息传输的系统#xff0c;我们称之为#xff1a;计算机网…一、计算机网络概述、简介
说起网络相信大家都不陌生把分散在不同地点的计算机设备通过传输介质、通信设施和网络通信协议实现资源共享和信息传输的系统我们称之为计算机网络系统。
计算机网络的最简单的定义是一些互相连接的、自治的计算机的集合。 互连是指计算机之间可以通过有线或无线的方式进行数据通信 自治是指独立的计算机他有自己的硬件和软件可以单独运行使用 集合是指至少需要两台计算机
而网络编程其实就是编写程序使网络上的两个或多个设备如计算机之间进行数据传输。
为了使两个设备之间能进行数据传输必须在它们之间建立通信工具即接口使彼此之间能进行信息交换工具包括两部分
硬件部分实现节点之间的信息互传比如光猫、网线软件部分规定双方能进行通信的约定协议比如 TCP/IP
从软件角度看计算机网络可以分为网络体系结构和网络协议两部分。
二、计算机网络体系结构
通过网络将数据从一台主机发送到另外的主机上其实是一项非常复杂的操作必须仔细地协调网络上的物理特性以及所发送数据的逻辑特征。
计算机网络体系结构其实是计算机网络层次和协议的集合。网络体系结构对计算机网络实现的功能以及网络协议、层次、接口和服务之间的通信进行了约定描述但并不涉及具体的实现。
在网络体系结构中网络设备之间的通信被分解为多个层每一层只与紧挨其上和其下的层对话层与层之间用接口连接接口指的是同一节点内相邻层之间交换信息的连接处也叫服务访问点。
通信的双方必须具有相同的层次层次实现的功能由协议数据单元PDU来描述不同系统中的同一层构成对等层对等层之间通过对等层协议进行通信理解彼此定义好的规则和约定。
将网络进行分层这样即使要修改甚至替换某一层的软件只要层与层之间的接口保持不变就不会影响到其他层。
世界上第一个网络体系结构由 IBM 公司提出之后其他公司也相继提出自己的网络体系结构。为了促进计算机网络的发展国际标准化组织 ISO 在现有网络的基础上提出了不基于具体机型、操作系统或公司的网络体系结构称为开放系统互连参考模型即 OSI/RMOpen System Interconnection Reference Model。
OSI 模型把网络通信的工作分为 7 层分别是应用层、表示层、会话层、传输层、网络层、数据链路层和物理层。 由于 OSI 模型过于庞大、复杂招致了许多批评与此相对美国国防部提出了 TCP/IP 参考模型把网络通信的工作分为 4 层分别是应用层、传输层、网络层、网络接口层简化了 OSI 参考模型。 由于 TCP/IP 参考模型的简单获得了广泛的应用并成为后续网络通信事实上的标准。 如今用的最多的是TCP/IP体系结构现今规模最大的、覆盖全球的、基于TCP/IP的互联网并未使用OSI标准。 TCP/IP体系结构相当于将OSI体系结构的物理层和数据链路层合并为了网络接口层并去掉了会话层和表示层。 TCP/IP在网络层使用的协议是IP协议IP协议的意思是网际协议因此TCP/IP体系结构的网络层称为网际层 各个层级职责描述如下
应用层为 Internet 中的各种网络应用提供服务比如 http、ftp 等服务。传输层也被称为 TCP 层负责在应用进程之间建立端到端的连接和可靠通信它只存在与端节点中传输层涉及两个协议TCP 和 UDP。网络层也称为 IP 层它是整个 TCP/IP 协议栈的核心它的功能是把数据路由到目标网络或主机上。网络接口层TCP/IP 协议对网络接口层没有给出具体的描述对应着 OSI 参考模型网络接口层指的的是物理层和数据链路层的集合。
三、网络协议
了解完网络体系结构后相信我们对网络设备之间的数据传输已经有了初步的认识。计算机之间能够进行相互通信主要是因为它们都共同遵守一定的规则就如同人与人之间能相互交流是因为大家使用了共同的语言文字一样这些规则我们称之为网络协议。 3.1、IP 协议
IP 协议的作用在于把各种数据包准备无误的传递给其他设备其中 IP 地址和 MAC 地址都可以代表设备在网络中的唯一标识。
先说说 IP 地址。
IP 地址又被称为逻辑地址当设备连接上网络时由路由器给设备生成一个在当前网络下唯一的 IP 地址。
同时 IP 地址又分为 IPv4 和 IPv6。
IPv4指的是给每个连接在网络上的主机设备分配一个 32bit 长度的地址用二进制来表示由于 1 个字节等于 8 个 bit因此 IP 地址可以用 4 个字节数表示。例如一个采用二进制形式的 IP 地址11000000 10101000 00000001 01000010这么长的地址处理起来太费劲了为了方便使用IP 地址被写成十进制的形式中间使用符号.分隔不同的字节因此上面的 IP 地址可以用十进制192.168.1.66表示IP 地址的这种表示法叫做点分十进制法这显然比 1 和 0 更容易记住。IPv6由于互联网的蓬勃发展IP 地址的需求量愈来愈大但是网络地址资源有限的使得 IP 的分配越发紧张。为了扩大地址空间通过 IPv6 重新定义地址空间采用 128bit 地址长度每 16 个字节一组分成 8 组十六进制数这就解决了网络地址资源数量不够的问题例如abcd : 1234 : aCA9 : 123 : 4567 : 089 : 0 : 0000。
以windows系统为例可以在 DOS 中输入ipconfig命令获取本机的 IP 地址。
关于 IP 地址的划分也有讲究
127.0.0.1表示回送地址也代表本机地址一般用来测试使用190.168.0.0 – 192.168.255.255表示私有地址属于非注册地址专门为组织内部使用也被称为内网地址
再来说说设备的 MAC 地址。
MAC 地址也叫物理地址、硬件地址由网络设备制造商生产时烧录在网卡的 EPROM 上。 MAC 地址的长度为 48 位6 个字节通常用 12 个十六进制数来表示每 2 个十六进制数之间用冒号隔开如0800200A8C6D就是一个 MAC 地址只要不更改自己的 MAC 地址MAC 地址在全球是唯一的但是可以肉眼得出结论它比 IPv4 地址更难记忆。
既然 Mac 地址也具有唯一性为何不能作为 ip 地址资源呢
理由1IP 地址由网络服务商生成的逻辑地址相对于 Mac 地址而言更容易控制和管理网络设备理由2IP 地址有 IP 池、IP 段的概念能通过 IP 地址来定位用户所在省、市、县域而 Mac 地址是由厂商标识的无法标记用户的位置信息只能标记厂商信息
3.2、TCP 协议
TCP 协议是面向连接的传输层协议每次连接都需要经过 3 个阶段连接建立、数据传送和连接释放即传输数据之前在发送端和接收端建立逻辑连接、然后传输数据、最后断开连接它保证了两台计算机之间可靠无差错的数据传输。
下面我们一起来看看 TCP 协议的报文格式包含了哪些内容 TCP 报文段包括协议首部和数据两部分协议首部的固定部分是 20 个字节头部是固定部分后面是选项部分。
下面是报文段首部各个字段的含义
源端口号以及目的端口号各占 2 个字节端口是传输层和应用层的服务接口用于寻找发送端和接收端的进程一般来讲通过端口号和IP地址可以唯一确定一个 TCP 连接在网络编程中通常被称为一个 socket 接口。序号Seq 序号占 4 个字节。用来标识从 TCP 发送端向 TCP 接收端发送的数据字节流序号发起方发送数据时对此进行标记。确认序号Ack 序号占 4 个字节。包含接受端所期望收到的下一个序号。只有 ACK 标记位为 1 时确认序号字段才有效因此确认序号应该是上次已经成功收到数据字节序号加 1即 Ack Seq 1。数据偏移占 4 个字节用于指出 TCP 首部长度若不存在选项则这个值为 20 字节数据偏移的最大值为 60 字节。保留字段占 6 位暂时可忽略值全为 0。六位标志位值内容含义如下URG(紧急)为1时表明紧急指针字段有效ACK(确认)为1时表明确认号字段有效PSH(推送)为1时接收方应尽快将这个报文段交给应用层RST(复位)为1时表明TCP连接出现故障必须重建连接SYN(同步)在连接建立时用来同步序号FIN(终止)为1时表明发送端数据发送完毕要求释放连接窗口占 2 个字节用于流量控制和拥塞控制表示当前接收缓冲区的大小。校验和占 2 个字节范围包括首部和数据两部分紧急指针指出了紧急数据的末尾在报文段中的位置和 URG 搭配使用选项和填充是可选的默认情况是不选。
向深入的了解 TCP 原理的同学可以看看这篇博客文章。
下面我们要重点说说 TCP 中的三次握手与四次挥手因为这种数据传输模型保证了两台计算机之间可靠无差错的数据传输。
当两个设备之间准备传输时TCP 会建立连接创建连接的阶段需要三次握手过程如下 第一次握手客户端向服务器端发出连接请求等待服务器确认第二次握手服务器端收到请求后,向客户端回送一个确认通知客户端收到了连接请求第三次握手客户端再次向服务器端发送确认信息确认连接 完成以上 3 次握手之后可靠性连接建立完成准备进行数据传输。
当数据传输完毕之后准备释放连接连接的释放需要四次挥手过程如下 第一次挥手客户端向服务器端发出请求切断连接等待服务器确认第二次挥手服务器端收到请求后向客户端回送一个确认信息并同意关闭请求第三次挥手服务器端再次向客户端发出请求切断连接等待客户端确认第四次挥手客户端收到请求后向服务器端回送一个确认信息并同意关闭请求 完成以上 4 次挥手之后连接释放完成。
3.3、UDP 协议
UDP 协议是 TCP/IP 协议簇中面向无连接的传输层协议特点如下
1.传输数据之前源端和终端不建立连接当它想传送时就简单地去抓取来自应用程序的数据并尽可能快地把它扔到网络上。在发送端UDP 传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制在接收端UDP 把每个消息段放在队列中应用程序每次从队列中读一个消息段。2.由于传输数据不建立连接因此也就不需要维护连接状态包括收发状态等因此一台服务器可同时向多个客户端传输相同的消息。3.UDP 信息包的标题很短只有 8 个字节相对于 TCP 的 20 个字节信息包的额外开销很小。4.吞吐量不受拥挤控制算法的调节只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。5.UDP 使用尽量最大努力交付即不保证可靠交付因此主机不需要维持复杂的链接状态表6.UDP 是面向报文的。发送方的 UDP 对应用程序交下来的报文在添加首部后就向下交付给 IP 层。既不拆分也不合并而是保留这些报文的边界因此应用程序需要选择合适的报文大小。
下面我们一起来看看 UDP 协议的报文格式包含了哪些内容 UDP 协议由两部分组成首部和数据。其中首部仅有 8 个字节包括源端口和目的端口、长度UDP用于数据报的长度、校验和。
UDP 协议没有像 TCP 协议那样的三次握手、四次挥手操作数据传输模型非常简单它只管发和收总结下来两者具体的区别如下
1.TCP 基于连接UDP 是无连接的2.对系统资源的要求TCP 较多UDP 较少3.UDP 程序结构较简单4.TCP 是流模式而 UDP 是数据报模式5.TCP 保证数据正确性而 UDP 可能丢包TCP 保证数据顺序而 UDP 不保证6.TCP 协议由于更安全、更可靠应用场景比较广泛例如上传文件、下载文件、浏览网页。7.UDP 协议虽然不可靠但是传输效率更高实际应用场景也比较多例如视频会议、在线游戏、语音聊天等8.UDP 协议要求包小于 64KTCP 没有限定
3.4、HTTP 协议
HTTP 协议也俗称超文本传输协议它是基于 TCP 协议之上的请求/响应式的应用层协议使用 TCP/IP 来传输数据也是互联网上应用最为广泛的一种网络协议。
HTTP 协议同时也是 Web 浏览器和 Web 服务器之间通信的标准协议。HTTP 指定客户端与服务器如何建立连接、客户端如何从服务器请求数据服务器如何响应请求以及最后如何关闭连接。
对于从客户端到服务器的每一个请求都有 4 个步骤
1.默认情况下客户端在端口 80 打开与服务器的一个 TCP 连接不过 URL 中还可以指定其他端口。2.客户端向服务器发送消息请求指定路径上的资源。这个资源包括一个首部可选地取决于请求的性质还可以有一个空行后面是这个请求的数据。3.服务器向客户端发送响应响应以响应码开头后面是包含数据的首部、一个空行以及所请求的文档或错误消息。4.服务器关闭连接。
现在使用的 HTTP 协议是 HTTP/1.1 版本1997 年之前采用的是 HTTP/1.0 版本两者区别在于HTTP 连接在 1.0 版本中采用非持续连接工作方式1.1 版本采用的是持续连接工作方式。持续连接是指服务器在发送响应后仍然在一段时间内保持这条由 TCP 传输层协议建立起来的连接使客户端和服务器可以继续在这条连接上传输 HTTP 报文避免重复的创建连接和释放连接。
是否采用持续连接工作方式1.0 中默认是关闭的需要在 HTTP 头加入Connection:Keep-Alive才能启用Keep-Alive。HTTP1.1 中默认启用Keep-Alive如果加入Connection:close请求完会关闭连接。目前大部分浏览器都是用 HTTP1.1 协议也就是说默认都会发起Keep-Alive的连接请求了是否能完成一个完整的Keep-Alive连接就看服务器设置情况。
下面我们一起来看看 HTTP 协议的报文格式HTTP 报文主要包括请求报文和响应报文两种。
HTTP 请求报文的格式如下 HTTP 请求报文由请求行、首部行和实体主体组成由浏览器发送给服务器。上面这张图中 SP 表示空格cr lf 表示回车和换行。下图是谷歌浏览器内访问服务器查看的 HTTP 请求报文例子 HTTP 响应报文的格式如下 上面这张图是 HTTP 响应报文它由状态行、首部行和实体主体组成。下图是谷歌浏览器内访问服务器查看的 HTTP 响应报文例子 在上面的 HTTP 请求报文例子中我们可以看到请求方法是 GET它表示请求由 URL 所标志的信息除了 GET还有其他几种常用的方法。 在 HTTP 响应报文的例子中我们可以看到状态码是 200表示响应成功除此之外还有其他的状态码总共 5 大类。 熟悉 HTTP 协议的同学可能都知道HTTP 协议是以明文方式发送内容不提供任何方式的数据加密如果攻击者截取了 Web 浏览器和网站服务器之间的传输报文就可以直接读懂其中的信息因此 HTTP 协议不适合传输一些敏感信息比如信用开号、密码等。
为了解决 HTTP 协议的这一缺陷需要使用另一种协议HTTPS 协议。
HTTPS全称Hyper Text Transfer Protocol over Secure Socket Layer是以安全为目标的 HTTP 通道简单来说就是 HTTP 的安全版。即在 HTTP 下加入 SSL 协议SSL 依靠证书来验证服务器的身份并为浏览器和服务器之间的通信加密。
HTTPS 和 HTTP 的区别主要为以下三点
1.http 是超文本传输协议信息是明文传输https 协议是由 http ssl 协议构建的可进行加密传输、身份认证的网络协议信息是密文传输比 http 协议安全。2.https 协议需要到 ca 申请证书一般免费证书很少需要缴费3.http 和 https 使用的默认端口也不一样前者是 80后者是 443
更多的网络协议介绍有兴趣的朋友可以看看这篇博客文章。
四、网络编程
看完以上信息之后要想让网络中的计算机能够互相通信少不了以下三个核心要素
IP 地址指的是计算机在网络中的唯一标识目前使用最广泛的是 IPV4端口指的是计算机中应用程序的唯一标识用两个字节表示的整数它的取值范围是0 - 65535协议指的是通过什么协议传输数据例如 TCP、UDP
Java 语言对网络编程提供了良好的支持通过其提供的接口我们可以很方便地进行网络编程。
下面我们一起来看看相关的代码实例
4.1、URL 介绍
URL 表示统一资源定位符指向万维网上“资源”的指针。
一个标准的 URL 包括以下几个部分
protocol方案或协议host主机或者 IP 地址port端口path路径parameter查询参数anchor锚点
在 www 上每一信息资源都有统一且唯一的地址。
代码实例如下
public static void main(String[] args) throws MalformedURLException {URL url new URL(http://www.baidu.com:80/index.html?unamedreamage18#a);// 获取四个值协议、域名、端口、请求资源System.out.println(协议 url.getProtocol());System.out.println(域名|IP url.getHost());System.out.println(端口 url.getHost());System.out.println(请求资源 url.getPath());// 参数System.out.println(参数 url.getQuery());// 锚点System.out.println(锚点 url.getRef());
}输出结果
协议http
域名|IPwww.baidu.com
端口www.baidu.com
请求资源/index.html
参数unamedreamage18
锚点a4.2、InetAddress 介绍
为了方便我们对 IP 地址的获取和操作Java 提供了一个类InetAddress供我们使用。
代码实例如下
public static void main(String[] args) throws UnknownHostException {InetAddress address InetAddress.getByName(www.baidu.com);System.out.println(主机名 address.getHostName());System.out.println(IP地址: address.getHostAddress());
}输出结果
主机名www.baidu.com
IP地址: 14.119.104.2544.3、IntetSocketAddress 介绍
IntetSocketAddress 包含 IP 和端口信息常用于 Socket 通信。此类实现 IP 套接字地址IP 地址端口号不依赖任何协议。
代码实例如下
public static void main(String[] args) {// 指定ip、端口InetSocketAddress socketAddress new InetSocketAddress(14.119.104.254,80);System.out.println(主机名 socketAddress.getHostName());System.out.println(地址 socketAddress.getAddress());System.out.println(端口号 socketAddress.getPort());System.out.println();// 指定主机名、端口InetSocketAddress socketAddress2 new InetSocketAddress(www.baidu.com,80);System.out.println(主机名 socketAddress2.getHostName());System.out.println(地址 socketAddress2.getAddress());System.out.println(端口号 socketAddress2.getPort());
}输出结果
主机名14.119.104.254
地址14.119.104.254/14.119.104.254
端口号80主机名www.baidu.com
地址www.baidu.com/14.119.104.254
端口号804.4、Socket 介绍
Java 的网络编程主要涉及到的内容就是 Socket 编程。
Socket也被称为套接字它是网络通信中两台主机之间逻辑连接的端点的抽象表示包含了进行网络通信必须的五种信息连接使用的协议、本地主机的 IP 地址、本地进程的协议端口、远程主机的 IP 地址、远程进程的协议端口。
实际上Socket 是对 TCP/IP 协议的封装实现Socket 本身并不是协议而是一个可以调用的接口API通过 Socket程序员可以更方便地使用 TCP/IP 协议栈里面的逻辑比如 create、accept、send、read 和 write 等等。
关于 Socket 和 TCP/IP 协议关系如果感觉很抽象你可以这样理解。TCP/IP 协议栈是网络信息传输的一个运行机制方案而 Socket 是 TCP/IP 协议栈的具体技术编程实现。
Socket 编程主要涉及到客户端和服务端两个方面以 TCP 协议通信为例首先是在服务器端创建一个服务器套接字ServerSocket并把它附加到一个端口上服务器从这个端口监听连接。端口号的范围是 0 到 65536但是 0 到 1024 是为特权服务保留的端口号在指定端口时尽量避开这个区间我们可以选择一个当前没有被其他进程使用的端口。
客户端请求与服务器进行连接的时候根据服务器的域名或者 IP 地址加上端口号打开一个 Socket 套接字。当服务器接受连接后服务器和客户端之间的通信就可以像输入输出流一样进行操作。 Socket 通信模式图
下面我们一起来看看具体的代码示例更容易理解。
4.4.1、TCP 协议通信介绍
TCP 协议可以保证数据可靠、安全的传输给另一台主机实际应用非常广泛下面我们一起来看看如何实践。
首先创建一个服务端代码实例如下
public class ServerAdminTest {public static void main(String[] args) throws IOException {//使用需要捕获异常因为可能会存在无法连接的情况ServerSocket serverSocket new ServerSocket(8080);//测试语句System.out.println(本地服务器已开启);while (true){try {//等待客户端的连接Socket socket serverSocket.accept();System.out.println(已收到客户机请求);//输入流读取数据用的InputStream inputStream socket.getInputStream();BufferedReader reader new BufferedReader(new InputStreamReader(inputStream));//读取客户机发送来的消息设置判断只有客户机有发送消息才做输出语句String info;while((info reader.readLine()) ! null) {System.out.println(收到客户机消息info);}//输出流发送数据用的OutputStream outputStream socket.getOutputStream();PrintWriter printWriter new PrintWriter(outputStream);//给客户机发送一段消息printWriter.write(hello我是服务端已收到你的信息);printWriter.flush();//关闭输入、输出流reader.close();printWriter.close();//最后关闭网络连接socket.close();} catch (Exception e){e.printStackTrace();}}}
}然后创建一个客户端代码实例如下
public class ClientAdminTest {public static void main(String[] args) throws IOException {//连接到目标服务器Socket client new Socket(127.0.0.1,8080);System.out.println(客户机已经与服务器建立链接);//创建输出流OutputStream outputStream client.getOutputStream();PrintWriter printWriter new PrintWriter(outputStream);//输出这段话printWriter.write(hello我是客户机);printWriter.flush();//关闭输出不再输出更多数据如果不关闭就会出现服务器无法判断客户机何时会结束发送消息从而无法进行回应。就像一个人和你打电话的时候一直在说话你无法在这段时间如回复他。client.shutdownOutput();//创建输入流InputStream inputStream client.getInputStream();BufferedReader reader new BufferedReader(new InputStreamReader(inputStream));//读取服务端发送过来的消息String info;while((info reader.readLine()) ! null) {System.out.println(接受服务器发送的消息info);}//关闭输入、输出流reader.close();printWriter.close();//最后关闭网络连接就和打完电话之后要挂断电话一样client.close();}
}最后依次先后启动服务端、客户端看看控制台输出结果如何。
服务端输出内容如下
本地服务器已开启
已收到客户机请求
收到客户机消息hello我是客户机客户端输出内容如下
客户机已经与服务器建立链接
接受服务器发送的消息hello我是服务端已收到你的信息Socket 对 TCP/IP 协议里面的创建连接、释放连接进行了隐藏开发者只需要关注数据传输即可。
4.4.2、UDP 协议通信介绍
UDP 协议是一种不可靠的网络协议它在通信的两端各建立一个 Socket 对象但是这两个 Socket 只是发送、接收数据的对象没有客户端和服务器概念。
尽管如此但是它传输速度高效实际应用也非常广下面我们一起来看看如何实践。
首先创建一个接受端代码实例如下
public class UDPReceive {public static void main(String[] args) throws IOException {System.out.println(接收方启动中...);// 1、创建接收端的Socket对象(DatagramSocket)DatagramSocket ds new DatagramSocket(9999);// 2、创建一个数据包用于接收数据byte[] bys new byte[1024];DatagramPacket dp new DatagramPacket(bys, 0, bys.length);// 3、调用DatagramSocket对象的方法接收数据ds.receive(dp);// 4、解析数据包并把数据在控制台显示System.out.println(数据是 new String(dp.getData(), 0, dp.getLength()));// 5、关闭接收端释放资源ds.close();}
}然后创建一个发送端代码实例如下
public class UDPSend {public static void main(String[] args) throws Exception {System.out.println(发送方启动中...);// 1、使用DatagramSocket指定端口创建发送端DatagramSocket client new DatagramSocket(8888);// 2、准备数据一定要转成字节数组String data Java YYDS;// 3、封装成DatagramPacket包裹需要指定目的地(IPport)byte[] bys data.getBytes();DatagramPacket packet new DatagramPacket(bys, 0, bys.length, new InetSocketAddress(127.0.0.1, 9999));// 4、发送包裹 void send(DatagramPacket p)client.send(packet);// 5、释放资源client.close();}
}最后依次先后启动接受端、发送端看看控制台输出结果如何。
接受端输出内容如下
接收方启动中...
数据是Java YYDS更多关于计算机网络学习查询相关资料如
计算机网络整理笔记 - 专题 - 简书