一.局域网VS广域网
局域网
- 局域网:Local Area Network~简称LAN.指在某一特定区域内由多台计算机组成的互联网组。
- 局域网内的主机之间能方便的进行网络通信,又称为内网.
- 局域网和局域网之间在没有连接的情况下,是无法通信的。
- 局域网的组建方式:
-
基于网线直连:
-
基于集线器组建:
-
基于交换机组建:
-
基于路由器和交换机组建:
-
广域网
- 广域网:即 Wide Area Network,简称WAN。通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。
- 广域网内部的局域网都属于其子网。
二.IP地址/端口号/协议
- IP地址: 主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主
机的网络地址。描述了一个设备在网络上的位置.- 格式
IP地址是⼀个32位的⼆进制数,通常被分割为4个“8位二进制数”(也就是4个字节),如:
01100100.00000100.00000101.00000110。
通常用“点分十进制”的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)。
如:100.4.5.6。
- 格式
- 端口号:端口号可以标识主机中发送数据、接收数据的进程.
每个程序在进行网络通信的过程中,都需要有一个端口号(可能是用户手动指定,也可能是系统自动分配)~同一个主机上,程序之间使用的端口号还不能冲突(端口号是一个整数)- 格式
端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定⼀个端口号,来发送及接收网络数
据。
- 格式
- 协议:网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵
从的⼀组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能
相互通信交流。协议(protocol)最终体现为在⽹络上传输的数据包的格式。
通信双方的这两个计算机,来自不同的厂商,为了确保任意两个计算机之间能够进行网络通信,也要求这些计算机都要遵守相同的网络协议~~协议就是一种约定,确保不同厂商之间产出的设备能够互相配合.
三.网络通信的五元组
- 源IP地址:标识发送数据的设备或服务的IP地址。
- 目的IP地址:标识接收数据的目标设备或服务的IP地址。
- 源端口号:标识发送数据设备上的具体应用程序或服务端口。
- 目的端口号:标识接收数据目标设备上的应用程序或服务端口。
- 协议号:标识传输层使用的协议类型,如TCP或UDP。
四.协议分层
为什么要分层:
网络通信过程中,需要涉及到的细节方方面面,如果只有一个协议来完成通信,则这个协议无比复杂,非常不利于学习和维护。故我们需要把一个庞大,复杂的协议,拆分成一个小而美的协议。通信协议拆分后归类形成层状结构。
分层时的特点:
- 把功能定位相似的协议放在同一层。
- 上层协议调用下层协议的功能,下层协议给上层协议提供服务。
- 只有相邻的层次之间可以进行交互。
分层的作用:
- 分层最大的好处,类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接。
- 某一层的协议进行替换后,对于其他层的协议没有影响
- 在代码中,类似于定义好⼀个接口,一方为接口的实现类(提供方,提供服务),一方为接口的使用类 ( 使用方,使用服务):
- 对于使用方来说,并不关心提供方是如何实现的,只需要使用接口即可
- 对于提供方来说,利用封装的特性,隐藏了实现的细节,只需要开放接口即可。
五.TCP/IP五层模型.
TCP/IP是⼀组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议采用了5层的层级结构,每⼀层都呼叫它的下⼀层所提供的网络来完成自己的需求。
• 应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、问件传输协议(FTP)、网络远
程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。
• 传输层:负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发
送到目标主机。
• 网络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识⼀台主机,并通过路由表
的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网络层。
• 数据链路层:负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上
检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等⼯作。
有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层。
• 物理层:负责光/电信号的传递方式。比如现在以太网通的网线(双绞线)、早期以太网采用的的同
轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理
层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层。
一张图带你理解OSI七层模型和TCP/IP五层模型:
网络设备所在分层
• 对于⼀台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四
层;
• 对于⼀台路由器,它实现了从网络层到物理层,也即是TCP/IP五层模型的下三层;
• 对于⼀台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层;
• 对于集线器,它只实现了物理层;
注意我们这⾥说的是传统意义上的交换机和路由器,也称为二层交换机(⼯作在TCP/IP五层模型的下
两层)、三层路由器(工作在TCP/IP五层模型的下三层)。
随着现在网络设备技术的不断发展,也出现了很多3层或4层交换机,4层路由器。我们以下说的网络设
备都是传统意义上的交换机和路由器。
六.封装和分用.(网络传输数据中最核心的流程)
我将以一个A用户通过QQ给B用户发送Hello World!!为例讲述封装和分用
封装
-
- 应用层==>首先QQ需要从你的输入框中读取你输入的内容,然后用QQ应用程序中内部设置的应用层协议,把读取的字符串(内容)构造成一个应用层数据包,然后应用程序会调用操作系统提供的API,把这个应用层数据包交给传输层进行封装.
假设应用层数据包的格式为: 发送方的QQ号;接收方的QQ号;发送时间;发送内容.
- 应用层==>首先QQ需要从你的输入框中读取你输入的内容,然后用QQ应用程序中内部设置的应用层协议,把读取的字符串(内容)构造成一个应用层数据包,然后应用程序会调用操作系统提供的API,把这个应用层数据包交给传输层进行封装.
-
- 传输层==>传输层会把你传入的这个应用层数据包作为一个整体,再构成一个传输层数据包.(传输层涉及到的协议最主要的是TCP和UDP).此处假设是使用的是UDP协议,此时就会构成一个UDP数据包.然后调用网络层的API,把这个UDP数据包交给网络层进行下一步封装.
基本格式:UDP报头+应用层数据包 (也可以理解为 报头(header) + 载荷(payload))
此处的UDP报头具有类似贴标签的作用.它所承载的最重要的信息就是源端口和目的端口
- 传输层==>传输层会把你传入的这个应用层数据包作为一个整体,再构成一个传输层数据包.(传输层涉及到的协议最主要的是TCP和UDP).此处假设是使用的是UDP协议,此时就会构成一个UDP数据包.然后调用网络层的API,把这个UDP数据包交给网络层进行下一步封装.
-
- 网络层==>网络层会继续把你传入的UDP数据包作为一个整体,添加一个IP报头,构成一个IP数据包.(网络层涉及到的最核心的协议是IP协议).然后调用数据链路层的API,把这个IP数据包交给数据链路层进行下一步的封装.
基本格式:IP报头+UDP数据包
此处的IP报头,它所承载的最重要的信息就是源IP地址和目的IP地址.
- 网络层==>网络层会继续把你传入的UDP数据包作为一个整体,添加一个IP报头,构成一个IP数据包.(网络层涉及到的最核心的协议是IP协议).然后调用数据链路层的API,把这个IP数据包交给数据链路层进行下一步的封装.
-
- 数据链路层==>数据链路层会把你传入的IP数据包作为一个整体,添加一个以太网帧头,末尾添加一个以太网帧尾,构成一个以太网数据帧.(数据链路层最核心的协议是以太网协议).然后再把以太网数据帧传递给物理层.
基本格式:以太网帧头+IP数据包+以太网帧尾
- 数据链路层==>数据链路层会把你传入的IP数据包作为一个整体,添加一个以太网帧头,末尾添加一个以太网帧尾,构成一个以太网数据帧.(数据链路层最核心的协议是以太网协议).然后再把以太网数据帧传递给物理层.
-
- 物理层==>物理层把上述这样的以太网数据帧(二进制结构(0-1)) 转化为电信号/光信号/电磁波(网线 . 光纤 . 无线WiFi) 然后进行发送.
暂时不考虑中间过程,假定数据包已经到达B的网卡了.B如何处理?—B的处理过程,就称为分用.
分用
-
- 物理层 ==>B的物理层收到了光信号/电信号/电磁波 , 就会把这些物理信号转化为数字信号(二进制0-1)
得到一个以太网数据帧,进一步把这个数据帧交给数据链路层处理.
- 物理层 ==>B的物理层收到了光信号/电信号/电磁波 , 就会把这些物理信号转化为数字信号(二进制0-1)
-
- 数据链路层==>按照以太网数据帧的格式,去除其中的载荷,再交给上层协议!!
-
- 网络层==>按照IP协议进行解析,取出其中的载荷,再交给上层协议.
-
- 传输层==> 按照UDP协议格式,取出其中的载荷,再交给上层协议
-
- 应用层==>按照QQ应用程序内部的应用层协议格式来解析数据 显示在聊天窗口上
注:
真实情况下,两个主机不太会是通过网线直接相连的,而是通过一系列的交换机或者路由器来进行数据转发的.
但实际上即使是经过路由器和交换机,上述的封装分用的过程也同样是适用的!!只不过,封装分用的程度不一定是到应用层(也可能五层都有) ---->经典交换机来说,就只需要封装分用到数据链路层即可 ; 经典路由器来说,就只需要封装分用到网络层即可.