您的位置:首页 > 理论基础 > 计算机网络

理解网络基础

2015-03-07 23:07 183 查看
网络的实质是数据传输,网络编程就是对如何传输数据进行编程。教材里讲过互联网并不是第一个可用来传输数据的工具,但它是目前最流行的,为什么?因为互联网的实质就是提供了一个传输数据的通道,并且规定了数据在这个通道内如何传输。所以互联网之所以流行,是因为它的规定得到了大众的认可,变得越来越流行,于是规定就成为了标准。那互联网是如何传输数据的?

首先,数据传输最直观的理解至少需要三样东西:

发送数据的设备

接收数据的设备

传输数据的电缆

这就跟小时候用铜线和空瓶做的“土电话”一样,虽然简单,但已可见到数据传输模型的雏形。在这里,电缆就是传输数据的实体,在这个实体之上通过电信号传载数据。

传的什么数据呢?既然是电线,就只能传0和1。不过,没关系,我们的发送和接收设备幸好是电脑,电脑本身也只能处理0和1,计算机所做的工作就是处理0和1,这个相信大家都认可。

如果电脑只能处理0和1是没有意义的,为了让0和1能表示更多的数据和进行更复杂的计算,可以对0和1进行编码组合,于是规定8位0或1表示1个字节,而不同的字节又表示不同的数据类型,从机器语言到汇编语言,再到高级语言,通过一层一层的抽象和封装,最终用很简洁的方式来操作底层的电信号0或1。

计算机对0或1进行处理和存储,0和1代表的是内存,固定不变的,用8位表示一个字节,可以区分不同的数据,让这些内存变得有意义;在网络上,它也可以,但多一个问题,这个数据需要被传输,所以它不仅需要有意义,还需要能表示:

传给谁

谁传来的(否则接收方无法判断数据来源,那就糟了)

传输的数据大小(也可理解为传输何时开始何时停止)

所以这个时候,那些能提供电缆的公司,自然就开始规定在他们的电缆上,以上的数据如何标识。最终以太网胜出,也就是现在的互联网,而它所提供的的网络模型就规定:

所有的数据按“帧”传输(自然发送和接收方也只能按帧发送或接收)

每一帧都包含了自身的信息(自然也就必须包含前面提到的三个问题)

每一帧(Frame)包含两个部分:标头(Head)和数据(Data)。Data是实际需要被传输的数据,Head就是这些数据的元数据,包括:发送者和接收者信息,数据本身信息(帧类型,数据长度,校验位等)。

这里不需要详细了解元数据的格式,只需要记住和明白,此时还TCP/IP的身影还没有出现,所以标头里的发送者和接收者是如何标识的?没错,就是电脑的mac地址。我把数据发出去,发给谁,就用那台电脑的mac地址来标识,它收到后怎么知道是谁发给它的,那就用我的电脑的mac地址来标识。

这个mac地址全世界独一无二,长度是48个二进制位,常用12个16进制数表示。

而互联网上电缆很多,不光有电缆,还有其他传输工具,还有无线网络和路由器,我怎么保证发出的数据帧一定能够到达对方的电脑呢?毕竟电信号本身是没有方向的。

理论上,有了以上内容,在全世界范围内通信都没有问题,可是呢?我们现在并没有这么做就一定有它的道理。主要有两个原因:

效率极低

安全,想想如果所有人都知道所有人的电脑mac地址,并且可以随意发送数据,那会怎样?

所以,mac地址必须被隔离,它应该是比较私有的信息,在这个信息之上我们可以用另一套更安全的地址来进行网络设备的标识和数据传输。于是就有了网络地址,简称网址,也就是IP地址。mac地址是私有的,网络地址是分配的,想上网首先得有网址。

IP地址起着和mac地址一样的作用,但它是建立在数据帧之上的,所以传输数据的时候前面的数据帧中的头部没有变化,但数据部分有了更明确的规定。这个数据就是IP数据。IP数据包也包含有头部和和数据两个部分,头部存放的是目的和源IP地址以及其它一些元数据信息。IP数据包的最大长度是65535字节,头部信息最少20字节,最大60字节,所以IP数据包最长可能有65515字节数据,而以太网的数据部分最长只有1500个字节,所以如果IP数据包过长,就需要切分到几个帧里去发送。

有了IP地址,既提高了效率,也更加安全,两台计算机之间可以相互交流了,但现在面临的问题是,一台电脑上有多个应用程序,如何确定某个IP数据包是发给计算机上的哪个程序的?即使是遍历所有应用程序,IP数据包本身也应该有该应用程序的标识。

此时,IP数据包的数据部分会发生和数据帧一样的变化,变得更加明确,同样这部分数据改了个名称,叫TCP数据包,而TCP数据包中存放了某台计算机上某个应用程序的标识,而按照规定,用一个整数,也就是端口号来标识此应用程序。计算机上一个端口只能被一个程序占用,所有当计算机收到IP数据包后,从中取出TCP数据包,再从TCP数据包中取出端口号,就能知道该数据属于哪个应用程序。TCP数据包也有标头和数据两个部分。

有了TCP/IP数据包,就能完成复杂的网络功能。http协议就是构建在TCP/IP之上的一个应用层协议,它的原理前面的几个数据包一样,首先,此时的TCP数据包不再是单纯的数据,它变得更加明确,一般来说有3个部分:

http请求URL:包括请求方法,请求URI,以及协议版本

http请求头:各种key value的pair

http请求体

在上面提到的每一层还有其他很多协议,虽然协议的具体内容不同,但大致构建模式是一样,只是为了满足不同的需求,在格式上稍有不同,理解了本文所描述的场景,基本上也就能对网络编程有一个基础的认识。接下来就是深入到每一个协议和系统提供的API进行编程实践了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: