1.概念
局域网,即 Local Area Network,简称LAN
①Local 即标识了局域网是本地、局部组建的一种私有网络
②局域网内的主机之间能方便的进行网络通信,又称为内网
2.局域网组建网络的方式
①基于网线直连
②基于集线器组建
③基于交换机组建
④基于交换机和路由器组建
1.概念
广域网,即 Wide Area Network,简称WAN
(局域网和广域网其实没有明确的界限,当局域网中设备数量非常多,局域网空间跨度特别大,就可以称为广域网)
①通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网
②广域网内部的局域网都属于其子网
2.许多路由器和交换机连接形成广域网
路由器上一般有4个LAN口和1个WAN口
①LAN口:连接电脑/交换机/集线器,一般都是连接交换机,因为通过交换机就可以连接到更多的终端设备
(终端设备:电脑、手机....)
(原因:路由器一般只有4个LAN口,要是想连接更多的终端设备就可以通过交换机)
②WAN口:连接运营商(移动、联通...)的宽带;运营商会从他们的机房拉出一条线,机房也包含很多路由器,这条线就插到路由器的WAN口,运营商相当于用他们机房路由器的LAN口连接你路由器的WAN口,这样运营商那边就能把外面的网络传输给你
IP地址用来描述网络上一个设备所在的位置,通过IP地址就可以查找到你的主机位置
举例:就像快递一样,快递员需要知道你家的地址才能给你送快递,网络通信也是如此,需要知道你的IP地址才能给你传输数据
①源IP:标识源主机
②目的IP:标识目的主机
举例:就像上网买东西一样,比如你从网上买件衣服,商家给你发货所在的发货地就相当于源IP,你收货的地址就相当于目的IP
IP地址是一个4字节,32个比特位的二进制数,通常被分割为4个“8位二进制数”
如: 01100100.00000100.00000101.00000110
IP地址我们通常用“点分十进制”的方式来表示
即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)
如: 100.4.5.6
IP地址分为两个部分,网络号和主机号
①网络号:标识网段(局域网),保证相互连接的两个网段具有不同的标识
②主机号:标识主机,同一局域网内,主机之间有相同的网络号,但是必须有不同的主机号
要点一:同一局域网中设备网络号必须相同,主机号必须不同
要点二:两个相邻的局域网,网络号必须不同
问题:如何区分网络号和主机号?
方法一:子网掩码
①概念和格式:子网掩码格式和IP地址一样,也是一个4字节,32个比特位的二进制数
子网掩码的左边是网络位,用二进制数字“1”表示,1 的数目等于网络位的长度
子网掩码的右边是主机位,用二进制数字“0”表示,0的数目等于主机位的长度
(左侧必须是连续的1,右侧必须是连续的0,不可以是1和0相互交替)
②家用路由器子网掩码:通常是255.255.255.0
方法二:按照早期安排的分类
①将IP地址中的主机地址全部设为0,就成为了网络号,代表整个局域网
②将IP地址中的主机地址全部设为1,就成为了广播地址
作用:当你给这个地址发送数据,此时连接到同一个局域网的所有设备都将接收到数据
缺点:这里的广播,在传输层中只能针对UDP,无法使用TCP,就没有“三握四挥”之说
③127.*的IP地址用于本机环回(loop back)测试
(通常是127.0.0.1)
本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输)
对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信
localhost虽然也可以表示本机,但是它是一个域名,尽管最后会被解析成为127.0.0.1
从使用层面来说,这两者无差别,但还是更推荐使用127.*的IP地址
1.动态分配IP(DHCP)
当前设备不会一直需要上网,需要上网就分配IP,不需要就先不分配
(注意:这种方案只能缓解,不能根治)
2.NAT机制(网络地址转换)
①IP地址分类
(1)内网IP:同一局域网内的设备内网IP不能重复;不同局域网内的设备内网IP可以重复
(此时在其他局域网中的设备就可以使用重复的IP了,大大减少了IP不够用的问题)
(2)外网IP:外网IP不能重复
②局域网内部所有设备之间是可以正常通信的
(因为局域网内部的内网IP都是唯一的,不可重复的)
③A局域网中的设备是不可以直接和B局域网中的设备进行通信的
原因:前面说过,不同局域网内的内网IP是可以重复的,如果它们的内网IP是重复的呢?
解决办法:需要有一个带有外网IP的设备进行中转
④优点
成本低,"纯软件实现"的解决方案,最大的优点,使得NAT广泛应用
(可以对比下文的IPV6)
⑤缺点
I.效率不高
II.非常繁琐
III.不方便直接访问局域网内的设备
(虽然提高了IP地址的“利用率”,但还是没从根本上解决IP地址不够用的问题)
3.IPV6
①IPV4:4字节,32个比特位表示IP地址
②IPV6:16字节,128个比特位表示IP地址
③优点:从根本上解决了IP地址不够用的问题
IPV4是2³²个IP地址
IPV6是2³² * 2³² * 2³² * 2³²个IP地址
(注意这个数字足以支持我们把地球上的每一粒沙子都分配一个IP地址,可想而知数量之大)
④缺点:成本高,IPV4和IPV6不兼容,因此若要使用IPV6,则必须换路由器
(对于普通人来说,一个路由器好端端的用着,不需要更换,而且我们需要知道,即使用了IPV6也不会提高网速,那么,换路由器的原因在哪呢,这也是IPV6不能受大众普遍使用的原因,相比于NAT,成本相差很多)
MAC地址,即 Media Access Control Address,用于标识网络设备的硬件物理地址
(MAC地址又称为物理地址)
①主机具有一个或多个网卡,路由器具有两个或两个以上网卡;其中每个网卡都有唯一的一个MAC地址
②网络通信,即网络数据传输,本质上是网络硬件设备,将数据发送到网卡上,或从网卡接收数据
③硬件层面,只能基于MAC地址识别网络设备的网络物理地址
④MAC地址在网卡出厂时就确定了,不能修改
①大小:6个字节,48个比特位
②格式:一般用16进制数字加上冒号的形式来表示MAC地址
(两个十六进制数字来表示一个字节;字节之间用“-”或者“:”来分割)
MAC地址是设备的物理地址,网卡出厂即确定了,不会随网络变化而变化
MAC地址在数据链路层上用于唯一标识和寻址设备
1.TCP/IP协议不同层
①IP地址:位于网络层,负责网络层数据的转发
②MAC地址:位于数据链路层,负责数据链路层数据的转发
2.描述含义不同
①IP地址:描述的是网络传输整体路线的起点和终点;是给人使用的网络逻辑地址
②MAC地址:描述的是一个区间节点之间的起点和终点
(同样都可以表示主机的地址,只不过地址含义不同)
3.大小不同
①IP地址:4个字节,32个比特位
②MAC地址:6个字节,48个比特位
端口号用来区分一个主机上不同的应用程序,即用于定位主机中的进程
在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据
举例:类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货人(端口号)
(要知道是哪个程序发送或接收的数据,就像知道发货人或收件人是谁)
①源端口:标识源主机中该次通信发送数据的进程
②目的端口:标识源主机中该次通信接收数据的进程
举例:就像上网买东西一样,比如你从网上买一件衣服,商家就相当于源端口,你就相当于目的端口,商家作为发货人,你作为收件人,网络传输也一样,发送数据的进程就是源端口,接收数据的进程就是目的端口
端口号是0~65535范围的数字
一般0~1023的端口号我们都不推荐使用
这些属于“知名端口”,是预留给服务端程序绑定广泛使用的应用层协议
话虽这么说,但这些端口号绑定的服务器大多数都已经过气了,唯有少部分是知名的
其实mysql服务器比很多知名端口都要更广泛应用,但端口号默认只是3306
两个不同的进程不能绑定同一个端口号
一个进程可以绑定多个端口号,一个端口号只能绑定一个进程
网络协议是网络通信(网络数据传输)经过的所有网络设备都必须共同遵从的一组约定和规则
如怎么样建立连接、怎么样互相识别等;只有遵守这个约定,计算机之间才能相互通信交流
①语法:即数据与控制信息的结构或格式
(类似打电话时,双方要使用同样的语言:普通话)
②语义:即需要发出何种控制信息,完成何种动作以及做出何种响应
(说明通信双方应当怎么做)
③时序:即事件实现顺序的详细说明
(定义了何时进行通信,先讲什么,后讲什么,讲话的速度等)
协议(protocol)最终体现为在网络上传输的数据包的格式!!!(下文说明)
问题:
计算机生产厂商有很多
计算机操作系统,也有很多
计算机网络硬件设备,还是有很多
如何让这些不同厂商之间生产的计算机能够相互顺畅的通信?
答案:那就是约定一个共同的标准,大家都来遵守这个标准来生产,这样生产出来的设备就可以一起相互通信,这就是网络协议
定义不同层次的网络协议
(通过协议分层,用于网络通信)
原因:网络通信需要用到网络协议,但是网络通信是一个比较复杂的的工作,如果协议不分层,单靠一个协议解决所有问题,会导致这个协议非常庞大且复杂;我们此时就将协议进行拆分,但是这一拆分出来的协议太多了,就将一些含义或者功能相同的协议归为一类,即归为一层
①让协议明确层级关系,避免跨层之间的交互和混乱,降低耦合,提高整个系统的可读性
②上层协议调用下层协议,上层从下层接到的数据进行解析并去掉一个报头
③下层协议给上层协议提供服务支持,下层给从上层接收到的数据添加一个报头
④上层协议不需要了解下层协议的细节,只管使用
下层协议隐藏了服务的细节
(类似于封装)
①OSI七层模型
注意:OSI 七层模型既复杂又不实用;所以 OSI 七层模型没有落地、实现,我们平时实现协议也不会通过OSI模型,而是通过下面提到的TCP/IP五层模型,对于OSI模型我们只需要了解即可!!!
②TCP/IP五层(或四层)模型
一般实现协议都是基于TCP/IP模型
(下面详细说)
描述网络通信中一些基础设施需要遵守的规范和约定
比如网线啥样、网口啥样、光/电信号的传递方式
作为TCP/IP模型的最底层
注意:一般我们算上物理层,就是TCP/IP五层模型
注意:如果我们不算物理层,就是TCP/IP四层模型
作用就是调制和解调
(有一种东西叫调制解调器,我们一般称之为猫)
(因此我们所说的光猫就是对光信号进行调制和解调)
描述相邻节点之间,数据如何传输
(负责设备之间的数据帧的传送和识别)
比如我从上海到西安,有很多不同的乘坐方式
(我可以先从上海到江苏,我坐高铁;然后从江苏到西安,坐飞机)
作为TCP/IP模型的第二层
主要协议:以太网
规划数据传输的路径
(负责地址管理和路由选择)
比如我从上海到西安,有很多不同的路线
(我可以先从上海到江苏再从江苏到西安)
作为TCP/IP模型的第三层
主要协议:IP协议
(协议里面有源IP和目标IP)
数据从哪里出发,要到哪去
只关注起点和终点,不关注过程
(负责两台主机或者两个节点之间的数据传输)
比如我坐飞机从上海到西安,我只需要知道起点是上海终点是西安,至于飞机怎么飞、飞行路线经过哪里我都不管也不用知道
作为TCP/IP模型的第四层
主要协议:TCP、UDP
(协议里面有源端口和目标端口)
描述拿到数据后需要干什么
(负责应用程序间沟通)
比如我上网买了一个篮球,我拿来自己打或者送别人,具体怎么用,自己定义
作为TCP/IP模型的第五层
每个应用程序的应用层协议大多数都是不一样的
①我们作为程序猿,和应用层、传输层打交道比较多
②对于应用程序来说,它们的应用层采用的协议大多数都是不一样的
比如qq有qq的应用层协议,微信有微信的应用层协议
③对于一台主机,它的操作系统内核实现了从传输层到物理层
即是TCP/IP五层模型的下四层
④对于一台路由器,它实现了从网络层到物理层
即是TCP/IP五层模型的下三层
(俗称三层路由器)
⑤对于一台交换机,它实现了从数据链路层到物理层
即是TCP/IP五层模型的下两层
(俗称二层交换机)
⑥对于集线器,它只实现了物理层
网络之间数据的传输
通过上面的知识点,在这里我们理解网络通信就容易很多
在TCP/IP协议中,用五元组来标识一个网络通信
①源IP:标识源主机
②目的IP:标识目的主机
③源端口号:标识源主机中该次通信发送数据的进程
④目的端口号:标识目的主机中该次通信接收数据的进程
⑤协议号:标识发送进程和接收进程双方约定的数据格式
类似于快递:
发送方,从TCP/IP模型从上到下,依次添加报头的过程
(类似在打包快递)
接收方,从TCP/IP模型从下到上,依次解析报头的过程
(类似在拆开快递)
对于发送方(封装)来说,上层的数据每到下层就往最前面添加当层协议的头
对于接收方(分用)来说,下层的数据每到上层就去除当层协议的头
①传输层:例如传输层的UDP协议的UDP报头就包括源端口和目标端口
②网络层:例如网络层的IP协议的IP报头就包括源IP和目标IP
通过A给B用QQ发消息为例子进行详细说明数据是如何通过网络传输的!!!
①发送方A:从上往下,封装,一层一层包裹
(图有点长,可选择右键图片,点击在新标签页打开图像,然后放大,此时图片就清晰了)
②接收方B:从下往上,分用,一层一层解开
(图有点长,可选择右键图片,点击在新标签页打开图像,然后放大,此时图片就清晰了)
③总图: