网络七层协议

OSI中的层 功能 TCP/IP协议族
应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,FTP,HTTP,SNMP,SMTP,DNS,RIP,Telnet
表示层 数据格式化,代码转换,数据加密
会话层 解除或建立与别的结点的联系
传输层 提供端对端的接口 TCP,UDP
网络层 为数据包选择路由 IP,ICMP,OSPF,BGP,IGMP,ARP,RARP
数据链路层 传输有地址的帧以及错误检测功能 SLIP,CSIP,PPP,MTU,ARP,RARP
物理层 以二进制的数据形式在物理媒体上传输数据 ISO2110,IEEE802,IEEE802.2

本文摘抄自:https://www.cnblogs.com/carlos-mm/p/6297197.html

一、物理层

  首先两个硬件之间需要通信,具体就是一台发些比特流,然后另一台能收到,发明了物理层。

  主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。

  物理层要尽可能地屏蔽掉物理设备和传输媒体,通信手段的不同,使数据链路层感觉不到这些差异,只考虑完成本层的协议和服务。

二、数据链路层

  接着为了让这两个机器的数据在物理层更好的传输,不容易丢包,发明了数据链路层。

  通过三个问题来进行处理:

  封装成帧,用帧开始符与帧结束符来区分一个帧;

  透明传输,即为了解决中间有的数据跟帧开始符或者帧结束符相同,导致程序错误识别为帧结束符,在与帧开始符或者帧结束符相同的数据前面加上一个转义字符进行区分,这个是为了配合封装成帧的功能;

  差错检测,用循环冗余检测CRC(Cyclic Redundancy Check)的检错技术;

三、传输层

  现在我能发正确的发比特流数据到另一台计算机了,但是当我发大量数据时候,可能需要好长时间,例如一个视频格式的,网络会中断好多次(事实上,即使有了物理层和数据链路层,网络还是经常中断,只是中断的时间是毫秒级别的)。

  我还须要保证传输大量文件时的准确性。于是,我要对发出去的数据进行封装。就像发快递一样,一个个地发。

  于是,先发明了传输层(传输层在OSI模型中,是在网络层上面)。

  例如TCP,是用于发大量数据的,我发了1万个包出去,另一台电脑就要告诉我是否接受到了1万个包,如果缺了3个包,就告诉我是第1001,234,8888个包丢了,那我再发一次。这样,就能保证对方把这个视频完整接收了。

  例如UDP,是用于发送少量数据的。我发20个包出去,一般不会丢包,所以,我不管你收到多少个。在多人互动游戏,也经常用UDP协议,因为一般都是简单的信息,而且有广播的需求。如果用TCP,效率就很低,因为它会不停地告诉主机我收到了20个包,或者我收到了18个包,再发我两个!如果同时有1万台计算机都这样做,那么用TCP反而会降低效率,还不如用UDP,主机发出去就算了,丢几个包你就卡一下,算了,下次再发包你再更新。

四、网络层

  传输层只是解决了打包的问题。但是如果我有多台计算机,怎么找到我要发的那台?或者,A要给F发信息,中间要经过B,C,D,E,但是中间还有好多节点如K.J.Z.Y。我怎么选择最佳路径?这就是路由要做的事。

  于是,发明了网络层。即路由器,交换价那些具有寻址功能的设备所实现的功能。这一层定义的是IP地址,通过IP地址寻址。所以产生了IP协议。
五、会话层
  现在我们已经保证给正确的计算机,发送正确的封装过后的信息了。但是用户级别的体验好不好?难道我每次都要调用TCP去打包,然后调用IP协议去找路由,自己去发?当然不行,所以我们要建立一个自动收发包,自动寻址的功能。
  于是,发明了会话层。会话层的作用就是建立和管理应用程序之间的通信。
六、表示层
  现在我能保证应用程序自动收发包和寻址了。但是我要用Linux给window发包,两个系统语法不一致,就像安装包一样,exe是不能在linux下用的,shell在window下也是不能直接运行的。于是需要表示层(presentation),帮我们解决不同系统之间的通信语法问题。
七、应用层
  OK,现在所有必要条件都准备好了,我们可以写个android程序,web程序去实现需求把。
posted @ 2018-01-15 16:14  小禾先生  阅读(332)  评论(0编辑  收藏  举报