计算机网络基础
网络协议介绍
互联网的本质就是一系列的网络协议。一台硬设有了操作系统,然后装上软件就可以正常使用了。然而这样只能局限于拥有者一个人使用,如果每一个人都这样那么其实是彼此之间孤立且不互通的。将地理位置不同的且具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统就叫做计算机网络。
其实计算机和计算机之间的通信和两个人打电话之间的通信原理是一样的。比如中国有很多地区,如果一个新疆人和一个广西人打电话彼此都用着自己地区的方言。那么互相之间是谁都听不懂对方说什么的,但是如果统一说普通话,这两个人互相就能听得懂了。既然有了大家统一都说了普通话的标准,那么至少在中国范围内是全部都听得懂了。但是如果到了国外又不行了,外国人听不懂普通话呀,所以大家这时候就全部说英语。那就又能都彼此听得懂了。
网络协议其实也是和上面的道理是一样的,各个计算机为了能够互相之间进行通信,故而产生了一系列共同遵守的规则,这些规则就被称之为协议。网络硬件本就是基于协议运作的。
互联网协议的功能:定义计算机如何接入 Internet ,以及对已经接入 Internet 的计算机之间的通信制定标准。
大家可能经常听说过 OSI 七层网络协议以及 TCP/IP 网络通信协议等等。实际上这些多少层多少层的都是很抽象的东西,只是按照不同的协议实现的具体功能而划分出的这些层次(层次本身就是虚拟概念,是不存在的东西)。
OSI七层模型与TCP/IP五层模型介绍
如今的协议在教科书上一般都会介绍OSI七层协议与TCP/IP五层协议,但是现实生活中基本都是用的TCP/IP协议居多,理解OSI能够更好的理解TCP/IP协议。
每一层都运行的有不同的网络协议,实际上每一层的划分就是通过这些网络协议的功能来划分的。当然每一层也运行着常见的网络物理设备。
关于每一层的具体功能下面会逐一做详细的介绍。但是表示层和会话层这边不做具体的详解,感兴趣的朋友可以自己百度一下相关方面的资料。
TCP/IP五层模型之物理层
物理层主要负责基于电器特性发送高低电压 (电信号),高电压对应数字1低电压对应数字0,物理层就是负责线路联通和传输电信号,不断的101010来产生数据。数据本身是没有意义的,但是具有了相应的规则就会产生意义。
物理层包括(光缆,电缆,双绞线,无线电波等等...)
TCP/IP五层模型之数据链路层
数据链路层最大的作用就是对电信号来制定规则。因为单纯的电信号0和1是没有任何意义。必须要规定多少电信号位一组,每组什么意思,早期的时候各个公司都有自己的分组方式,后来形成了统一的标准。就是以太网协议 ethernet。
以太网协议规定一组电信号构成一个数据包,叫做帧。
每一数据帧分成:报头head和数据data两个部分。
Head 包含:(固定18个字节)
发送者 / 源地址 :6个字节
接受者 / 目标地址 :6个字节
数据类型: 6个字节
Data包含:(最短46字节,最长1500字节)
数据包的具体内容
Head + data = 最短64字节,最长1518字节。超过最大限制就分片发送。
MAC地址:
Head中包含的源和目标地址由来:ethernet规定接入Internet的设备必须要具备网卡。发送端和接收端的地址便是指的网卡的地址,即是MAC地址。
MAC地址在每一块网卡出厂时候都会被烧纸一个世界上唯一的MAC地址。长度为48位2进制。通常由12位16进制数表示,前六位是厂商地址,后六位是流水线地址。
广播:
有了MAC地址,同一网络内的两台主机就可以通信了。(一台主机通过ARP协议获取另一台主机的MAC地址)。ethernet采用最原始的方式,即广播的方式进行通信,即计算机通信基本靠吼。
TCP/IP五层模型之网络层
网络层由来:有了ethernet,MAC地址,广播的发送方式,世界上的计算机就可以彼此通信了,但是有一个问题就是说全世界范围内的互联网都是由一个个彼此隔离的小小的局域网组成,如果所有的通信都采用以太网的广播方式。那么一台机器发送的包全世界都会收到,这不仅仅是效率低的问题,更是一种灾难。
由于有太多的局域网了,必须找出一个方法来区分哪些计算机同属于一个广播域,哪些不是,如果是的话再采用广播的方式发送,如果不是就采用路由的方式(向不同的广播域 / 子网分发数据包),并且MAC地址是无法区分广播域的,它只跟厂商有关,于是网络层诞生了,主要功能:引入一套新的网络地址(非MAC地址)用来区分不同的广播域 / 子网。
因此网络层定义了一种叫做IP协议的东西。
IP协议
规定网络地址的协议叫做IP协议,它定义的地址称为IP地址,目前广泛采用V4版本。V4版本规定网络地址由32位2进制表示。
范围:0 . 0 . 0 . 0 ---> 255 . 255 . 255 . 255
IP地址通常用点分十进制来定义,例如:172.16.10.1
IP地址分为两部分即:
网络部分:标识子网
主机部分:标识主机
子网掩码
所谓”子网掩码”,就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.10.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。
知道”子网掩码”,我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。
比如,已知IP地址172.16.10.1和172.16.10.2的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?两者与子网掩码分别进行AND运算,
172.16.10.1:10101100.00010000.00001010.000000001
255255.255.255.0:11111111.11111111.11111111.00000000
AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0
172.16.10.2:10101100.00010000.00001010.000000010
255255.255.255.0:11111111.11111111.11111111.00000000
AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0
结果都是172.16.10.0,因此它们在同一个子网络。
总结一下,IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络。
IP数据包
IP数据包和数据帧是一样的,都是有一个head和data。在head里也包括了目标IP地址和自身的IP地址。但是网络层的数据包和数据链路层的数据包都是基于物理层端口传输出去的,这就产生了一个问题,有两个包。怎么解决呢?其实只要把IP数据包放到ethernet数据包的data部分就好了。最后通过物理层电信号发送出去。最终的数据帧就变成了下图。
Arp协议
数据链路层的协议,此处举例是为了与网络层IP协议配合完成通信
ARP协议作用:广播的方式发送数据包获取主机的MAC地址。
协议工作方式:每台主机的IP地址都是已知的。
1.准备发送数据
2.分析目标IP是否与自身存在于同一广播域(是)
3.查看自身ARP缓存 (IP地址,MAC地址 一一对应)
4.如果没有则吼一声 目标MAC填写12个F 目标IP填上对应的目标IP地址
5.所有当前广播域计算机收到该包,拆开一看如果IP是自己则告诉发送方自身的MAC地址
6.发送方拿到回应信息,更新ARP缓存
7.接下来的通信将不用通过广播的方式发送,而是点对点的进行通信
ARP协议外网通信过程:
1.准备发送数据
2.分析目标IP是否与自身存在于同一广播域(不是)
3.查看自身ARP缓存
4.目标IP填写网关IP,目标MAC填写12个F
5.网关回应,拿到网关MAC地址,更新ARP缓存
6.目标IP填写目标的IP地址,目标MAC填写12个F
7.开启漫长的路由过程,通过IP地址去找目标计算机的广播域,并拿到其目标MAC地址
8.发送方拿到回应信息,更新ARP缓存
9.接下来的通信将不用再去先获取网关的MAC地址了,而是通过路由点对点的与外网目标计算机进行通信
TCP/IP五层模型之传输层
传输层的由来,就是在网络层前提下产生来的。打个比喻,有了IP地址,有了MAC地址我们确实是能和目标计算机进行通信。但是问题是怎么具体和目标计算机怎么通信呢?通过QQ ? 微信?还是其他的通信软件?所以这个时候就需要使用端口,一个端口对应一个软件。而端口是和网卡绑定到一起的,网卡上有MAC地址,有IP地址。如果没有端口号,是找不到相应的应用程序的。
把局域网比作一个房间,IP地址表示目标计算机在哪个房间,MAC地址表示目标计算机坐在了哪里,端口号则表示了怎么和目标计算机进行沟通。是丢纸条?还是直接对话?
传输层就是基于端口的一个层面。而端口可指定的范围是0 - 65535,0 - 1024位系统占用端口。
TCP协议
可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度。以确保单个TCP数据包不会被分割。
UDP协议
不可靠传输,报头部分只有 8 个字节,总长度不超过65,535,正好放进一个IP数据包
TCP/IP五层模型之应用层
应用层就是属于跑应用程序的一层。
应用层的功能:规定应用程序的数据格式
例:TCP协议可以为各种各样的程序传递数据,比如Email,www,ftp等等,那么,必须有不同协议规定电子邮件,网页,ftp数据的格式。这些应用程序之间的协议就构成了应用层。
其他的比如:
表示层就是做一个数据的压缩和解压缩以及加密解密的协议。(不做详解)
会话层主要就是一些会话方面的协议而已。(不做详解)
我们其实在今后的学习中使用最多的也就是应用层,在应用层中我们可以定制属于自己的协议(其他层不行),需要注意的是我们自定制的协议必须也要是由Head和data两部分组成。
总结:数据包的的发送就是一个封装的过程,不断的封装解包封装解包。
IP地址并不是凭空产生的,而是由两种情况产生。
1.手动静态配置
2.通过DHCP服务器自动获取(基于UDP协议)
接下来我们就讲解通过DHCP服务器获取IP地址的这一套流程,首先这个请求IP地址的过程是通过UDP协议进行的,我们来看一下它的数据组成部分。
以太网标头 | IP标头 | UDP标头 | DHCP数据包 |
---|
以太网标头
包含本机MAC地址,DHCP服务器的MAC地址。由于我们刚开机,所以DHCP服务器的MAC地址是不知道的,所以这个时候通过ARP协议将接收方的MAC地址设为FF-FF-FF-FF-FF-FF。
IP标头
这一部分是设置发送方的IP地址与接收方的IP地址。由于我们刚开机,这两者都不知道,所以对于发送发也就是自身的IP地址来说填上0.0.0.0,而对于接收方的IP地址我们也不知道,就填上255.255.255.255
UDP标头
这一部分填入的发送方的端口与接收方的端口,由DHCP协议规定死的,发送方的端口是68,而接收方的端口是67
首先,这个数据包构造完成后会在当前广播域以广播的方式发送,同一子网内的所有计算机都会收到该数据包,由于接收方地址是FF-FF-FF-FF-FF-FF,所有的计算机都不知道这个包是要发给谁,当所有的计算机对该包进行拆包分析的时候就会看到发送方的IP地址是0.0.0.0而接收方的地址是255.255.255.255,进行到这一步DHCP服务器恍然大悟,原来这个包是发给我的。而其他计算机则可以丢弃这个包。
此时,DHCP服务器会分配好IP地址,并发送回一个“DHCP响应"的数据包,这个响应包的结构也是类似的。以太网标头的MAC地址是双方的网卡地址,IP标头的IP地址是DHCP服务器的IP地址(发送方)和255.255.255.255(接收方),UDP标头的端口是67(发送方)和68(接收方),分配给请求端的IP地址和本网络的具体参数则包含在Data部分。
新加入的计算机收到这个响应包,于是就知道了自己的IP地址、子网掩码、网关地址、DNS服务器等等参数。
浅析DNS服务
DNS( Domain Name System)是"域名系统"的缩写,它的主要职责就是提供域名解析服务。
其实我们的互联网通信绝大多数都是基于TCP/IP协议进行,有了IP地址加端口就可以找到全世界范围内独一无二的一台计算机上的一个网络程序。但是这样做会很麻烦因为我们根本不可能记住太多的毫无规则的IP地址。为了解决这种情况,出现了域名这个玩意儿,这玩意儿和IP地址一一对应,当你在浏览器内输入一个域名的时候就会通过DNS解析出它对应的IP地址。
那么,我们输入一个网址的时候是如何解析出其对应的IP地址呢?这个就有一系列非常复杂的过程(其本质也是通过UDP协议进行发包,因为速度快,不用建立双向链接通道)
我这里尽量用通俗的语言来阐述这一过程,在研究该过程之前我们先来研究一下域名的组成部分。
这里贴一张图,并附上一段视频链接感兴趣的朋友可以看一下里面介绍的很详细:域名详解视频
通常我们可以这么区分:
二级域:两个点如: www.baidu.com ; tieba.baidu.com等等
主机名: 如www,mail等等
域名解析流程:
1) 浏览器缓存
当用户通过浏览器访问某域名时,浏览器首先会在自己的缓存中查找是否有该域名对应的IP地址(若曾经访问过该域名且没有清空缓存便存在);
2) 系统缓存
当浏览器缓存中无域名对应IP则会自动检查用户计算机系统Hosts文件DNS缓存是否有该域名对应IP;
3) 路由器缓存
当浏览器及系统缓存中均无域名对应IP则进入路由器缓存中检查,以上三步均为客服端的DNS缓存;
4) ISP(互联网服务提供商)DNS缓存
当在用户客服端查找不到域名对应IP地址,则将进入ISP DNS缓存中进行查询。比如你用的是电信的网络,则会进入电信的DNS缓存服务器中进行查找;
5) 根域名服务器
当以上均未完成,则进入根服务器进行查询。全球仅有13台根域名服务器,1个主根域名服务器,其余12为辅根域名服务器。根域名收到请求后会查看区域文件记录,若无则将其管辖范围内顶级域名(如.com)服务器IP告诉本地DNS服务器;
6) 顶级域名服务器
顶级域名服务器收到请求后查看区域文件记录,若无则将其管辖范围内主域名服务器的IP地址告诉本地DNS服务器;
7) 主域名服务器
主域名服务器接受到请求后查询自己的缓存,如果没有则进入下一级域名服务器进行查找,并重复该步骤直至找到正确纪录;
8)保存结果至缓存
本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时将该结果反馈给客户端,客户端通过这个IP地址与web服务器建立链接。
13台根服务器 | ||
---|---|---|
URL | IP | 所在地 |
A.root-servers.net | 198.41.0.4 | 美国 |
B.root-servers.net | 192.228.79.201 | 美国(另支持IPv6) |
C.root-servers.net | 192.33.4.12 | 法国 |
D.root-servers.net | 128.8.10.90 | 美国 |
E.root-servers.net | 192.203.230.10 | 美国 |
F.root-servers.net | 192.5.5.241 | 美国(另支持IPv6) |
G.root-servers.net | 192.112.36.4 | 美国 |
H.root-servers.net | 128.63.2.53 | 美国(另支持IPv6) |
I.root-servers.net | 192.36.148.17 | 瑞典 |
J.root-servers.net | 192.58.128.30 | 美国 |
K.root-servers.net | 193.0.14.129 | 英国(另支持IPv6) |
L.root-servers.net | 198.32.64.12 | 美国 |
M.root-servers.net | 202.12.27.33 | 日本(另支持IPv6) |
除此之外DNS查询过程还分为递归查询和迭代查询两种模式。
递归查询
递归查询是一种DNS 服务器的查询模式,在该模式下DNS 服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机。如果DNS 服务器本地没有存储查询DNS 信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机。
迭代查询
DNS 服务器另外一种查询方式为迭代查询,DNS 服务器会向客户机提供其他能够解析查询请求的DNS 服务器地址,当客户机发送查询请求时,DNS 服务器并不直接回复查询结果,而是告诉客户机另一台DNS 服务器地址,客户机再向这台DNS 服务器提交请求,依次循环直到返回查询的结果
为止。