JavaSE进阶(五)——网络编程概述
前言
本篇笔记在理论与逻辑上基于计算机网络,但是在敲代码上貌似没什么关系(怎么可能没关系,基础理论一定要吃透)。本篇笔记尽量详细的记录相关知识点和代码,大家一起加油把!
概述
计算机网络
本篇笔记尽量不会记录计算机网络中的深层次概念。首先来说一下网络。
关于网络我们所熟知的就是互联网,最早的时候互联网并没有这么强大的功能,它的诞生仅仅是为了发邮件。互联网最开始仅支持文本传输,也就是说最早传输的数据只有文本。其实现在的互联网传输的数据也是属于文本数据,只是我们发现随着计算机普及,大家的需求越来越多,所以我们在单纯传输文本的基础上加入了MIME类型来区分提醒浏览器、计算机等按照对应类型解析传输的数据包。大家可能不知道怎么使用MIME类型,后续会说明,大家可以先了解一下各种数据资源在MIME类型中的对应关系。
究根结底,网络的作用就是传输数据(信息),传输数据(信息)的作用就是为了通过网络来使得点对点之间产生数据交换、共享等。之所以称之为互联网,便是顾名思义:相互关联。
网络编程
网络编程的作用是利用互联网来传输数据,大家可以把数据等概念想象成邮包,假设我们与另一半异地恋,你在南方,他(她)在北方。今年冬天特别冷,你想给他(她)邮寄一些冬衣,这个时候你就需要知道他的位置(地址),我们在收件人信息中写上对方的名字、电话、地址等,通过这些信息就可以逐步定位这个唯一的位置。
丢包
根据上面的例子,我们在看视频的时候可能会因为种种原因出现花屏、卡顿或者杂音等类似的情况,这种情况我们称之为丢包,丢包和丢快递一个道理。其实就是服务器在源源不断的给我们发送一个一个的数据包,而由于一些意外原因导致数据包丢失,我们的计算机没有接收到这个数据包,所以视频就会出现问题。(快递没丢过的同学别杠,我上周刚丢了一箱橙子,不嗨森!)。
网络通信
根据上面的例子我们可以得出粗浅的结论。我们在互联网中传输数据包的时候,我们需要发送发的地址,数据包,接收方的地址,快递公司,换在网络中就是一下这些:
-
通信双方的地址:
- ip;
- 端口号;
- 局域网ip。
-
数据包;
-
规则(网络通信协议)。
Java中的网络编程
基本概念
IP
IP可以理解为我们的地址,可以理解为我们居住的地址。IP分为公网IP和内网IP,具体区别如下:
- 公网IP:IPV4的ip地址是最初的IP地址,长度为32位二进制数据,而百分之六十以上的IP都美国独占,世界上其他国家只占有不到百分之40的IP。有IP资源紧张,无法像美国那样每一个设备都被分配一个独一无二的IP,所以我们就设定除了A类IP、B类IP等IP地址分类,将这些地址作为公网IP。举个例子:一个学校有五千人,大家都用校园网,而学校只有五个公网IP,理论上讲,无论我们在校园网内部被分的IP为多少,很可能有一千人用的都是同一个公网IP在访问CSDN。
- 内网IP:当我们设定一个团体的公网IP之后,我们在公网IP的规则下设定属于该公网IP下的IP地址被称为内网IP,我们通过系统中分配的内网IP申请公网IP的连接资格,然后通过公网IP去访问公网的资源。
上述概念可能不是很好理解,其实可以理解为一下这个例子:
举一个学校的例子(例子勿杠,看明白就行):在大学中,学生外出需要请假,老师比较忙,所以需要每个班级的班长统计好第二天需要请假的同学的名单交给老师,除了班长以外的学生无法单独去找老师请假。老师讲请假申请批复后,由班长将批复结果交给对应的同学。
在上述例子中,老师是公网资源,班长就是公网IP,你个人便是内网IP。班长和班级同学对应着公网IP和下属内网IP;班长代替你去找老师对应内网IP通过公网IP去访问外网资源。
端口
套用上面的例子,端口可以理解为学号,每一个学号对应着一个学生。即每个端口号对应着一个进程。大学学号中有一个默认规则,就是在一个学校中一个学号只能代表一名学生,即使这名学生退学或者其他原因不在这个学校了,这个学号也会保留。在计算机中,端口号中也有一些默认端口号是建议大家不要用的,比如:80、8080、3306。这些端口号都有特殊含义,后续会为大家讲解到。
通信协议
协议指的就是一个规定,一种通信规范,其中主要代表的有两种。
TCP
-
连接稳定;
-
三次握手:
- 客户端发送连接请求携带报文;
- 服务端收到请求报文,并返回自己的接收报文;
- 客户端收到服务端响应的报文后生成连接成功报文给服务端,服务端接收后建立连接。
-
四次挥手:
- 首先客户端发送断开连接请求报文;
- 服务端收到之后,响应给客户端报文,至此客户端与服务端连接断开就绪;
- 服务端想断开连接的时候会发送断开请求报文;
- 客户端接收后会响应报文,至此二者之间完全断开。
三次握手的原因是确定客户端与服务端的发送与接收功能没有故障,才会建立连接;而四次挥手的作用是双向断开连接才是真正的断开。
UDP
- 不一定需要对方接收数据(不连接、不稳定);
- 客户端与服务端之间没有明确的界限(不区分客户端与服务端);
- 不建立连接,不管你收没收到,反正我发送了。
区别
简单地理解为TCP为打电话,一方拨号,另一方接听,才可以建立通信;UDP为发短信,反正我发送了,你信号不好与我无关,我只检测自己发送成功与否。
更通俗的理解为:TCP负责到底;UDP流氓协议。
总结
本篇笔记记录了Java网络编程的一些基本概念与逻辑,在新手看来目前敲代码没什么关系。注意,知识是日积月累的,未来涉及到一定深度的逻辑时肯定会有帮助。