网络通信按照OSI的定义可以分为7层结构。7应用层6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层。其中高层,即7654层定义了应用程序的功能,下面3层,即321层主要面向通过网络的端到端的数据流。

 

网络通信协议学习_第1张图片

 

上图来自《鸟哥的linux私房菜--服务器篇》

PS:一台笔记本电脑包含了上面所有处理数据的设备,所以这些左边的数据“包装”和右边的数据“解包装”都在笔记本内实现了。)

解释下上面这个图:计算机上面的某个应用产生数据,然后要发送给其他计算机的另一个应用程序。那么她产生一些资料,会经过应用层,表现层,会话层,运输层,网络层,链路层和物理层,通过上图可以发现,它的那些资料背一层层的“包装”了,然后通过网线以电信号的形式(一串01)传输到了另一台计算机,然后再经过一层层的去除包装,将真正的资料传给了另一台计算机的一个应用程序了。

有人问了,如果应用程序想要将数据传给本机算机的另外一个应用程序,怎么实现?就可以使用127.0.0.1这个地址来实现。怎么讲?127.0.0.1是本地环回地址,一个程序发的TCP包是不会到达网卡的,数据包直接被返回到传输层的输入队列中去了,所以相当于直接进入图右边的运输层了,那么再经过数据的提取,就到了那个应用程序了。(PS:具体怎么实现可以查看socket---进程间通信。)

-------------------------------------------------以上是7层协议流程的简单介绍------------------------------------------------

 

各个层的介绍:

       数据链路层---帧:在数据链路层的数据格式叫帧。它的最大传输量称为MTU(最大传输单元)。它一般小于1500B.

        网络层—IP数据包:在网络层传输的数据格式叫IP数据包,根据RFC文档规定,一个IP数据包的里面包含的最大信息量达65535B,其中包括IP数据包头部和数据。而我们知道应用程序产生的数据打包的过程中要先传到网络层,后传到数据链路层,但是IP数据包的最大信息量(65535B)>MTU(1500B),那怎么办?这里就需要用到分片。就是将IP数据包中的数据分成几片数据,以满足MTU的限制。下面我介绍下IP数据包里面为分片服务的几个值,一个是DF(Don't fragment)DF0表示这个数据包可以分片,为1则不可。另一个为MFMore fragment)MF0表示后面没有分片,为1表示后面还有分片。 还有就是偏移量,这个值表示这个数据包在原来未分片的数据包中的偏移量。

       传输层—常见的数据包为TCP数据包,TCP数据包的包头里面包含了两个主要的信息,一个是Source Port,一个是Destination Port.端口的意思就是一个主机上接受网络传输过来的信息的某个应用程序。 如果一个TCP数据包的数据大于IP数据包的最大容量的时候也需要将TCP数据包分段后进行传输。

关于网络层的数据到数据链路层的分片知识和传输层到网络的数据分域知识请看下面这个链接:blog.sina.com.cn/s/blog_60e96a410100n002.html