在OSI网络分层模型中,每个分层都接收由它下一层所提供的特定服务,并且负责为自己的上一层提供特定的服务。上下层之间进行交互时所遵循的约定叫做接口;同一层之间的交互所遵循的约定叫做协议
第七层:应用层,为应用程序提供服务并规定应用程序中通信相关的细节。包括文件传输、电子邮件、远程登录等协议
第六层:表示层,将应用处理的信息转换为适合网络传输的格式,或将来自下一层的数据转换为上层能够处理的格式。因此它主要负责数据格式的转换
第五层:会话层,负责建立和断开通信连接,以及数据的分隔等数据传输相关的管理
第四层:传输层,管理两个节点之间的数据传输。起着可靠传输的作用
第三层:网络层,将数据传输到目标地址。目标地址可以是多个网络通过路由器连接而成的某一个地址。因此这一层主要负责寻址和路由选择
第二层:数据链路层,负责物理层面上互连的节点之间的通信传输。将0、1序列划分为具有意义的数据帧传送给对端
第一层:物理层,负责0、1比特流与电压的高低、光的闪灭之间的互换
发送方从第7层、第6层到第1层由上至下按照顺序传输数据,而接收端则从第1层、第2层到第7层由下至上按照顺序传输数据。每个分层上,在处理由上一层传过来的数据时可以附上当前分层所必须的首部信息。然后接收端对收到的数据进行数据首部与内容的分离,再转发给上一分层,并最终将发送端的数据局恢复为原状
假定用户A要给用户B发送一封内容为早上好的邮件,从上至下进行分析:
从用户输入完所要发送的内容并点击发送按钮的那一刻开始,就进入了应用层协议的处理。该协议会在所要传送数据的前端附加一个首部信息。该首部标明了邮件内容为早上好和收件人为B。这一附有首部信息的数据传送给主机B以后由该主机上的收发邮件软件通过收信功能获取内容
表示层是进行统一的网络数据格式与某一台计算机或某一款软件特有的数据格式之间相互转换的分层。表示层与表示层之间为了识别编码格式也会附加首部信息,从而将实际传输的数据交换给下一层去处理
假定用户A新建了5封电子邮件准备发送给用户B。这5封邮件的发送顺序可以由很多种。例如,可以每发一封邮件时建立一次连接,随后断开连接。还可以一经建立好连接后就将5封邮件连续发送给对方。甚至可以同时建立好5个连接,将5封邮件同时发送给对方。决定采用何种连接方法是会话层的主要责任
会话层也像应用层或表示层那样,在其收到的数据前端附加首部或标签信息后再转发给下一层。而这些首部或标签中记录着数据传送顺序的信息
进行建立连接或断开连接的处理,在两个主机之间创建逻辑上的通信连接即是传输层的主要作用。此外,传输层为确保所传输的数据到达目标地址,会在通信两端的计算机之间进行确认,如果数据没有到达,它会负责进行重发
会话层负责决定建立连接和断开连接的时机,而传输层进行实际的建立和断开处理
为了确保可靠性,在这一层也会为所要传输的数据附加首部以识别这一分层的数据。然而,实际上将数据传输给对端的处理是由网络层来完成的
网络层的作用是在网络与网络相互连接的环境中,将数据从发送端主机发送到接收端主机
通信传输实际上是通过物理的传输介质实现的。数据链路层的作用就是在这些通过传输介质互连的设备之间进行数据处理
物理层中,将数据的0、1转换为电压和脉冲光传输给物理的传输介质,而相互直连的设备之间使用地址实现传输。这种地址被称为MAC地址,也可称为物理地址或硬件地址。采用MAC地址,目的是为了识别连接到同一个传输介质上的设备。因此,在这一分层中将包含MAC地址信息的首部附加到从网络层转发过来的数据上,将其发送到网络
网络层与数据链路层都是基于目标地址将数据发送给接收端的,但是网络层负责将整个数据发送给最终目标地址,而数据链路层则只负责发送一个分段内的数据
接收端主机B上的处理流程正好与主机A相反,它从物理层开始将接收到的数据逐层发给上一分层进行处理,从而使用户B上使用邮件客户端软件接收用户A发送过来的邮件,并可以读取相应内容为早上好
网络接口层负责在以太网、WiFi这样的底层网络上发送原始数据包,工作在网卡这个层次,使用MAC地址来标记网络上的设备,所以有时候也叫MAC层
第二层:互联网层(网络层)
互联网层使用IP协议,它相当于OSI模型中的第3层网络层。IP协议基于IP地址转发分包数据
TCP/IP分层中的互联网层与传输层的功能通常由操作系统提供。尤其是路由器,它必须得实现通过互联网转发分组数据包的功能
IP:
IP是跨越网络传送数据包,使整个互联网都能收到数据的协议。IP协议使数据能够发送到地球的另一端,这期间它使用IP地址作为主机的标识
IP还隐含着数据链路层的功能。通过IP,相互通信的主机之间不论经过怎样的底层数据链路都能够实现通信
虽然IP也是分组交换的一种协议,但是它不具有重发机制。即使分组数据包未能到达对端主机也不会重复。因此,属于非可靠性传输协议
ICMP:
IP数据包在发送途中一旦发生异常导致无法到达对端目标地址时,需要给发送端发送一个异常的通知。ICMP就是为这一功能而制定的。它有时也被用来诊断网络的健康状况
ARP:
从分组数据包的IP地址中解析出物理地址(MAC地址)的一种协议
第三层:传输层
传输层最主要的功能就是能够让应用程序之间实现通信。计算机内部,通常同一时间运行着多个程序。为此,必须分清是哪些程序与哪些程序在进行通信。识别这些应用程序的是端口号
TCP和UDP的区别:
TCP是一个有状态的协议,需要先与对方建立连接然后才能发送数据,而且保证数据不丢失不重复。而UDP则比较简单,它无状态,不用事先建立连接就可以任意发送数据,但不保证数据一定会发到对方
TCP的数据是连续的字节流,有先后顺序,而UDP则是分散的小数据包,是顺序发,乱序收
第四层:应用层
应用层有各种面向具体应用的协议,例如Telnet、SSH、FTP、SMTP、HTTP等
MAC层的传输单位是帧,IP层的传输单位是包,TCP层的传输单位是段,HTTP的传输单位则是消息或报文
每个分层中,都会对所发送的数据附加一个首部,在这个首部中包含了该层所必要的信息,如发送的目标地址以及协议相关信息。通常,为协议提供的信息为包首部,所要发送的内容为数据。如上图,在下一层的角度看,从上一分层收到的包全部都被认为是本层的数据
假定用户A要给用户B发送一封内容为早上好的邮件
1)应用程序处理
应用在发送邮件的那一刻建立TCP连接,从而利用这个TCP连接发送数据。它的过程首先是将应用的数据发送给下一层的TCP,再做实际的转发处理
2)TCP模块的处理
TCP根据应用的指示,负责建立连接、发送数据以及断开连接。TCP提供将应用层发来的数据顺利发送至对端的可靠传输
为了实现TCP的这一功能,需要在应用层数据的前端附加一个TCP首部。TCP首部中包括源端口号和目标端口号(用以识别发送主机跟接收主机上的应用)、序号(用以表示该包中数据是发送端整个数据中第几字节的序列号)以及校验和(用以判断数据是否被损坏)。随后将附加了TCP首部的包再发送给IP
3)IP模块的处理
IP将TCP传过来的TCP首部和TCP数据合起来当做自己的数据,并在TCP首部的前端加上自己的IP首部。因此,IP数据包中IP首部后面紧跟着TCP首部,然后才是应用的数据首部和数据本身。IP首部中包含接收端IP地址以及发送端IP地址。紧随IP首部的还有用来判断其后面数据是TCP还是UDP的信息
IP包生成后,参考路由控制表决定接受此IP包的路由或主机。随后,IP包将被发送给连接这些路由器或主机网络接口的驱动程序,以实现真正发送数据
如果尚不知道接收端的MAC地址,可以利用ARP查找。只要知道了对端的MAC地址,就可以将MAC地址和IP地址交给以太网的驱动程序,实现数据传输
4)网络接口(以太网驱动)的处理
从IP传过来的IP包,对于以太网驱动来说不过就是数据,给这数据附加上以太网首部并进行发送处理。以太网首部中包含接收端MAC地址、发送端MAC地址以及标志以太网类型的以太数据的协议。根据上述信息产生的以太网数据包将通过物理层传输给接收端。发送处理中的FCS由硬件计算,添加到包的最后。设置FCS的目的是为了判断数据包是否由于噪声而被破坏
包流动时,从前往后依次被附加了以太网包首部、IP包首部、TCP包首部(或者UDP包首部)以及应用自己的包首部和数据。而包的最后则追加了以太网包尾
每个包首部中至少都会包含两个信息:一个是发送端和接收端地址,另一个是上一层的协议类型
经过每个协议分层时,都必须有识别发送端和接收端的信息。以太网会用MAC地址,IP会用IP地址,而TCP/UDP则会用端口号作为识别两端主机的地址。即使是在应用程序中,像电子邮件地址这样的信息也是一种地址标识。这些地址信息都在每个包经由各个分层时,附加到协议对应的包首部里面
1)网络接口的处理
主机收到以太网包之后,首先从以太网的包首部找到MAC地址判断是否为发送给自己的包。如果不是发给自己的包则丢弃数据
而如果是接收到了恰好是发给自己的包,就查找以太网包首部中的类型域从而确定以太网协议所传送过来的数据类型。在这个例子中数据类型是IP包,因此再将数据传给IP的字程序。如果以太网包首部的类型域包含了一个无法识别的协议类型,则丢弃数据
2)IP模块的处理
IP模块收到IP包首部及后面的数据部分以后,也做类似的处理。如果判断得出包首部中的IP地址与自己的IP地址匹配,则可接收数据并从中查找上一层的协议。如果上一层是TCP就将IP包首部之后的部分传给TCP处理;如果是UDP则将IP包首部后面的部分传给UDP处理。对于有路由器的情况下,接收端地址往往不是自己的地址,此时,需要借助路由控制表,在调查应该送达的主机或路由器以后再转发数据
3)TCP模块的处理
在TCP模块中,首先会计算一下校验和,判断数据是否被破坏。然后检查是否在按照序号接收数据。最后检查端口号,确定具体的应用程序
数据接收完毕后,接收端则会发送一个确认回执给发送端。如果这个回执信息未能达到发送端,那么发送端会认为接收端没有接收到数据而一直反复发送
数据被完整地接收以后,会传给由端口号识别的应用程序
4)应用程序的处理
接收端应用程序会直接接收发送端发送的数据,解析数据进行处理