【javaEE】网络初识


前言

今天不学习,明天变垃圾!

本文主要内容:局域网LAN、广域网WAN、IP地址、端口号以及协议、协议分层、封装和分用。


一、网络发展史(了解)

  1. 当前互联网世界是离不开网络的。包括我们未来学习的各种高大上的框架、组件、中间件等,其下层都离不开网络的基本原理和编程。

  2. 网络发展的历程中较重要的:
    ① 局域网LAN:一个上课的机房就相当于一个局域网。简单认为:多个连在同一个路由器上的设备就是在一个局域网中。
    ② 广域网WAN:就是更大的局域网。
    (局域网和广域网之间没有明确的界限)
    ③ 2007年乔布斯发布苹果手机,标志“移动互联网”时代的到来。
    ④ 2015年人工智能开始兴起(阿尔法狗战胜李世石)

  3. 网络发展史:(了解:没时间可以暂时跳过
    1) 独立模式

计算机之间相互独立

2)网络互连

  • 随着时代的发展,越来越需要计算机之间互相通信、共享软件和数据,即以多个计算机协同工作来完成业务,就有了网络互连。
  • 网络互连:将多台计算机连接在一起,完成数据共享。
  • 数据共享本质是网络数据传输,即计算机之间通过网络来传输数据,也称为网络通信。

根据网络互连的规模不同,可以划分为局域网和广域网。
3) 局域网LAN:

  • 局域网,即 Local Area Network,简称LAN。
  • Local 即标识了局域网是本地,局部组建的一种私有网络
  • 局域网内的主机之间能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的。

局域网组建网络的方式有很多种:
① 基于网线直连
② 基于集线器组建
③ 基于交换机组建
④ 基于交换机和路由器组建

4)广域网WAN:

  • 广域网,即 Wide Area Network,简称WAN。
  • 通过路由器将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的局域网都属于其子网。
  • 如果有北、中、南等分公司,甚至海外分公司,把这些分公司以专线方式连接起来,即称为“广域网”。
  • 如果属于全球化的公共型广域网,则称为互联网(又称公网,外网),属于广域网的一个子集。
  • 有时在不严格的环境下说的广域网,其实是指互联网。
  • 所谓 “局域网” 和 “广域网” 只是一个相对的概念。比如,我们有 “天朝特色” 的广域网,也可以看做一个比较大的局域网。
  1. 集线器:想象成是把网线进行劈叉了,但是其实出去的时候仍然只能是一边,局限性很大,很快就被淘汰了。
    交换机:是集线器的升级版,可以保证一边进而两边同时出。(一般是在运营商or企业机房里会有交换机)
    路由器:最熟悉、日常使用的路由器。
    (使用交换机/路由器组建网络并不是很容易的)

二、 网络通信基础

  1. 网络互连的目的是进行网络通信,也即是网络数据传输,更具体一点,是网络主机中的不同进程间,基于网络传输数据
  2. 那么,在组建的网络中,如何判断到底是从哪台主机,将数据传输到那台主机呢?这就需要使用IP地址来标识。

1. IP地址

  1. 概念
    IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址
    (就像我们发送快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地。)
  2. 格式
    IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节),如:01100100.00000100.00000101.00000110。
    通常用“点分十进制”的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)。如:100.4.5.6。
  3. 特殊IP
    127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1
    1)本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。
    2)IP地址解决了网络通信时,定位网络主机的问题,但是还存在一个问题,传输到目的主机后,由哪个进程来接收这个数据呢?这就需要端口号来标识。

2. 端口号

  1. 概念
    在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单说:端口号用于定位主机中的进程
    【类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货人(端口号)。】
  2. 格式
    端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。
  3. 注意事项
    两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号。
  4. 了解:

一个进程启动后,系统会随机分配一个端口(启动端口)
程序代码中,进行网络编程时,需要绑定端口号(收发数据的端口)来发送、接收数据。
进程绑定一个端口号后,fork一个子进程,可以实现多个进程绑定一个端口号,但不同的进程不能绑定同一个端口号。

fork()函数用于从一个已经存在的进程内创建一个新的进程,新的进程称为“子进程”,相应地称创建子进程的进程为“父进程”。

  1. 问题:
    有了IP地址和端口号,可以定位到网络中唯一的一个进程,但还存在一个问题,网络通信是基于二进制0/1数据来传输,如何告诉对方发送的数据是什么样的呢?
    网络通信传输的数据类型可能有多种:图片,视频,文本等。同一个类型的数据,格式可能也不同,如:发送一个文本字符串“你好!”:如何标识发送的数据是文本类型及文本的编码格式呢?
    基于网络数据传输,需要使用协议来规定双方的数据格式

  2. IP地址:你去哪儿(地址) 端口号:你去找谁(程序)
    如:贫僧(源端口)自 东土大唐(源ip) 而来,到 西天(目的ip) 拜 佛(目的端口) 求经而去

