网络协议宏观总结

来源:互联网 发布:大学java期末考试题 编辑:程序博客网 时间:2024/06/08 13:34

对于小白,想了解互联网协议的可以看这篇文章,写的非常易懂。http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html,感谢作者。毕业设计正好也与协议有关,就先来了解下网络协议功能及实现。

我有个习惯,学习的时候总喜欢了解一件东西是怎么一步步形成的。对于互联网,一直都很好奇互联网是怎么运行的,一台电脑如何与另一台电脑通信的,他是怎么找到要通信的电脑的?以前查看相关资料的时候都会有分层、然后各种协议,不过读起来还是一脸的茫然,作者以全局的角度层层递进,每部分都讲到了核心的东西,抛开一些细枝末叶,让我们可以很好的对互联网的运行有一个直观上的理解。

若你是专业搞网络编程的,还需要仔细阅读各协议标准,本文只是给你一个宏观上的理解。

OSI模型将这些通讯标准进行层次划分,每一层次解决一个类别的问题,这样就使得标准的制定没那么复杂。OSI模型制定的七层标准模型,分别是:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层。虽然国际标准化组织制定了这样一个网络协议的模型,但是实际上互联网通讯使用的网络协议是TCP/IP网络协议。

TCP/IP中有两个重要的协议,传输层的TCP协议和互连网络层的IP协议,因此就拿这两个协议做代表,来命名整个协议族了,在说TCP/IP协议时,是指整个协议族。

"物理层",它就是把电脑连接起来的物理手段。它主要规定了网络的一些电气特性,作用是负责传送0和1的电信号。

单纯的0和1没有任何意义,必须规定解读方式:多少个电信号算一组?每个信号位有何意义?

以太网规定,一组电信号构成一个数据包,叫做"帧"(Frame)。每一帧分成两个部分:标头(Head)和数据(Data)。"标头"包含数据包的一些说明项,比如发送者、接受者、数据类型等等;"数据"则是数据包的具体内容。"标头"的长度,固定为18字节。"数据"的长度,最短为46字节,最长为1500字节。因此,整个"帧"最短为64字节,最长为1518字节。如果数据很长,就必须分割成多个帧进行发送。

我们已经知道,网络通信就是交换数据包。TCP/IP协议通信时,电脑A向电脑B发送一个数据包,后者收到了,回复一个数据包,从而实现两台电脑之间的通信。数据包的结构,基本上是下面这样:


发送这个包,需要知道两个地址:

  * 对方的MAC地址(以太网规定,连入网络的所有设备,都必须具有"网卡"接口。数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址。)

       * 对方的IP地址(使得我们能够区分不同的计算机是否属于同一个子网络。这套地址就叫做"网络地址",简称"网址"。)

有了这两个地址,数据包才能准确送到接收者手中。但是,MAC地址有局限性,如果两台电脑不在同一个子网络(在同一个子网络时可以采用广播的方式:读取这个包的"标头",找到接收方的MAC地址(ARP协议来获取MAC地址),然后与自身的MAC地址相比较,如果两者相同,就接受这个包,做进一步处理,否则就丢弃这个包。),就无法知道对方的MAC地址,必须通过网关(gateway)转发。


上图中,1号电脑要向4号电脑发送一个数据包。它先判断4号电脑是否在同一个子网络,结果发现不是(后文介绍判断方法),于是就把这个数据包发到网关A。网关A通过路由协议,发现4号电脑位于子网络B,又把数据包发给网关B,网关B再转发到4号电脑。

ARP协议

因为IP数据包是放在以太网数据包里发送的,所以我们必须同时知道两个地址,一个是对方的MAC地址,另一个是对方的IP地址。通常情况下,对方的IP地址是已知的,但是我们不知道它的MAC地址。所以,我们需要一种机制,能够从IP地址得到MAC地址。

这里又可以分成两种情况。第一种情况,如果两台主机不在同一个子网络,那么事实上没有办法得到对方的MAC地址,只能把数据包传送到两个子网络连接处的"网关"(gateway),让网关去处理。

第二种情况,如果两台主机在同一个子网络,那么我们可以用ARP协议,得到对方的MAC地址。ARP协议也是发出一个数据包(包含在以太网数据包中),其中包含它所要查询主机的IP地址,在对方的MAC地址这一栏,填的是FF:FF:FF:FF:FF:FF,表示这是一个"广播"地址。它所在子网络的每一台主机,都会收到这个数据包,从中取出IP地址,与自身的IP地址进行比较。如果两者相同,都做出回复,向对方报告自己的MAC地址,否则就丢弃这个包。

总之,有了ARP协议之后,我们就可以得到同一个子网络内的主机MAC地址,可以把数据包发送到任意一台主机之上了。

传输层的由来

有了MAC地址和IP地址,我们已经可以在互联网上任意两台主机上建立通信。接下来的问题是,同一台主机上有许多程序都需要用到网络,比如,你一边浏览网页,一边与朋友在线聊天。当一个数据包从互联网上发来的时候,你怎么知道,它是表示网页的内容,还是表示在线聊天的内容?

也就是说,我们还需要一个参数,表示这个数据包到底供哪个程序(进程)使用。这个参数就叫做"端口"(port),它其实是每一个使用网卡的程序的编号。每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。

"传输层"的功能,就是建立"端口到端口"的通信。相比之下,"网络层"的功能是建立"主机到主机"的通信。只要确定主机和端口,我们就能实现程序之间的交流。因此,Unix系统就把主机+端口,叫做"套接字"(socket)。有了它,就可以进行网络应用程序开发了。

 

电脑上网的首要步骤,是确定四个参数。

        *本机的IP地址,IP地址中用来标识设备所在网络的部分叫做网络ID标识网络设备的部分叫做主机ID。这些ID包含在同一个IP地址之中。

如:193.1.1.  200           131.107.  2. 1       75.    3. 78.  29

        网络ID  主机ID       网络ID  主机ID    网络ID  主机ID

IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络。
  * 子网掩码(确认子网)(它的网络部分全部为1,主机部分全部为0
  * 网关的IP地址
  * DNS的IP地址(因为IP不容易记,所以把IP转化成了域名,通过DNS服务器,才能知道某个域名的IP地址到底是什么

(一般是动态的,由DHCP服务器分配,新加入的计算机与DHCP服务器建立通信来获取一个包,新加入的计算机收到这个响应包,于是就知道了自己的IP地址、子网掩码、网关地址、DNS服务器等等参数。)

总结:


其中的应用层数据包是最上层的数据,例如显示的网页,需要用到的是http协议,那么应用层数据包就是根据http协议打包的一组数据。

发送数据,首先必须让别人知道你发送的是什么数据,让别人知道该怎么解读这些数据,所以需要按照一定的格式去发送,例如网页用的http,电子邮件读取协议(POP3和IMAP)、简单邮件传输协议(SMTP),自己的数据要按照相应的协议打包,这样别人才能解读。之后要考虑怎么把这个数据包发送出去,这就需要传输层TCP和UDP协议。然后按照TCP和UDP协议对上一个数据包打包,形成新的数据包,可以传输之后,还要知道把数据发送给谁,这就需要IP协议,它负责对数据加上IP地址和其他的数据以确定传输的目标。为防止发送的数据有误,还要对发送的数据进行校验,可以为待传送的数据加入一个以太网协议头,并进行CRC编码等。之后还需要相应的物理结构把数据发送出去,这个层次的定义包括网线的制式,网卡的定义等等。目标机接受到数据之后根据协议层层解包,找到最终的数据进行处理,从而完成通信。
0 0
原创粉丝点击