帧、数据报、数据包的区别与联系还有一些网络知识

下面的内容转载自这篇文章


这里奉上国际标准化组织(ISO)指定的OSI七层模型,对下面的理解有帮助

名词解释:OSI(Open System Interconnection,开放系统互联)模型是由国际标准化组织(ISO)定义的标准,它定义了一种分层体系结构,在其中的每一层定义了针对不同通信级别的协议。OSI模型有7层,17层分别是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。OSI模型在逻辑上可分为两个部分:低层的14层关注的是原始数据的传输;高层的5~7层关注的是网络下的应用程序。

资源请求出错

图片出自这里


概念理解

数据帧(Frame)

数据帧(Frame):就是数据链路层的协议数据单元,它包括三部分:帧头,数据部分,帧尾。其中,帧头和帧尾包含一些必要的控制信息,比如同步信息、地址信息、差错控制信息等;数据部分则包含网络层传下来的数据,比如ip数据包。

数据包(Packet)

数据包(Packet):TCP/IP协议通信传输中的数据单位,处于网络层,在局域网中,“包”是包含在“帧”里的。

数据报(Datagram)

数据报(Datagram):多用于网络层以上,面向无连接的数据传输,工作过程类似于报文交换。采用数据报方式传输时,被传输的分组称为数据报。

有人说,局域网中传输的不是“帧”(Frame)吗?没错,但是TCP/IP协议是工作在OSI模型第三层(网络层)、第四层(传输层)上的,而帧是工作在第二层(数据链路层)。上一层的内容由下一层的内容来传输,所以在局域网中,“包”是包含在“帧”里的。

我们可以用一个形象一些的例子对数据包的概念加以说明:我们在邮局邮寄产品时,虽然产品本身带有自己的包装盒,但是在邮寄的时候只用产品原包装盒来包装显然是不行的。必须把内装产品的包装盒放到一个邮局指定的专用纸箱里,这样才能够邮寄。这里,产品包装盒相当于数据包,里面放着的产品相当于可用的数据,而专用纸箱就相当于帧,且一个帧中只有一个数据包。

详细区分

一般说来,数据链路层发出的数据包称为frame,地址是链路层的地址,如mac地址;网络层发出的数据包称为packet,地址是网络层地址,如ip地址;传输层发出的数据包称为segment/datagram,地址是传输层地址,如TCP的端口号。

下面的图片就很好解释了各个数据名词所对应的层次:

资源请求出错

总而言之:
二层的PDU叫做Frame;
IP的叫做Packet;
TCP的叫做Segment;
UDP的叫做Datagram。

数据包的帧封装原理

通过前面的学习我们就已经知道,网络层传输的包(packet,又称分组),在数据链路层中传输的是“帧”(frame)。数据包到达数据链路层后加上数据链路层的协议头和协议尾就构成了一个数据帧。在每个帧的前部加上一个帧头部,在帧的结尾处加上一个帧尾部,把网络层的数据包作为帧的数据部分,就构成了一个完整帧。帧头和帧尾就是作为帧的起始和结束标志,也就是帧边界。

由数据包封装成的数据帧其大小是受对应的数据链路层协议的MTU(最大传输单元)限制的,如以太网数据链路层封装网络层IP 包的MTU 值为1500 字节(这是指帧中数据部分,也就是来自网络层整个数据分组,最大不能超过1500 字节,但不包括帧头和帧尾部分)。同时,帧还有最小大小限制,如以太网帧中封装的IP 包最小值为46 字节,如果封装的IP 包小于最小帧要求时,就要用一些特殊字符进行填充,以满足对应链路中传输最小帧的限制。

总结

实现的时候是底知层的数据包封装上层的包,然后向下层传送,所以实际系统是IP包包含了TCP的内容的。发送数据的时候的过程是app程序使用tcp的端道口向ip层发送tcp的数据,ip层收到后加上ip header继续向下层发送,一直到物理层的端口上,发送到对端去,对端收到后执权行反方向的操作一直到app中解出原始的数据来使用。

数据校验:tcp层可以坐循环冗余校验的,如果发现错误就不会上传app层,而是通过回等信息进行封装并发到ip层一直发到对端的tcp层,对端tcp层就知道这个数据包对方没收到,或者受到的有问题了,那么就会重发的。

而数据发送到接收方那里后:当一个帧被接收并交由第二层处理:剥开帧头帧尾,获得数据包(对于第二层来说它只认识帧头和帧尾,其它包括包头等都是帧承载的普通数据);完了这个包(packet)被交给第三层:它能识别包头,得到被包在里面的信息(这信息就包含第四层比如tcp数据报头,但对于第三层来说报头也只是它所承载的普通数据),第三层完事之后把去掉包头的数据给第四层,这坨数据就是数据报(英文datagram / segment),那么第四层就认得报头然后干该自己干的事了。


补充

socks代理与七层模型

网络流程如下:

资源请求出错

应用层通常是一些应用的通信,例如浏览器访问网页、邮件等;而会话层常常用来跑一些socks代理,例如V2Ray、trojan,所以socks代理工具可以用来代理一些应用层的东西,比如访问网页等,而游戏数据往往是在传输层(TCP、UDP),所以socks5代理正常情况下不能加速游,和代理全不全局没关系(除非一些特别的工具利用虚拟网卡的方式来强制接管流量);另外ping、traceroute等ICMP协议的命令跑在网络层,所以这个也不受会话层代理影响

功夫网

大家都知道我们祖国有一个防火长城——Great Firewall,简称GFW,或者功夫网,今天我们怀着技术的角度简单了解一下其原理。

基本阻断原理

如果没有GFW,一个主机访问一个服务器的流程是这样的:
主机=》本地网络=》骨干网=》经由DNS服务器=》到达国际出口=》达到目标服务器

有了之后:
主机=》本地网络=》骨干网=》到达GFW

注意这里,GFW会窥探你的明文数据部分内容(http),然后会发现google等字样,然后给你返回一个错误的IP,于是你就访问不了了。

这只是其中一种方式,叫做关键字阻断

另外还会在某些特定服务器的端口进行端口阻断,以及对国外服务器IP地址进行屏蔽。

大概方式就是这些,但是技术日新月异,新的阻断方式还在不断更新

早期突破原理

初期VPN(网络层)、http代理、SSH代理突破封锁的方式一开始之所以能突破封锁,原理在于首先加密传送数据,然后传送给一个GFW允许访问的SSH代理服务器,于是就躲开了DNS污染并且因为是允许访问的IP所以放行,然后在SSH代理服务器上解析真正的地址,然后访问。

  • 发送密文,躲开了DNS污染
  • DNS解析时,发现访问对象是允许的服务器

防范

因为这种初期VPN等方式过于流行,GFW逐渐掌握了规律,找到了特征,并采取了措施:

  • VPN通讯端口被封锁,政企用户需要申报审核,个人用户无法使用。
  • 提供VPN服务的服务器IP被批量屏蔽

近年突破原理

后来,随着技术的发展,出现了Shadowsocks,它出现了一个将代理服务器分成本地和远程的两个概念,通过socks5代理,实现经过GFW的流量全部加密,从而消除特征。

资源请求出错

相比于违规翻墙的流量,超过99%的通信流量都是正常需求。

shadowsocks与早期VPN:早期VPN是会先发送一个建立加密通道的数据包,然后进行加密传输,特征很明显;shadowsocks则是在本地就完成加密工作,所以无法被探测模式和特征。

欢迎请我喝奶茶(*゜ェ゜*)
---这篇文章到头了---感谢您的阅读-------------