3. 【认识协议】

  1. 协议其实就是一种约定:发送方和接收方约定好,按照特定的格式来进行传输。(网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则。)
  2. 在网络通信中,主机之间传输数据本质上是光信号和电信号,而所传输的光信号以及电信号的具体含义需要进行约定。
  3. 协议是建立在通信双方都认同的基础之上的。
  4. 协议通常有三要素组成:

1)语法:即数据与控制信息的结构或格式;
类似打电话时,双方要使用同样的语言:普通话
2)语义:即需要发出何种控制信息,完成何种动作以及做出何种响应;
语义主要用来说明通信双方应当怎么做。用于协调与差错处理的控制信息。
类似打电话时,说话的内容。
3)时序:即事件实现顺序的详细说明。
时序定义了何时进行通信,先讲什么,后讲什么,讲话的速度等。比如是采用同步传输还是异步传输。

协议(protocol)最终体现为在网络上传输的数据包的格式。

  1. 知名协议的默认端口
    系统端口号范围为 0 ~ 65535,其中:0 ~ 1023 为知名端口号,这些端口预留给服务端程序绑定广泛使用的应用层协议,如:

22端口:预留给SSH服务器绑定SSH协议
21端口:预留给FTP服务器绑定FTP协议
23端口:预留给Telnet服务器绑定Telnet协议
80端口:预留给HTTP服务器绑定HTTP协议
443端口:预留给HTTPS服务器绑定HTTPS协议

需要补充的是:

以上只是说明 0 ~ 1023 范围的知名端口号用于绑定知名协议,但某个服务器也可以使用其他 1024 ~ 65535范围内的端口来绑定知名协议。
(也就是说:知名协议不仅可以使用知名端口号,还可以使用普通端口号)

4. 五元组

  1. 在TCP/IP协议中,用五元组来标识一个网络通信:
    1) 源IP:标识源主机
    2) 源端口号:标识源主机中该次通信发送数据的进程
    3) 目的IP:标识目的主机
    4.)目的端口号:标识目的主机中该次通信接收数据的进程
    5) 协议号:标识发送进程和接收进程双方约定的数据格式
  2. 可以在cmd中,输入 netstat -ano 查看网络数据传输中的五元组信息。
  3. 如果需要过滤(一般是通过端口号或进程PID过滤),可以使用 netstat -ano | findstr 过滤字符串

5. 协议分层

  1. 协议分层:(需求场景复杂,则协议也是很多且比较复杂的,则拆分+分类)把功能类似的协议分成一类。

  2. 上层协议调用下层协议,下层协议为上层协议提供服务;不能隔层调用。

  3. 为什么需要网络协议的分层?
    1)分层最大的好处,类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接。
    2)在代码中,类似于定义好一个接口,一方为接口的实现类(提供方,提供服务),一方为接口的使用类(使用方,使用服务):
    对于使用方来说,并不关心提供方是如何实现的,只需要使用接口即可
    对于提供方来说,利用封装的特性,隐藏了实现的细节,只需要开放接口即可。
    3)这样能更好的扩展和维护。

  4. 网络协议是分层的,那么具体是怎么分层的呢?
    1)OSI七层网络协议:
    【教科书上,实际网络中没有这么分的(面试不考)】
    ① OSI:开放系统互连
    ② 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整。通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
    ③ OSI七层模型(从上往下):
    应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

2)TCP/IP五层(四层):
① TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
② TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
③ 最下面一层是硬件和驱动实现的; 中间的层是操作系统内核实现的; 最上面的应用程序层是自己写代码的(程序员打交道最多的)
④ TCP/IP五层协议(从上到下):

  • 应用层:直接对应于应用程序,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。
  • 传输层:端到端之间的传输(只关心起点和终点)。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机。
  • 网络层:点到点之间的传输(不只是关心起点和终点,还关心中间的过程,保证速度与成本)。 **路由器(Router)**工作在网络层。
  • 数据链路层:相邻节点之间的传输 。交换机(Switch)工作在数据链路层
    物理层:底层基础设施。集线器(Hub)工作在物理层。

传输层、网络层、数据链路层、物理层是操作系统已经实现好的,我们一般并不需要关注,我们大多数只关注应用层,但是也会关注传输层。

  1. TCP/IP四层:其实就是无视了最后一层物理层,因为物理层其实是硬件,而程序员一般搞的是软件。
  2. 协议在传输时构造的方式和解析时的方式必须一致。
  3. 网络设备所在分层:

