计算机网络基础篇
计算机网络基础
发展背景
计算机网络的诞生诞生可以追溯到20世纪60年代,当时美国国防部高级研究计划署(ARPA)启动了一个名为ARPANET的项目,旨在建立军事目的的分布式通信网络,使得网络中的任何一台计算机都可以与其他计算机互相通信。ARPANET项目的启动,也标志着当代计算机网络的诞生。
建立计算机网络的目的:信息传递,资源共享
网络拓扑结构
随着发展,接入网络的计算机从两台到三台,然后越来越多,网络的规模和复杂性也会随之增长。
网络扩大的两个要素:
-
节点增多
-
传输距离延长
简单地说就是指网络中的设备变多了,同时设备和设备之间的的物理距离变得更远了。
随着传输距离延长,必然会面临介质传输带来的问题:
-
信号衰减 — 电压下降
-
波形失真 - 电磁干扰
一种叫“中继器”的网络设备可以用来扩大网络传输的距离,工作的基本原理就是接收、放大和重新发送信号。从而帮助信号克服传输过程中的衰减。
当网络达到一定规模时,用什么方式把网络中的计算机等设备连接起来就非常重要了。
网络拓扑(Network Topology)是指网络中各个节点如何连接和排列的物理或逻辑结构。网络拓扑在设计网络、确保其可靠性和性能方面起着重要作用。
基本的网络拓扑结构:
-
总线型拓扑:所有的节点都连接到一个公共的通信介质上,如一条长电缆。
-
环型拓扑:每个节点都连接到另外两个节点,形成一个闭合的环路。
-
星型拓扑(性价比高):每个节点都通过单独的线路直接连接到一个中心节点(集线器)。
-
网状拓扑:每个节点都可能与多个其他节点相连。
交换机和路由器
在聊交换机之前,先聊聊它的前身 -- 集线器。
在网络技术发展的早期阶段,集线器(Hub)可以将网线集结起来,实现最初级的网络互通,是连接多台计算机和其他网络设备的主要设备。
集线器虽然可以接入多台设备,但它并不能分辨具体信息转发给那台设备,并且同一时间内只能有一个设备发送数据。如果两个设备同时发送数据,会发生碰撞,导致数据传输失败,设备需要重发数据。
交换机
随着网络技术的发展,交换机(Switch)被引入以解决集线器的局限性,交换机在集线器原有的功能上,增加了寻址能力和交换功能。
为了解决地址问题(区分标识不同的设备):
MAC地址(Media Access Control Address)是一种用于标识网络设备的唯一地址(物理地址)。它由48位二进制数组成,以16进制表示。前3~24位是由IEEE决定如何分配给每一家制造商,且不重复,后24位是实际生产该网络设备的厂商分配的串号,具备唯一性。
交换机可以识别每台设备的MAC地址,并根据目标MAC地址将数据包转发到正确的端口。这种方式也称为存储转发。原因是交换机会先将整个数据包存储在缓存中,然后再将其转发到目标设备。
交换机转发数据包的过程:
当一个数据包来到交换机之后,交换机会根据数据包中的源目MAC地址进行转发。转发之前会先存储,根据源MAC地址记录自身接口和相连主机的MAC地址的对应关系,之后再进行转发。转发过程中会查看自身的MAC地址表,如果MAC地址表存在相应的记录,则按照MAC地址表中的记录进行转发;如果没有记录,则将数据包转发到所有端口,使得所有设备都可以接收到该数据包。
从某个端口收到数据,然后再从除接收端口外的所有端口转发出去,在网络中称之为泛洪。
路由器
路由器(Router)用于连接多个网络,并在多个网络之间转发数据包。
路由器可以在不同的网络之间进行转发,实现不同网络范围的通信。也就是说,不同网络之间必须用路由器传输数据,否则无法通信。路由器会根据自身的路由表转发数据包。根据数据包的目的IP地址,决定最佳的路径并将数据包转发到下一个路由器或最终目的地。
路由器可以实现:
-
隔离泛洪范围(分割广播域):意味着广播流量不会跨越路由器传播,从而提高网络效率。
-
单播转发:根据数据包IP地址,使用路由表来确定数据包的转发路径。
IP地址
IP地址,每台电脑的身份证?
IP地址(Internet Protocol Address)是一种用于标识网络设备的唯一地址(逻辑地址),它又分为IPv4和IPv6两种类型。
IPv4
IPv4是32位的地址,通常表示为4个十进制数,每个数字的取值范围是0到255。
例如:192.168.0.1(11000000.10101000.00000000.00000001)
为了方便记忆采用了点分十进制的标记方式,也就是将32位IP地址以每8位为一组,共分为4组,每组以.
隔开,再将每组转换成十进制。
IPv6
地址由128位二进制数构成,以冒号分隔的十六进制表示。连续零可以缩写为::
但这种缩写在每个地址中只能使用一次。
例如:2001:0db8:0000:0000:0000:0000:0000:0001 可以缩写为 2001:db8::1。
IPv6的引入是为了解决IPv4地址耗尽的问题。
子网掩码
子网掩码(Subnet Mask)是一种用于划分IP地址的标识符。它由32位二进制数构成(必须由连续的0和连续的1构成),子网掩码的作用就是将某个IP地址划分成网络地址和主机地址两部分。
例如:
IPv4:192.168.1.1
mask:255.255.255.0
192.168.1.1: 11000000.10101000.00000001.00000001
255.255.255.0: 11111111.11111111.11111111.00000000
# 前24位是网络地址,后8位是主机地址
ARP协议
ARP协议(Address Resolution Protocol)是一种用于将IP地址转换为MAC地址的协议。
在计算机网络中,每个设备都有一个唯一的MAC地址和IP地址。MAC地址用于在局域网中标识设备,而IP地址用于在互联网中标识设备。当一台设备需要与另一台设备通信时,它需要知道目标设备的MAC地址。ARP协议就是用来解决这个问题的。
ARP的工作过程:
当一台设备需要知道另一台设备的MAC地址时,它会广播一个ARP请求,请求目标设备回复自己的MAC地址。目标设备收到请求后,会回复一个ARP响应,其中包含自己的MAC地址。这样,请求设备就可以将目标设备的MAC地址缓存起来,以便后续的通信使用。
IP地址的分类
IP地址最初被设计分成了5类,分别是A类、B类、C类、D类、E类。
-
A类地址:指第一个字节的最高位为0的IP地址,范围从0.0.0.0~127.255.255.255。可用的网络数量是2^7-2=126,每个网络可以拥有2^24-2= 16777214台主机。
-
B类地址:指第一个字节的最高位为10的IP地址,范围从128.0.0.0~191.255.255.255。可用的网络数量是2^14=16384,每个网络可以拥有2^16- 2=65534台主机。
-
C类地址:指第一个字节的最高位为110的IP地址,范围从192.0.0.0~223.255.255.255。可用的网络数量是2^21=2097152,每个网络可以拥有2^8-2=254台主机。
-
D类地址:用于多播,范围从224.0.0.0~239.255.255.255。
-
E类地址:E类地址是保留地址,用于实验和研究,范围从240.0.0.0~255.255.255.255。
私有地址(Private IP Addresses):用于局域网内部通信,不通过公共互联网路由。
-
A类私有地址:10.0.0.0到10.255.255.255
-
B类私有地址:172.16.0.0到172.31.255.255
-
C类私有地址:192.168.0.0到192.168.255.255
特殊IP地址
-
主机位全0的地址:这样的地址代表范围,指定某个网络。
-
主机位全1的地址:指定某个网络下的所有主机,用于广播,广播地址。
-
255.255.255.255受限广播地址:代表广播域内所有的主机,受到路由器的限制。
-
0.0.0.0通配地址:用于表示所有网络接口或所有主机。
-
127.0.0.1本地回环地址:虚拟的地址,用来测试主机的网络接口是否正常工作。
-
169.254.0.0/16 APIPA地址:动态获取地址时,没有获取到地址情况下,自己给自己分配的地址。
无类地址
无类地址(Classless Address)是一种不依赖于IP地址分类的地址表示方法,也称为无分类域间路由选择(CIDR)。
CIDR地址表示方法使用了一个斜杠/
和一个数字来表示网络前缀的长度,例如192.168.1.0/24
表示网络前缀为192.168.1.0
,子网掩码为 255.255.255.0
。
VLSM — 可变长子网掩码(子网划分)
VLSM是一种子网掩码的使用方法,它允许在同一个网络中使用不同长度的子网掩码,从而更有效地利用IP地址空间。
192.168.1.0/25
192.168.00000001.0 0000000
192.168.00000001.0 1111111
# 前25位为网络号,后7位为主机号
192.168.1.0/26
192.168.1.00 000000
192.168.1.00 111111
# 前26位为网络号,后6位为主机号
# 可用ip地址的数量62(2^6-2):192.168.1.1 — 192.168.1.62
例:一个公司分了5个部分,需要我们划分网段172.16.0.0/16,分给5个部门。
172.16.00000000.00000000
主机号借3位,2^3=8,可以划分8个网段,每个网段可用ip地址数量(2^(32-19)-2)
172.16.000 00000.00000000 19 172.16.0.1 - 172.16.31.254
172.16.001 00000.00000000 19 171.16.32.1 - 172.16.63.254
172.16.010 00000.00000000 19 171.16.64.1 - 172.16.95.254
172.16.011 00000.00000000 19 171.16.96.1 - 172.16.127.254
172.16.100 00000.00000000 19 171.16.128.1 - 172.16.159.254
172.16.101 00000.00000000 19 171.16.160.1 - 172.16.191.254
172.16.110 00000.00000000 19 171.16.192.1 - 172.16.223.254
172.16.111 00000.00000000 19 171.16.224.1 - 172.16.255.254
可以选择其中5个分给这5个部门,其余留作后续的扩展。
子网汇总
子网汇总(Supernetting)是一种将多个子网合并成一个更大的网络的方法,以便更好地利用IP地址。
子网汇总需要满足一些条件,例如,被合并的子网必须是连续的、没有重叠的,它们的子网掩码必须相同或者可以通过变换得到相同的子网掩码。
子网汇总的方法:取相同,去不同。
192.168.1.0/24和192.168.2.0/24子网汇总
192.168.00000001.00000000 24
192.168.00000010.00000000 24
相同的部分为前22位,保留下来,剩下的10位全部补零即可:
192.168.000000 00.00000000 24
192.168.0.0/22
OSI七层参考模型
计算机网络的世界可以说是通过各种标准和协议构建起来的世界。
OSI模型,开放式通信系统互联参考模型(Open System Interconnection Reference Model),是国际标准化组织(ISO)提出的一个试图使各种计算机在世界范围内互连为网络的标准框架,简称OSI(OSI/RM)。
思想:分层
-
更利于标准化。
-
降低各层次之间的关联性:某一层协议的增加或者减少,尽量不要影响其他层次。
OSI模型的每一层都依赖于下一层所提供的服务,并且为上一层提供服务。在实际应用中,TCP/IP模型更为普遍,但OSI模型仍然是理解网络通信原理的重要基础。
OSI七层模型的七个层次
-
应用层
为用户的应用进程提供网络通信服务,包括各种协议,具体的面向用户的应用。
-
表示层
提供数据格式、变换和编码转换,从应用层接收消息,转换格式,并传送到会话层。
-
会话层
负责在网络中的两节点之间建立、维持和终止通信。
负责执行会话规则(如连接是否允许半双工或全双工通信)、同步数据流以及当故障发生时重新建立连接。
-
传输层
在源端与目的端之间提供可靠的透明数据传输。
-
网络层
确定数据包从源到目的地的路由路径,进行逻辑地址寻址,负责端到端的数据的传输。
路由器 — IP地址(逻辑地址)
-
数据链路层
电信号与二进制之间的转换,接收来自物理层的位流形式的数据,并封装成帧,传送到网络层。
交换机 — MAC地址(物理地址)
-
物理层
负责在物理媒介上传输原始的比特流。
定义物理设备标准,如电缆、连接器的电气特性、布线等。
TCP/IP模型
TCP/IP协议簇
TCP/IP协议簇是一个四层协议系统,自顶向下分别是:应用层、传输层、网络层、网络接口层。每一层完成不同的功能,且通过若干协议来实现,上层协议使用下层协议提供的服务。
协议
为了完成计算机之间有序的信息交换,提出了通信协议的概念,其定义是相互通信的双方(或多方)对如何进行信息交换所必须遵守的一整套规则。
协议数据单元
协议数据单元PDU(Protocol Data Unit)是指对等层次之间传递的数据单位。
-
应用层 — 数据报文(message)
-
传输层 — 数据段(segment)
-
网络层 — 数据包(packet)
-
数据链路层 — 数据帧(frame)
-
物理层 — 比特流(bit)
封装与解封装
封装:每一层都把上一层的协议包当成数据部分,加上自己的协议头部,组成自己的协议包。
解封装:封装的逆过程,可以理解为还原数据的过程。
应用层
是TCP/IP模型中的最顶层,它直接为用户的应用程序提供网络服务。应用层处理与应用软件的接口,使得应用程序能够访问网络功能。
应用层只需要专注于为用户提供应用功能。比如常见的服务HTTP/HTTPS、FTP、SMTP、DNS、SSH等。
传输层
应用层的数据报会传给传输层,传输层是为应用层提供网络支持的。主要作用是提供端到端的数据传输服务,确保数据在网络中的传输是可靠和有序的。
在传输层会有两个传输协议,分别是TCP和UDP。
TCP的全称叫传输控制协议(Transmission Control Protocol),大部分应用使用的正是TCP传输层协议,比如HTTP应用层协议。TCP相比UDP多了很多特性,比如流量控制、超时重传、拥塞控制等,这些都是为了保证数据包能可靠地传输给对方。
UDP相对来说就很简单,简单到只负责发送数据包,不保证数据包是否能抵达对方,它实时性相对更好,传输效率也高。
TCP和UDP的区别
-
TCP是面向连接(TCP三次握手)的协议,而UDP是无连接的协议。
-
TCP的传输是可靠的 —— 排序、确认、重传、流控,而UDP的传输是不可靠的。
-
TCP可以进行流控(滑动窗口机制),而UDP不行。
-
TCP可以进行分段,而UDP不能。
-
TCP转发数据包的速率慢,并且占用资源比较多。UDP的转发效率高于TCP,并且占用资源也会少一些。
应用场景:TCP更加适用于对数据包可靠性要求较高的情况,比如说传输文件,邮件等,而UDP适用于对可靠性要求较低,但是对转发效率要求较高的场景,比如说,即时通讯类。
TCP报头
TCP的报头组成:源端口、目的端口、 序号、确认号、 首部长度、保留位、标志位、窗口、 检验和、紧急指针。
-
源目端口号:各占2个字节,分别写入源端口和目的端口,即表示来源和目标的进程。
-
序号:占4个字节,TCP连接中传送的字节流中的每个字节都按顺序编号。
-
确认号:占4个字节,是期望收到对方下一个报文的第一个数据字节的序号。
-
首部长度:占4位,它指出TCP报文的数据距离TCP报文段的起始处有多远。
-
保留位:占6位,保留今后使用,但目前应都位0。
-
标志位:重要的三个,确认ACK,仅当ACK=1时,确认号字段才有效;同步SYN,在连接建立时用来同步序号;终止FIN,用来释放一个连接。
-
窗口大小:占2字节,指的是通知接收方,发送本报文你需要有多大的空间来接收。
-
检验和:占2字节,校验首部和数据这两部分。
-
紧急指针:占2字节,当URG=1时才有意义,指出本报文段中的紧急数据的字节数。
TCP报头最小20字节,没有选项字段(只有前5行)
TCP三次握手
TCP是面向连接的协议,所以使用TCP前必须先建立连接,而建立连接是通过三次握手来完成的。三次握手可以确保双方同时具备完整的发送和接收数据的能力。
-
一开始,客户端和服务端都处于
CLOSE
状态。先是服务端主动监听某个端口,处于LISTEN
状态。 -
第一次握手,客户端会随机初始化序号(c_seq_num = x),将此序号置于TCP首部的序号字段中,同时把SYN标志位置为1,表示SYN报文。接着把第一个SYN报文发送给服务端,表示向服务端发起连接,该报文不包含应用层数据,之后客户端处于
SYN-SENT
状态。 -
第二次握手,服务端收到客户端的SYN报文后,首先也随机初始化自己的序号(s_seq_num = y),将此序号填入TCP首部的序号字段中,其次把TCP首部的确认号字段填入
x+1
,接着把SYN和ACK标志位都置为1。最后把该报文发给客户端,该报文也不包含应用层数据,之后服务端处于SYN-RCVD
状态。 -
第三次握手,客户端收到服务端报文后,还要向服务端回复一个应答报文,首先该应答报文TCP首部ACK标志位置为1 ,其次确认号字段填入
y+1
,最后把该报文发送给服务端,这次报文可以携带客户到服务端的数据,之后客户端处于ESTABLISHED
状态。 -
最后,服务端收到客户端的应答报文后,也进入
ESTABLISHED
状态。
一旦完成三次握手,双方都处于ESTABLISHED
状态,此时连接就已建立完成,客户端和服务端就可以相互发送数据了。
TCP四次挥手
TCP 断开连接是通过四次挥手方式的方式完成,双方都可以主动断开连接,断开连接后主机中的资源将被释放。
-
第一次挥手,客户端发送一个FIN标志位被置为1的报文,即FIN报文,告诉服务器需要关闭连接。之后客户端进入
FIN_WAIT_1
状态。 -
第二次挥手,服务端收到该报文后,会发送一个ACK的确认包,告诉客户端接收到关闭的请求。发送完成后,服务端进入
CLOSE_WAIT
状态,客户端收到这个包后,进入FIN_WAIT_2
状态,等待服务器关闭连接。 -
第三次挥手,等待服务端处理完数据后,服务端准备好关闭连接时,也向客户端发送FIN报文,告诉客户端准备关闭。之后服务端进入
LAST_ACK
状态,等待客户端确认。 -
第四次挥手,客户端接收到服务端的关闭请求,再发送一个ACK的确认包,进入
TIME_WAIT
状态,服务端收到了ACK应答报文后,就进入了CLOSE
状态,服务端已经完成连接的关闭。客户端在经过2MSL一段时间后,自动进入CLOSE
状态,此时客户端也完成了连接的关闭。
每个方向都需要一个FIN和一个ACK,因此通常被称为四次挥手。
TCP流量控制 — 滑动窗口机制
滑动窗口,是TCP使用的一种流量控制方法。该机制允许发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输。
假定发送方设备以每一次三个数据包的方式发送数据,也就是说,窗口大小为3。发送方发送序列号为1、2、3的三个数据包,接收方设备成功接收数据包,用序列号4确认。发送方设备收到确认,继续以窗口大小3发送数据。当接收方设备要求降低或者增大网络流量时,可以对窗口大小(WIN值)进行减小或者增加。
TCP分段大小
-
MTU最大传输单元,MTU规定了数据到数据链路层的大小不能超过1500字节。
-
MSS最大段长度(
MTU - 网络层报头(最短20字节) - 传输层报头(最短20字节)
)= 1460字节
一句话总结TCP:面向连接的,可靠的,基于字节流的。
而UDP相较于TCP简单很多,UDP的报头组成:源端口号16位,目的端口号16位,包长度16位,校验和16位。
一句话总结UDP:面向无连接的,面向报文的。
网络层
IP协议在TCP/IP参考模型中处于第三层,也就是网络层。网络层的主要责任是处理数据包从源到目的地的传输和路由选择。
IP报头
-
版本:占4个位,标识目前采用的IP协议的版本号(0100-IPv4,0110-IPv6)。
-
首部长度:占4个位,这个字段的作用是为了描述IP包头的长度,因为在IP包头中有变长的可选部分。
-
区分服务:占1个字节,定义包的优先级,时延,吞吐量,可靠性,传输成本。
-
总长度:占2个字节, 以字节为单位计算的IP包的长度(包括头部和数据),所以IP包最大长度65535字节。
-
标识:占2个字节,该字段和标志和片偏移字段联合使用,对大的上层数据包进行分段(fragment)操作。
-
标志:占3位,该字段第一位不使用。第二位是DF(Don't Fragment)位,DF位置为1时表明路由器不能对该上层数据包分段。如果一个上层数据包无法在不分段的情况下进行转发,则路由器会丢弃该上层数据包并返回一个错误信息。第三位是MF(More Fragments)位,当路由器对一个上层数据包分片,则路由器会在除了最后一个分片的IP包的包头中将MF位设为1。
-
片偏移:占13位,较长的数据包在分片后,某片在原分组中的相对位置,接收端靠此来组装还原IP包。
-
生存时间:占1个字节,TTL,当IP经过沿途的每一个路由器的时候,路由器会将IP包的TTL值减1。直到减到0时,该IP包会被丢弃。
-
协议:占1个字节,标识了上层所使用的协议。
-
首部校验和:占2个字节,只用来做IP首部的正确性检测,但不包含数据部分。
-
源和目的地址:各占4个字节,标识了这个IP包源和目的主机的IP地址。
IP分片
链路层的数据部分就是IP分组,该分组的MTU是1500字节,当网络层的IP分组超过了1500字节,此时就要进行分片。
-
标识
同一个IP数据报的分片,使用相同的标识。
-
标志
最高位是保留位,没有意义。
中间位DF=1时,不能分片;DF=0时,允许分片。
最低位MF=1时,表示后面还有分片;MF=0时,本分片就是该分组的最后一个分片,后面没有分片。
只有DF=0时,MF才有意义。
-
片偏移
较长的分组在分片后,中间的某个分片在原来的 IP 分组中的相对位置。片偏移以8个字节为偏移单位。
网络接口层
在TCP/IP模型中,网络接口层通常被认为是模型的最底层,它对应于OSI模型的物理层和数据链路层。网络接口层负责在物理媒介上实际传输数据帧。
生成了IP数据包之后,将IP数据报封装成MAC帧,以便在数据链路层传输。帧中包含MAC地址,确保数据帧能够正确地发送到相邻的网络设备。MAC头部是以太网使用的头部,它包含了接收方和发送方的MAC地址等信息,可以通过ARP协议获取对方的MAC地址。
网络接口层是网络通信的基础,它确保了数据可以在物理网络中实际传输。
若有错误,欢迎指正!o( ̄▽ ̄)ブ