• TCP/IP四层模型


    网络的分层模型有很多种,最常见的就是OSI的七层模型和TCP/IP的四层模型。

    这里主要说一下TCP/IP的四层模型。TCP/IP的四层模型如下图所示:

    一、应用层

    向用户传送数据的层称为 应用层(application layer)。

    传输层、网际层和主机网络层共同定义了数据如何从一台计算机传输到另一台计算机。而应用层则确定了数据传输后的操作。

    根据不同的网络应用,应用层的协议也有不同。有基于TCP协议的,文件传输协议(File Transfer Protocol,FTP)、超文本链接协议(Hyper Text Transfer Protocol,HTTP)等等,也有基于UDP协议的TFTP (Trivial File Transfer Protocol)等。

    其中最常用的就是基于TCP的HTTP协议。

    二、传输层

    所有现代计算机网络都是包交换网络。流经网络的数据会被分割成小块,称为包(packet)。每个包都包含由谁发送和将发往何处的信息。

    这个的传输方式优点很明显,就是效率高。但是同样面临一个问题怎样保证包是按照顺序接收的,并且没有出现包丢失的情况。

    传输层(transport layer)则是为了解决上面这个问题的。它确保了包是按照顺序接收的,并保证没有数据丢失。如果发生数据丢失,传输层会请求重新传输这个包。

    为了实现这个目标,IP网络会给每个数据报添加一些信息。

    传输层的协议主要有两个,1是TCP(Transmission Control Protocol)协议,2是UDP(User Datagram Protocol)协议。

    TCP协议支持对丢失或者破坏的数据进行重传,并按照发送时的顺序进行传送。它是一个开销很高的协议。

    UDP协议则允许接收方检测被破坏的包,但是它不保证包一定以正确的顺序传送。

    TCP协议被称为可靠的协议,UDP是不可靠的协议。虽然这样看起来,UDP好像没什么必要。但实际上因为TCP的传输消耗比较大,UDP传输更快,UDP协议的适用范围也是十分广泛,比如音频、视频传输。对于音频、视频传输丢失部分数据造成的问题不会太严重,过高的等待时间反而更为严重。

    三、网际层

    网际层协议定义了数据位和字节如何组织为更大的分组,称为包,还定义了寻址机制,不同的计算机要按照这个寻址机制来查找对方。

    网际层应用最为广泛的协议是网际协议(IP)。现在IP协议又分为IPv4、IPv6。IPv4使用32位地址,IPv6使用128位地址。

    在IPv4和IPv6中,数据按照包在网际层上传输,这些包称为数据报(datagram)。

    四、主机传输层

    在OSI模型中,网络层下面是数据链路层和物理层。与之相对应的,TCP/IP模型中最底层是主机网络层。

    主机网络层定义了一个特定的网络接口(比如以太网或WiFi天线)如何通过物理连接向本地网络或者世界上其他地方呢发送IP数据报。

    通常情况下作为程序开发者我们是不需要接触到这层的。

    五、网络之间是如何进行通信的?

    前面有讲到所有现代计算机网络都是包交换网络。网络之间的通信其实就是一个装包和拆包的过程。

    计算机网络采用层次性的结构模型,将网络分成若干层次,每个层次负责不同的功能。每一个功能层中,通信双方都要共同遵守相应的约定。

    这样每层只需要跟上下相关的层次进行交互。这种情况下减少了耦合度,可以修改甚至替换某一层的软件,只要保证层与层之间的接口不变,就不会影响到其它层。

    同时这样的分层结构也使得“术业有专攻”,每一层值需要专注于当前层的工作,为开发人员隐藏了复杂度。

    如下图所示。

    举例说明:

    请求端

    1、web浏览器向web服务器发送获取网页的请求,浏览器实际上只会跟本机的传输层对话。

    2、传输层将请求分解为TCP碎片,向数据添加序列号和校验和,然后将数据发送到本机网际层。

    3、网际层根据本地网络所需的大小将TCP片分成IP数据报,并传递给主机网络层。

    4、主机网络层则将这些数据编码为适合特定物理介质的模拟信号,将请求发送到线缆。目标地址的主机网络层则接收发送的数据。

    接收端

    1、目标地址的主机网络层接收到数据后,首先将模拟信号解码为IP数字数据,然后将生成的IP数据传递给本机网际层。

    2、接收端网际层简单检测IP数据是否被损坏,并重组IP片,将重组后的数据传递给接收端的传输层。

    3、服务端的传输层检查是否所有的数据都已经到达,对于丢失或者损坏的数据要求重新传送(这个需要看该层使用什么传输协议)。当接收到足够多的连续数据报之后,传输层会将其写入一个流,传给应用层。

    4、服务器的应用层将读取数据流,做出自己的响应。

  • 相关阅读:
    【转】C#中的委托和事件
    ASP.NET上传文件实例代码
    我在配置OpenCV环境以及使用VS2013运行代码时遇到的问题
    JAVA_HOME环境变量失效的解决办法
    一道int和unsigned char之间强制类型转换的题目
    为什么不看好OpenStack:它的没落不可避免[转]
    一个销前谈云桌面的适用场景(再议云桌面营销之选择正确的客户环境)
    云桌面的前世今生
    云桌面三大谎言之GPU虚拟化
    如何理解清零心态
  • 原文地址:https://www.cnblogs.com/cuglkb/p/7366913.html
Copyright © 2020-2023  润新知