① 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下 四层;
② 对于一台路由器,它实现了从网络层到物理层,也即是TCP/IP五层模型的下三层;
③ 对于一台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层;
④ 对于集线器,它只实现了物理层

  1. 补充:
    主机文件传输

6. 【封装和分用】(重点)

  1. 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。
  2. 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。
    首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
  3. 数据封装成帧(数据链路层)后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理。
  4. 举个栗子:
    A通过QQ给B发消息:
    ① A通过QQ应用程序(应用层)给B发消息,在QQ内部自己约定好了一个应用层协议(具体协议是如何约定的我们不得而知,由设计QQ的程序员负责设计)
    ② QQ应用程序会把该应用数据交给传输层协议来进一步处理:传输层是操作系统内核实现的,操作系统会提供一些API给应用程序(这些API起了个特殊的名字,叫socket API),在代码中调用系统里的API就可以把应用层数据交给传输层(也就是交给了操作系统内核)。

补充:
API:application programming interface应用程序编程接口
像之前学过的集合类如Random、Scanner、IO流都是java标准库给咱们提供的API;
像之前学过的jdbc则是mysql给咱们提供的API;
操作系统也会给我们提供API。
API具体来说就是一组类/方法,别人写好了我们可以直接进行调用

【传输层中有很多协议,最典型的就是TCP协议】
③ 在数据到达传输层后,传输层在该数据前面拼接上所使用的协议报头,如TCP报头,该报头中包含的信息很多,但是最重要的就是源端口和目的端口(也就是谁发给谁)
(注:一个数据报由报头+载荷部分(payload)组成)
④ 传输层需要继续将该数据交给网络层处理(网络层中最典型的就是IP协议):该层协议会把传输层传过来的数据段视为一个整体(payload),然后再给前面加上该层使用的协议报头。如加上IP报头,在IP报头中包含的信息也很多,但是最重要的就是源IP和目的IP(即:从哪儿发到哪儿)
⑤ 在构造好IP数据报之后,IP协议要继续把整个数据交给数据链路层:数据链路层中协议也有很多,但是最典型的就是“以太网”。

以太网:电脑上插的网线也可以叫做“以太网线”,对应的网线也就是遵守以太网这个协议的。以太网这个协议既管数据链路层,又管物理层。以太网被用来传输电信号。

⑥ 在数据链路层中又会将从网络层传过来的数据作为一个整体,在该整体的头部加上以太网数据帧的帧头,在尾部加上以太网数据帧的帧尾。
【帧头中存的主要是源MAC地址和目的MAC地址; 帧尾中存的是校验和】
⑦ 数据链路层就把封装好的数据交给物理层:已经组织好的数据通过物理层的设备(如网卡)将数据的二进制比特流转换成 光信号(插光纤)/电信号(插网线) 并进行传输。

【上述数据从上到下层层添加信息的过程就称为“封装”】

【“分用”就是“封装”的逆过程,也就是从下到上层层拆掉的过程。】

此时省略中间的传输过程,假定数据已经到达了接收端主机:
① 在物理层,接收方的网卡这样的硬件设备就收到了光信号/电信号,然后就把该信号转成了二进制的比特数据
② 接下来就把这个数据交给数据链路层,由以太网协议进行解析。也就是说,此时拿到了以太网数据帧,由以太网协议去掉帧头和帧尾取出载荷部分
③ 把取出的载荷部分交给网络层,也就是在网络层拿到的是IP数据报,IP协议针对该IP数据报进行解析,去掉IP报头得到载荷部分交给传输层
④ 此时传输层的TCP协议就对拿到的载荷部分(段)进行解析,去掉TCP报头,得到的载荷部分再交给应用层
⑤ 此时的载荷部分到达应用层,也就是QQ应用程序,此时就会把得到的应用层数据进行解析,取出里面的信息显示在界面上。

(上述的只是描述了发送方和接收方之间的封装和分用的过程,实际的传输中还有很多中间过程,如A和B不是一根网线直连的,中间要经过一些交换机/路由器进行转发,实际的过程更加复杂)


THINK

  1. 广域网和局域网之间没有明显的界限。
  2. 协议分层的意义以及调用
  3. 一个进程可以多个端口号,但是一个端口号只有一个进程。
  4. 知名协议可以使用知名接口(0~1023)和普通端口。
  5. TCP/IP四层模型
  6. 封装和分用
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

'Dream是普通小孩耶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值