今天不学习,明天变垃圾!
本文主要内容:局域网LAN、广域网WAN、IP地址、端口号以及协议、协议分层、封装和分用。
当前互联网世界是离不开网络的。包括我们未来学习的各种高大上的框架、组件、中间件等,其下层都离不开网络的基本原理和编程。
网络发展的历程中较重要的:
① 局域网LAN:一个上课的机房就相当于一个局域网。简单认为:多个连在同一个路由器上的设备就是在一个局域网中。
② 广域网WAN:就是更大的局域网。
(局域网和广域网之间没有明确的界限)
③ 2007年乔布斯发布苹果手机,标志“移动互联网”时代的到来。
④ 2015年人工智能开始兴起(阿尔法狗战胜李世石)
网络发展史:(了解:没时间可以暂时跳过)
1) 独立模式
计算机之间相互独立
2)网络互连
- 随着时代的发展,越来越需要计算机之间互相通信、共享软件和数据,即以多个计算机协同工作来完成业务,就有了网络互连。
- 网络互连:将多台计算机连接在一起,完成数据共享。
- 数据共享本质是网络数据传输,即计算机之间通过网络来传输数据,也称为网络通信。
根据网络互连的规模不同,可以划分为局域网和广域网。
3) 局域网LAN:
- 局域网,即 Local Area Network,简称LAN。
- Local 即标识了局域网是本地,局部组建的一种私有网络。
- 局域网内的主机之间能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的。
局域网组建网络的方式有很多种:
① 基于网线直连
② 基于集线器组建
③ 基于交换机组建
④ 基于交换机和路由器组建
4)广域网WAN:
- 广域网,即 Wide Area Network,简称WAN。
- 通过路由器将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的局域网都属于其子网。
- 如果有北、中、南等分公司,甚至海外分公司,把这些分公司以专线方式连接起来,即称为“广域网”。
- 如果属于全球化的公共型广域网,则称为互联网(又称公网,外网),属于广域网的一个子集。
- 有时在不严格的环境下说的广域网,其实是指互联网。
- 所谓 “局域网” 和 “广域网” 只是一个相对的概念。比如,我们有 “天朝特色” 的广域网,也可以看做一个比较大的局域网。
一个进程启动后,系统会随机分配一个端口(启动端口)
程序代码中,进行网络编程时,需要绑定端口号(收发数据的端口)来发送、接收数据。
进程绑定一个端口号后,fork一个子进程,可以实现多个进程绑定一个端口号,但不同的进程不能绑定同一个端口号。
fork()函数用于从一个已经存在的进程内创建一个新的进程,新的进程称为“子进程”,相应地称创建子进程的进程为“父进程”。
问题:
有了IP地址和端口号,可以定位到网络中唯一的一个进程,但还存在一个问题,网络通信是基于二进制0/1数据来传输,如何告诉对方发送的数据是什么样的呢?
网络通信传输的数据类型可能有多种:图片,视频,文本等。同一个类型的数据,格式可能也不同,如:发送一个文本字符串“你好!”:如何标识发送的数据是文本类型及文本的编码格式呢?
基于网络数据传输,需要使用协议来规定双方的数据格式。
IP地址:你去哪儿(地址) 端口号:你去找谁(程序)
如:贫僧(源端口)自 东土大唐(源ip) 而来,到 西天(目的ip) 拜 佛(目的端口) 求经而去
1)语法:即数据与控制信息的结构或格式;
类似打电话时,双方要使用同样的语言:普通话
2)语义:即需要发出何种控制信息,完成何种动作以及做出何种响应;
语义主要用来说明通信双方应当怎么做。用于协调与差错处理的控制信息。
类似打电话时,说话的内容。
3)时序:即事件实现顺序的详细说明。
时序定义了何时进行通信,先讲什么,后讲什么,讲话的速度等。比如是采用同步传输还是异步传输。
协议(protocol)最终体现为在网络上传输的数据包的格式。
22端口:预留给SSH服务器绑定SSH协议
21端口:预留给FTP服务器绑定FTP协议
23端口:预留给Telnet服务器绑定Telnet协议
80端口:预留给HTTP服务器绑定HTTP协议
443端口:预留给HTTPS服务器绑定HTTPS协议
需要补充的是:
以上只是说明 0 ~ 1023 范围的知名端口号用于绑定知名协议,但某个服务器也可以使用其他 1024 ~ 65535范围内的端口来绑定知名协议。
(也就是说:知名协议不仅可以使用知名端口号,还可以使用普通端口号)
netstat -ano 查看网络数据传输中的五元组信息。netstat -ano | findstr 过滤字符串协议分层:(需求场景复杂,则协议也是很多且比较复杂的,则拆分+分类)把功能类似的协议分成一类。
上层协议调用下层协议,下层协议为上层协议提供服务;不能隔层调用。
为什么需要网络协议的分层?
1)分层最大的好处,类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接。
2)在代码中,类似于定义好一个接口,一方为接口的实现类(提供方,提供服务),一方为接口的使用类(使用方,使用服务):
对于使用方来说,并不关心提供方是如何实现的,只需要使用接口即可
对于提供方来说,利用封装的特性,隐藏了实现的细节,只需要开放接口即可。
3)这样能更好的扩展和维护。
网络协议是分层的,那么具体是怎么分层的呢?
1)OSI七层网络协议:
【教科书上,实际网络中没有这么分的(面试不考)】
① OSI:开放系统互连
② 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整。通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
③ OSI七层模型(从上往下):
应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
2)TCP/IP五层(四层):
① TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
② TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
③ 最下面一层是硬件和驱动实现的; 中间的层是操作系统内核实现的; 最上面的应用程序层是自己写代码的(程序员打交道最多的)
④ TCP/IP五层协议(从上到下):
- 应用层:直接对应于应用程序,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。
- 传输层:端到端之间的传输(只关心起点和终点)。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机。
- 网络层:点到点之间的传输(不只是关心起点和终点,还关心中间的过程,保证速度与成本)。 **路由器(Router)**工作在网络层。
- 数据链路层:相邻节点之间的传输 。交换机(Switch)工作在数据链路层
物理层:底层基础设施。集线器(Hub)工作在物理层。
传输层、网络层、数据链路层、物理层是操作系统已经实现好的,我们一般并不需要关注,我们大多数只关注应用层,但是也会关注传输层。
① 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下 四层;
② 对于一台路由器,它实现了从网络层到物理层,也即是TCP/IP五层模型的下三层;
③ 对于一台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层;
④ 对于集线器,它只实现了物理层

补充:
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不是一根网线直连的,中间要经过一些交换机/路由器进行转发,实际的过程更加复杂)