一、网络协议层次

二、数据在网络体系中的流向

1.应用层

    应用层的数据就是我们写的代码的内容。比如我要传一个字符串 “hello wolrd” 到目的主机,那么报文M就表示的是 hello world 的二进制(0 1)形式。     应用层就是我们主机的应用程序的那一层。比如你用 visual studio运行了你写好的代码程序,正在运行的代码程序就叫作应用程序。对于windows来说,单运行visual studio这个软件也叫作应用程序。visual studio这种软件底层也是写好的代码和控件,你运行这个软件,也就是运行了这个代码程序。

2.传输层(运输层)

    运输层是建立 “端口到端口” 的通信。主要以TCP/UDP协议为主。当数据(M)从 应用层 到 运输层 后,为 报文M 添加 Ht 头部。这个头部以TCP协议为例。结构为:     也就是说,Ht 头部共20个字节(一般情况下是没有可选长度字段和填充字段的),其中端口号字段(4字节)实现了 “端口到端口” 的通信,通过抓包数据:     如果传输层采用UDP协议,UDP的头部结构总共8个字节,UDP协议会为报文M增加一个8字节的头部 Ht 组成传输层的数据段 Ht + M

3.网络层

    网络层建立 “主机到主机” 的通信。传输层的 数据段 Ht + M 到达网络层之后,网络层将添加IP协议数据报头 Hn 一起组成 数据报 Hn + Ht + M 传到数据链路层。一般情况下也是20个字节,可选字段和填充字段一般不设置。     网络层包括著名的网际协议(IP协议),该协议定义了在数据报中的各个字段以及端系统和路由器如何作用于这些字段。IP仅有一个,所有具有网络层的因特网组件必须运行IPo因特网的网络层也包括决定路由的路由选择协议,它根据该路由将数据报从源传输到目的地。尽管网络层包括了网际协议和一些路由选择协议,但通常把它简单地称为IP层,这反映了IP是将因特网连接在一起的黏合剂这样的事实。

4.数据链路层

    数据链路层主要是将网络层的传下来的数据加上数据链路层的头部 Hi 封装成 帧 Hi + Hn + Ht + M。数据链路层的头部数据共 14个字节 加上 帧尾添加的FCS字段 4个字节一起组成一个完整的一帧。 这幅图有一点小问题,目的地址指的是目的MAC地址,不是ip地址,ip地址是网络层的头部字段。源地址同理。     这里可以看到数据链路层将帧传到 物理层,物理层添加的头部一共8个字节:前同步码(7 字节)+帧定界符(1 字节)。     从这张图可以看出,帧的数据部分必须要在 46个字节 ~ 1500字节之间。1500个字节是因为MTU(最大传输传输单元)的限制。那为啥最少还要限制要46个字节(算上帧头帧尾一共64字节)?

    假设当主机A、B都要向C发送数据。我们知道主机C是不能同时recv(同一端点的同一信道上)两方发来的数据的,只能接受一方的send。当A检测到网络是空闲的,开始发数据包到C,尽力传输,当数据包还没有到达C时,B也监测到网络是空闲的,开始发数据包,这时就会发生碰撞,B首先发现发生碰撞,开始发送碰撞信号,所谓碰撞信号,就是连续的01010101或者10101010,十六进制就是55或AA。这个碰撞信号会返回到A,如果碰撞信号到达A时,A还没有发完这个数据包,A就知道这个数据包发生了错误(这个错误用叠加数据解释比较好理解),就会重传这个数据包。但如果碰撞信号返回到A时,数据包已经发完,则A不会重传这个数据包。

    要保证以太网的重传,必须保证A收到碰撞信号的时候,数据包没有传完,要实现这一要求,A和B之间的距离很关键,也就是说信号在A和B之间传输的来回时间必须控制在一定范围之内。IEEE定义了这个标准,一个碰撞域内,最远的两台机器之间的round-trip time 要小于512bit time.(来回时间小于512位时,所谓位时就是传输一个比特需要的时间)。这也是我们常说的一个碰撞域的直径。

    512个位时,也就是64字节的传输时间,如果以太网数据包大于或等于64个字节,就能保证碰撞信号到达A的时候,数据包还没有传完。这就是为什么以太网要最小64个字节,同样,在正常的情况下,碰撞信号应该出现在64个字节之内,这是正常的以太网碰撞,如果碰撞信号出现在64个字节之后,叫 late collision。这是不正常的。

    总结:最小数据帧的设计原因和以太网电缆长度有关,为的是让两个相距最远的站点能够感知到双方的数据发生了碰撞;最远两端数据的往返时间就是争用期,以太网的争用期是51.2微妙,正好发送64byte数据

三、总结

    通过 二标题 中的网络数据流向可以知道。数据流向哪一层时就要添加或者去掉哪一层的头部。传输层头部字段有端口号,到达下一层网络层就有了ip地址,再流到数据链路层就有了MAC地址。一步步寻址,最终找到对应的目的主机。并往上一层层去掉头部还原应用层我们recv到的原始数据。本文还加了抓包图,可以对照抓包的数据一个个字段看,可以发现每一个字段的值和抓包的16进制值(换算)是一致的。

参考文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: