端对端的网络消息传送过程

       OSI定义的通信协议从底向上分为七层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。而TCP/IP协议并不完全符合OSI的七层模型,它由从底向上的四个层次组成:网络接口层、网络层、传输层、应用层。

       TCP/IP协议中网络接口层主要用来处理物理接口与电缆之间的硬件细节。网络层处理网络中消息包(IPICMPIGMP)的传输。传输层为两个主机之间(端到端)的应用层提供数据流,主要有TCPUDP两种协议。应用层则处理具体的应用细节,应用层上的协议有TelnetFTPSMTPSNMP等。

 

       这里想要描述一下从主机A上的应用Aa发一个消息包给主机B上的应用Bb的大致流程。

假设主机B的域名为www.B.com,当主机A上要发一个UDP包给主机B时:

1.      TCP/IP协议是根据IP地址来识别目标主机的,因此第一步就是利用DNS服务来获取主机BIP地址。DNS服务会先对域名做一个本地域名解析,即到本地的域名缓存里看这个域名项是否已经存在。域名缓存里的内容来自于两个地方,一个是之前查询时记录下的,另一个是从HOSTS文件读取出来的。关于DNS的工作流程,可以参考:http://technet.microsoft.com/en-us/library/cc775637(WS.10).aspx

2.      获得IP地址后,还不能发出消息包。每个网络接口卡都有一个物理地址(MAC地址),硬件级别的数据帧交换所依赖的就是正确的Mac地址。而TCP/IP协议组所关注的则是另一种地址,IP地址。知道主机的IP地址并不能让内核机发送数据帧,内核必须知道目标的Mac地址才能发送数据。因此第二步是通过ARP请求包来获得Mac地址(这个地址有可能不是最终的Mac地址,而只是一个中间Mac地址,这里统称为下一跳Mac地址)。

3.      在获得下一跳Mac后,内核将消息包以数据帧的形式发出。这个帧里面包含了下一跳Mac地址和目标IP地址。

4.      数据帧在电缆上传输。

5.      在这一过程中,可能会遇到一些简单的网络互连设备(工作在物理层),如中继器等,它们的作用只是对电缆上传输的信息进行放大和整形后再发送到与之相连的其他网段。也就是说它没有任何选择功能。

6.      也可能会遇到一些二层网络设备(工作在数据链接路层),如二层交换机等。二层交换机收到数据帧后,会取出其中的下一跳Mac地址,将数据包发送到正确的端口上。

7.      也可能会遇到一些三层网络设备(工作在网络层),如三层交换机和路由器等。以路由器为例,路由器在收到数据帧后,会先取出目标IP地址进行解析判断,获得新的下一跳Mac地址并替换原来的下一跳Mac地址,并发往下一跳地址所对应的网络设备上。

8.      最终数据包通过多次被接收、修改、转发后到达真正的目标主机B在目标主机上,数据帧被一层层拆开,在数据链路层去掉以太网帧头和尾(假设用的是以太网传输),在网络层去掉IP头,在传输层去掉对应的协议头(TCPUDP),最终消息到达应用Ba。

posted @ 2012-04-22 21:14  carter2000  阅读(744)  评论(1编辑  收藏  举报