zoukankan      html  css  js  c++  java
  • TCP/IP 协议的结构与运行原理

    本文背景:
    TCP/IP模型很成功,其设计已经经得起多年的磨练。无奈,TCP/IP协议族是很繁杂的一个模型,为了全面理解它,宜采取先全局后局部的庖丁解牛式。本文从应用的角度试着去理解TCP/IP的全貌,配合例子加以讲解。
    本文目的:
    巩固自己这方面的知识,作为深入TCP/IP协议族的基础。
    本文内容:
    1. TCP/IP协议族组成
    从字面上理解,TCP/IP协议族只有TCP、IP协议,其实不然。其真正的名字是Internet协议族 (Internet Protocol Suite) 。和大型软件一样,其分为四层:应用层、传输层、网络层、链路层。
    每一层的功能和目的都是不一样的,每一层上服务的协议也不是有区别的。从上往下看:
    应用层(产生|利用数据)
    协议:FTP、HTTP、SNMP(网管)、SMTP(Email)等常用协议;
    职责:利用应用层协议发送用户的应用数据,比如利用FTP发送文件,利用SMTP发送Email;由系统调用交给运输层处理。
    运输层(发送|接收数据)
    协议:TCP(有连接)、UDP(无连接);
    职责:负责建立连接、将数据分割发送;释放连接、数据重组或错误处理。
    网络层(分组|路由数据)
    协议:IP、ICMP(控制报文协议)、IGMP(组管理协议);
    职责:负责数据的路由,即数据往哪个路由器发送。
    链路层(按位发送|接收数据)
    协议:以太网卡设备驱动、令牌网卡驱动程序、ARP、RARP等;
    职责:负责传输校验二进制用户数据。

    从可靠性角度看各层区别:
    网络层IP协议是不可靠的协议,为此,如果其上面的层也不做任何特殊处理,也将是不可靠的。于是,运输层的TCP协议弥补了这个空缺,提供有连接的、可校验的数据传输服务。
    应用层的话可对数据进行加密之类的处理,增强的是传输数据的安全性,如https。
    链路层可对数据进行校验。

    从运行进程态看各层区别:
    应用层运行在用户程序进程中,属性用户态;
    其他层则在系统内核进程运行,属于核心态;
    从通信方式上看各层区别:
    传输层是端对端的通信,也就是说,处理的是进程与进程之间的通信,如两个TCP进程;
    网络层是点对点的通信,也就是说,处理的是机器之间的 逻辑连接。

    从传输数据单元上看区别:
    传输层上形成的是TCP或UDP报文段;
    网络层形成的是IP数据报;
    数据链路层形成的是帧(Frame)。

    从寻址方式上看各层区别:
    网络层通过IP寻址;
    链路层通过MAC寻址。

    注解:
    ICMP: 供IP用于发送错误报文,也可由应用层直接调用;
    IGMP: 用于多播(Multicast),比如,UDP可用多播IP地址往多个目标主机发送数据报,就是依靠它。
    ARP&RARP: 用户在IP地址与MAC地址互相转换。
    2. TCP/IP模型基础设施
    IP地址
    共分五类地址,分别如下:
    A类:0.  0. 0. 0——127.255.255.255(单播)
    B类:128.0.0.0——191.255.255.255(单播)
    C类:192.0.0.0——223.255.255.255(单播)
    D类:224.0.0.0——239.255.255.255(多播)
    E类:240.0.0.0——247.255.255.255(待用)  
    附加类:255.255.255.255 (传输层UDP广播)

    MAC地址
    每个网卡的MAC地址世界唯一,不可变;计算机通信其实靠的是MAC地址,而不是IP地址,请看下面注解。

    端口
    端口在硬件里的名称为接口,跟网卡的入口一样;在软件概念里,可以理解为一些数据结构数据缓冲区。
    端口可分为:
    知名端口:0001——1023 (例如FTP 20,TCP 21,UDP 69)
    临时端口:1024——5000
    预留端口:5000——65535
    假设你的应用程序需要端口,一般是从临时端口分配,只在应用程序运行时有效,故称临时端口。
    传输层可将进程与端口进行绑定,当数据到来时,其知该往哪个进程缓冲区里送。

    注解:
    IPMAC的区别:IP地址是基于网络拓扑结构的,是动态可变的。MAC地址是由网卡厂商定的,是终身不可变且唯一的。假设应用层利用MAC地址传输数据,那么其是不灵活的,因为它不能变。所以,应用层用IP寻址。
    但是,硬件又必须用MAC才能找到机器,为此引入ARP及RARP来做两地址的查询与转换。


    3. TCP/IP应用案例分析
    场景:左边用户利用FTP客户端与右边FTP服务器端进行连接上传文件。
    数据将从上往下流,每到一层都会加上层头,数据以类堆栈形式存储,到目标机器时,底层数据先得,由底向上,符合堆栈先进后出的特性。
      

    1  TCP/IP内部分解图

    步骤1:应用层准备好数据文件,调用Windows API通知传输层TCP建立连接,传输层加入TCP包头,其中包含标识应用层协议的标识符——端口 21。
    步骤2:网络层接收了传输层的TCP包,由于IP协议可接收ICMP(1)、IGMP(2)、TCP(6)、UDP(17)来的数据,其需要一个标识域来表明是那个协议发来的数据。此数据域将加于IP包头中。除此之外,还将赋以IP地址。
    步骤3:数据链路层接收网络层来的数据后,加之标识域表明数据是从IP、ARP或RARP来。然后,加上MAC地址往外发送。
    步骤4将数据由网卡送出,送的过程中,ARP利用目标IP找到最近的路由器MAC地址,然后将包发往它,之后由它找到一个路由器,最终将数据包送到右边机器的网卡中。
    步骤5根据包头的标识域可知这是一个IP数据包,利用IP协议拆包。
    步骤6根据包头的标识域可知这是一个TCP包,利用TCP协议拆包。
    步骤7根据包头的端口号,将数据直接送入应用层的对应缓冲区中,应用程序负责解析数据包,做相应的业务逻辑处理。


    注解:
    RFC(Request for Comment)各种Internet的正式标准都以RFC文档形式发布。
    各种协议文档:RFC 1122是链路层、网络层、传输层的文档;RFC 1123是应用层的文档;RFC 1600是各种Internet协议的标准化现状。

  • 相关阅读:
    解方程
    十进制快速幂
    comb
    题单解题记录-POJ题目分类推荐 (很好很有层次感)
    算法题离谱错误合集
    VMware-Ubuntu16.04踩坑解决记录
    2020牛客多校赛第三场
    需学习的博客地址
    错误记录
    可持久化线段树 区间第k大/小
  • 原文地址:https://www.cnblogs.com/chenlulouis/p/1729139.html
Copyright © 2011-2022 走看看