点击此处查看最新的网赚项目教程
作者Torival,原文链接:
当我们决定要谈谈网络的时候,我想在谈之前,有必要了解一下“协议”这个词。协议,定义了在俩个或者多个通信实体之间交换报文的格式和次序,以及报文发送、接收报文或者其他的事件所采取的动作。定义都比较晦涩,那就让我们来个例子吧。
假设我要向你(互不相识)询问一下当前的时间;
我首先和你说:你好,以示我想要和你交流(发出报文,请求通信)。而你回应我(收到报文,通信建立):你好,表明能够继续询问你了。我发出询问(发出报文,包含事件处理):几点了?你看了看表(采取动作),然后回答我(收到报文,包含结果),2:00了。之后我说,谢谢(请求结束通信)。你说,不客气(通信结束)。
以上就是我们日常生活中所使用的协议。相类比计算机,其实也是相差不多的。不同的是,计算机毕竟不是人,所以得指定很多的协议,以保障它们正常的通信。比如以下几个常见的传输协议,当然不了解也没有关系,之后会详细的提及。
一、网络模型
既然存在多种协议,那么总需要一种结构把它们合理的组织在一起。而现如今的俩种模型,都是采用的层次结构。每一层通过在该层中执行某些动作或者使用直接下层的服务来提供服务。下面就先来看看这俩类分层结构:五层因特网模型(应用层,传输层,网络层,链路层,物理层)、OSI七层模型(应用层,表示层,会话层,传输层,网络层,链路层,物理层)。下面我们以五层模型为例,谈谈计算机网络。不过由于物理层涉及比较广,所以我们实际讨论的只有四层:应用层,传输层,网络层,链路层。
网络模型
信息传递过程
在网络中,我们经常会忽略具体的设备,而统一称为主机(host),或者端系统(end system)。比如智能手机,平板电脑,电视,游戏机,web相机等等……而主机与主机之间通过通信链路(communication link)和分组交换机(packet switch)连接在一起。分组交换机各式各样,但当今最著名的类型是路由器(Router)和链路层交换机(Link-layer switch),分别也称为,三层交换机,或者俩层交换机。由上图可以看出。
最后,来说一个小程序,tracert。通过它,可以确定从你当前的主机到目的主机之间经过了那些交换机。
## 运行cmdC:>tracert baidu.com通过最多 30 个跃点跟踪
到 baidu.com [123.125.114.144] 的路由:
1 4 ms 4 ms 3 ms 10.205.64.1
2 4 ms 2 ms 3 ms 192.168.24.2
3 * 11 ms 8 ms 124.93.192.65
4 341 ms 88 ms 310 ms 124.93.179.249
5 9 ms 5 ms 8 ms 61.189.75.13
6 12 ms 15 ms 14 ms 113.230.185.37
7 23 ms 22 ms 22 ms 219.158.21.69
8 24 ms 24 ms 32 ms 202.96.12.14
9 22 ms 23 ms 21 ms 202.106.34.194
10 22 ms 28 ms 154 ms 202.106.43.30
11 * * * 请求超时。
12 * * * 请求超时。
13 22 ms 22 ms 31 ms 123.125.114.144跟踪完成。
二、应用层
对于应用层,我想绝大多数人,应该是最熟悉的了。尤其是从事软件开发的人。这类应用程序体系结构是由应用程序研发者设计,不过多是利用的现代所流行的俩种主流体系结构之一:C/S结构(客户 – 服务器),P2P结构(对等体系)。
2×01.是什么在通信
对于学习过操作系统,或阅读过unix网络编程的人,对Tcp echo服务器应该不会陌生。当前进程通过fork()生成另外一个进程,一个进程发送一句话,然后另外一个接收到,并且显示在屏幕上。所以,我们可以想得到,在应用层而言,忽略下层数据传输细节,那么通信的其实就是进程。然而我们不怎么关注同一台主机上进程间的通信,而关注不同端系统上的进程间的通信。那么就不得不一个新东西:套接字,主机上应用层与传输层的接口,但是应用程序开发者对于传输层的控制仅限于:
2×02.网络应用
互联网从诞生到现在不过短短百年,但是对于人类社会的影响确实翻天覆地。试想,一百年前的时候,你能身处中华,却知道美国现在发生着选举大会吗?你能通过一个东西随身携带万卷书吗?你能实时与你远在他乡的好友实时通讯吗?不能,都不能。但是现在可以。那么接下来,就介绍几个极为流行的应用以及它的应用层协议吧。
如果你想在你的主机上发送一个DNS查询报文,那么就使用nslookup程序吧,它可以帮助你完成,前俩行是你的主机的DNS服务器的名字,以及ip地址。
## 运行cmdC:> nslookup baidu.com服务器: cache3-dlcityAddress: 202.96.69.38非权威应答:
名称: baidu.comAddresses:180.149.132.47
123.125.114.144
220.181.57.217
111.13.101.208
三、传输层
传输层协议为运行在不同的主机上的应用进程之间提供了逻辑通信,不需要考虑下层的实现细节,即使是相隔很远,也可以通过运用传输层的接口彼此发送报文。所以传输层协议是在端系统上而不是在路由器上。我们通过应用层,都知道,俩个主机之间通信就是俩个进程在通信。但是我们的电脑经常运行着很多的软件,QQ、网易云音乐、chrome…….那么怎么保证它们正常接收到自己的数据包呢?这里就要提出一个叫做端口的东西。端口,是一个16比特的数,其大小在0-65535之间,但是0-1023范围的端口称为公认端口,它们紧密绑定于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如:80端口实际上总是HTTP通讯,FTP一般使用端口(20,21),53为DNS服务的端口等等。
多路复用/分解:一个进程可以有一个或者多个套接字,就像FTP,但是一般一个套接字值绑定只一个端口号,那么在同一个时刻,一定存在着多个套接字,所以每个套接字都有自己唯一的标识符。用来区别于其他套接字。这样传输层就可以把不同的报文数据交付到正确的套接字上面,称为多路分解。而不同的套接字加上各种的壳,从而生成报文段,然后将报文段传递到网络层,称为多路复用。
3×01.UDP
为了说清楚UDP(User Datagram Protocol)协议,我想有必要简单的说明一下网络层的IP协议。IP协议的服务模型为尽力而为交付服务,这就意味着IP尽它“最大的努力”在通信的主机之间交付报文,但它不会做任何的保证。不保证报文段的交付,不保证报文段的按序交付,不保证报文段中数据的完整性。所以IP协议也被称为是不可靠服务。
就像IP协议是不可靠协议一般,UDP也是如此。但是尽管如此,有一些场合,还是很适合UDP的,比如交谈式音频/视频,这些应用能够承受一定程度的数据损失,因为那丢失的数据对于播放出现的干扰,并不是很致命。如果说应用程序开发人员在开发时选择了UDP,那么这个应用差不多就是直接与IP协议打交道了。我知道,你想说,既然UDP这么不好,为什么编程有时还选择这个。那是因为UDP在传输的速度上要很大的优于TCP协议。TCP提供很多的保障,但是保障的背后就是时间的代价。就像在相同算法下,C语言与其他高级语言运行时间明显有差别。UDP报文段结构
上图为UDP报文段结构,我们可以看出,相比较上层(应用层)传来的报文,多了四个字节,分别为,源端口号,目的端口号,长度(报文),校验和。通过后俩个传输数据,确定是否在移动中,其中的比特发生了改变。比如链路中的噪音干扰,或者存储在路由器时引入问题。有人可能会说怎么这个报文段里面没有对方或者自己的IP地址,那时因为IP地址是在下一层包装进去的。
3×02.TCP
tcp(Transmission Control Protocol)协议相比叫UDP协议,最为重要的就是比UDP多了俩项功能。
三次握手:
四次挥手:
四、网络层
网络层的作用从表面上看极为简单,就是把数据报从一台主机移动到另外一台主机上,为此,需要俩种重要的功能。当然,这一层有上面提到的IP(Internet Protocol)协议。
转发
在实际的网络中,每一个路由器,都会有多个输入端,就像(A,B),和多个输出端。并且在输入端使用了存储转发传输机制,这种机制是指在每个路由器能够开始向输出端传输该数据报的第一个比特之前,必须接受整个数据报。而在每一个输出端,都具有一个输出队列,它用于存储路由器准备发送到这个输出端的数据报。当然,既然是队列,还是在实际情况下,那么总会有输出队列被充满的时候,这个时候就会出现丢包(packet lost),到达的数据报或者已经在排队的数据报之一会被丢弃。
4×01.IPv4编址
我们知道,主机,路由器是通过一条条的物理链路链接在一起,而主机/路由器与物理链路的边界,我们常称其为接口。在ip协议中,要求每台主机/路由器的每个接口都拥有自己的ip地址,也就是说,一个路由器可能有多个ip地址。在IPv4中,规定IP地址长度为32比特,等价于四个字节。每字节最大255,所以ip最大为255.255.255.255。这些地址一般使用所谓的点分十进制记法书写,即地址中的每个字节用它的十进制书写,各字节之间以句点隔开。例如127.0.0.1。
IPv4编址
用ip的术语来说,互联的三个主机和一个路由器接口形成一个子网。ip编址为这个子网分配了一个地址:233.1.1.0/24,其中/24记法,有时也被称为子网掩码,指示了32比特中的最左24比特定义了子网地址。其他要连接在这个233.1.1.0/24网络的主机,其地址要求具有233.1.1.xxx的形式。ip地址通过限制特定长度的比特,对ip进行分类编址。如下。
类型范围
0.0.0.0 – 127.255.255.255
128.0.0.0 – 191.255.255.255
192.0.0.0 – 223.255.255.255
224.0.0.0 – 239.255.255.255
240.0.0.0 – 255.255.255.255
4×02.DHCP
试想,如果一个组织一旦获得一块地址,那么它就可以为本组织内的主机与路由器接口逐个分配ip地址。那么就不得不提出DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)协议了。DHCP具有将主机连接进一个网络的网络相关方面的自动能力,在早期,对于网络管理员,不得不手动执行这些认为任务,所以它的出现对于网络管理员非常吸引。
DHCP服务器
DHCP建立过程:
链路层
对于一个主机体系结构,链路层的主题部分是在网络适配器中实现的(有时也被称为网络接口卡)。而在网络适配器也具有自己的链路层地址。链路层的地址有各种不同的叫法:LAN地址(LAN address),物理地址(physical address),MAC地址(MAC 地址)。
既然有了网络层ip地址,为什么还要链路层的mac地址?那是因为要保证每层的独立性,假如在链路层的上层不是网络层,那么链路层该如何寻址?所以引入mac 地址。
那么在网络层和链路层之间适合转化的呢。这就是地址解析协议(ARP,Address Resolution Protocol)的功劳。ARP将一个ip地址解析为MAC地址的时候,很多方面与DNS类似。虽然DNS是将主机名解析成ip地址。
ip-mac地址
以上内容是最近看了几本书网络书籍的部分总结:
刚刚看到一个朋友推荐了一个web页面请求历程的拓展阅读,看了一下不是很全面,就找到了这个A Day in the Life of a Web Page Request。这篇文章讲了在访问google.com这个实际情况下,各个协议之间是如何分工进行的,如果全部理解的话,那对于网络体系结构也会有更深的理解。当然,如果手里有《计算机网络:自顶向下方法》 v6这本书的话,可以参考5.7节,因为那片文章就是这节的原文。没有的话,戳这里下载 (密码: xsyk)。
———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: cai842612