• 002 TCP/IP模型


    一、TCP/IP 的含义

    一般来说,TCP/IP是利用IP进行通信时所必须用到的协议群的统称。

    具体点,IP或ICMP、TCP或UDP、TELENT或FTP、以及HTTP等都属于TCP/IP协议,而TCP/IP一词泛指这些协议,有时称它们为TCP/IP为网际协议族/TCP/IP协议族

    如下图所示:

    二、TCP/IP协议五层模型

    TCP/IP与OSI在分层模块上的区别:

    OSI:注重通信协议必要的功能是什么

    TCP/IP:在计算机上实现协议应该开发哪种程序

     

     

    三、TCP/IP协议数据封装过程

    1、TCP/IP协议数据封装过程

    上图清楚地表示了TCP/IP协议中每个层的作用,而TCP/IP协议通信的过程其实就对应着数据入栈与出栈的过程。入栈的过程,数据发送方每层不断地封装首部与尾部,添加一些传输的信息,确保能传输到目的地。出栈的过程,数据接收方每层不断地拆除首部与尾部,得到最终传输的数据。

    2、TCP/IP协议数据封装与解封装

    上图展示了 HTTP 应用数据在主机间传输的过程,首先自上而下、宏观的来看数据在分层网络模型里的流转。

    • 应用层的 “HTTP 数据” 是实际需要被传输的数据
    • “HTTP 数据” 被下发到传输层,并添加上 TCP 首部成为传输层的 PDU(Protocol Data Unit,协议数据单元),称作数据段(Segment)。
    • 数据段再被下发到网络层,添加了 IP 首部后成为网络层的 PDU,称作数据包(Packet)。
    • 数据包再被下发到数据链路层添加了 Ethernet 首部后得到的 PDU 被称为数据帧(Frame)。
    • 数据帧最后被下发到物理层,以 01 电信号(比特数据位)的形式在物理介质中传输。

    TCP/IP 的每个层级都依赖于下层支撑,越往上就离用户越近,反正则离硬件越近。从上至下,不断为应用数据附加首部的过程称为封装,从下至上不断解析首部的过程则称为解封装

    最终在物理层传输的数据帧如上图所示,含有多个首部(Head),它们具有不同的数据结构和功能,服务于数据传输的可行性。学习计算机网络,其实就是学习各式 Head 的功能,学习每一层的核心协议以及它所解决的问题。

    3、数据包

    包、帧、数据包、段、消息

    以上五个术语都用来表述数据的单位,大致区分如下:

    • 包可以说是全能性术语;
    • 帧用于表示数据链路层中包的单位;
    • 数据包是 IP 和 UDP 等网络层以上的分层中包的单位;
    • 段则表示 TCP 数据流中的信息;
    • 消息是指应用协议中数据的单位。

    每个分层中,都会对所发送的数据附加一个首部,在这个首部中包含了该层必要的信息,如发送的目标地址以及协议相关信息。通常,为协议提供的信息为包首部,所要发送的内容为数据。在下一层的角度看,从上一层收到的包全部都被认为是本层的数据。

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

    数据包首部

    网络中传输的数据包由两部分组成:一部分是协议所要用到的首部,另一部分是上一层传过来的数据。首部的结构由协议的具体规范详细定义。在数据包的首部,明确标明了协议应该如何读取数据。反过来说,看到首部,也就能够了解该协议必要的信息以及所要处理的数据。包首部就像协议的脸。

    4、 数据处理流程

    下图以用户 a 向用户 b 发送邮件为例子:

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

    数据处理流程

    ① 应用程序处理

    首先应用程序会进行编码处理,这些编码相当于 OSI 的表示层功能;

    编码转化后,邮件不一定马上被发送出去,这种何时建立通信连接何时发送数据的管理功能,相当于 OSI 的会话层功能。

    ② TCP 模块的处理

    TCP 根据应用的指示,负责建立连接、发送数据以及断开连接。TCP 提供将应用层发来的数据顺利发送至对端的可靠传输。为了实现这一功能,需要在应用层数据的前端附加一个 TCP 首部。

    ③ IP 模块的处理

    IP 将 TCP 传过来的 TCP 首部和 TCP 数据合起来当做自己的数据,并在 TCP 首部的前端加上自己的 IP 首部。IP 包生成后,参考路由控制表决定接受此 IP 包的路由或主机。

    ④ 网络接口(以太网驱动)的处理

    从 IP 传过来的 IP 包对于以太网来说就是数据。给这些数据附加上以太网首部并进行发送处理,生成的以太网数据包将通过物理层传输给接收端。

    ⑤ 网络接口(以太网驱动)的处理

    主机收到以太网包后,首先从以太网包首部找到 MAC 地址判断是否为发送给自己的包,若不是则丢弃数据。

    如果是发送给自己的包,则从以太网包首部中的类型确定数据类型,再传给相应的模块,如 IP、ARP 等。这里的例子则是 IP 。

    ⑥ IP 模块的处理

    IP 模块接收到 数据后也做类似的处理。从包首部中判断此 IP 地址是否与自己的 IP 地址匹配,如果匹配则根据首部的协议类型将数据发送给对应的模块,如 TCP、UDP。这里的例子则是 TCP。

    另外吗,对于有路由器的情况,接收端地址往往不是自己的地址,此时,需要借助路由控制表,在调查应该送往的主机或路由器之后再进行转发数据。

    ⑦ TCP 模块的处理

    在 TCP 模块中,首先会计算一下校验和,判断数据是否被破坏。然后检查是否在按照序号接收数据。***检查端口号,确定具体的应用程序。数据被完整地接收以后,会传给由端口号识别的应用程序。

    ⑧ 应用程序的处理

    接收端应用程序会直接接收发送端发送的数据。通过解析数据,展示相应的内容。

    四、TCP/IP五层模型详解

    1、物理层

    物理层是负责数据传输的硬件。最常见的有网线(双绞线),除此还有光纤、无线电波等。不同的物理介质决定了电信号传输的距离、带宽、速率、抗干扰能力等性能参数。

    物理层主要解决的问题是:

    • 规范了网络终端设备之间的电气、机械、流程和功能等方面的要求
    • 规范了电频、速率、最大传输距离和物理接口等特征

    2、数据链路层

    上文提到,数据实际会以电信号的形式在物理介质中传输,不过单纯的 01 数字显然是没有价值的,需要为电信号进行分组和排序,以特有的组织方式来赋予其特定的含义。

    数据链路层为了解决这个问题先后提出过包括有 Ethernet v.2、IEEE 802.2、Internetwork 在内的多种协议,其中又以 Ethernet 协议占据主导地位。

    Ethernet 协议,即以太网协议,规定了电信号的分组方式。一组电信号称为一个数据帧,数据帧又由帧首、数据和帧尾三部分组成。发送方通过物理介质把数据帧发送给接收方,接收方接收到一组电信号,就会认为是接收到了一个数据帧。

    • 数据帧首部:占 14 字节,包含有目标主机网卡 MAC 地址、源主机网卡 MAC 地址以及数据帧类型标识
    • 数据:从上层(网络层)传递下来的数据包,范围在 [46, 1500] 个字节之间
    • 数据帧尾部:占 4 个字节,是 CRC 校验序列,用来确定数据帧在传输过程中是否有损坏

    MAC地址

    在规范了电信号解读方式后,数据链路层还要解决 “主机定位” 的问题:数据帧怎么知道自己应该被哪一台主机接收呢?

    以太网协议规定了接入网络的终端设备都必须安装有网络设配器(即 NIC 网卡),数据帧必须由网卡发送,再由另一张网卡接收。每张网卡都被分配一个 MAC 地址,具有全球唯一性。而数据接收方的 MAC 地址就被记录在数据帧首部。

    MAC 地址为 6 字节,使用 12 个十六进制数表示,e.g. 00:01:6C:06:A6:29

    • 前 6 个十六进制数为厂商编号,由 IEEE(电气和电子工程师协会)分配给厂商
    • 后 6 个则为该厂商的网卡流水号,由厂商自己分配

    以太网协议数据帧定位原理:有了 MAC 地址以后,以太网协议采用广播形式,将数据帧发给本地网络内所有的主机,主机在接收数据帧后会解析数据帧首部的目标主机网卡 MAC 地址,再和自身的网卡 MAC 地址对比。若相同,就接收数据帧做下一步处理。若不同,则丢弃。

    而且为了增幅广播的性能和组网的灵活性,一般会在本地网络中架设交换机来支持信号转发,交换机也是数据链路层的代表设备。

    数据链路层主要解决的问题是:对电信号进行分组并形成具有特定意义的数据帧,然后以广播的形式通过物理介质发送给接收方。

    扩展一点以太网帧的传播:
    交换机的工作原理:交换机从某一节点收到一个以太网帧后,便在其内存中地址表进行查找(MAC地址),如果有就将数据传输到该地址。

    如果没有就将该数据包广播到所有节点,与此匹配的MAC地址收到后就会做出应答,最后交换机就可以将这个地址保存到MAC地址表。

    (基于IPv4协议,在IPv4中广泛的使用单播、广播、组播的方式。而在IPv6的应用环境中,使用单播,组播、任意播的新方式,放弃广播的使用,在IPv6的环境中不再有广播的存在。)

    3、网络层

    负责相邻计算机之间的通信。其功能包括三方面。

    (1)处理来自传输层的分组发送请求,收到请求后,将分组装入IP数据报,填充报头,选择去往信宿机的路径,然后将数据报发往适当的网络接口。

    (2)处理输入数据报:首先检查其合法性,然后进行寻径--假如该数据报已到达信宿机,则去掉报头,将剩下部分交给适当的传输协议;假如该数据报尚未到达信宿,则转发该数据报。

    (3)处理路径、流控、拥塞等问题。

    IP协议的作用:基于IP地址将分组数据包发送到目的主机

    IP:跨越网络传送数据包,使整个互联网都能收到数据的协议;传送数据时,IP地址作为主机的标识

          IP还隐含数据链路层的功能:通过IP,相互通信的主机之间不论经过怎样的数据链路,都可以实现通信

          IP是分组交换的一种协议,但是不具有重发机制;即使分组数据包未到达对端主机也不会重发;属于非可靠性传输协议。

    IPv4:头部由20字节定长和一个可选的变长部分(小于等于40字节)组成,32位记录源端IP地址,32位记录目的端IP地址,所有内容长度最大为2^16=65476字节。

    IPv6:头部由40字节定长组成。128位记录源端IP地址,128位记录目的端IP地址。

    ARP协议:地址解析协议,专用于将32位IP地址映射到网卡的48位MAC地址(从分组数据包的IP地址中解析出物理地址(MAC地址)的一种协议。)。 

    RARP协议逆地址解析协议 ,主要用于将网卡的48位MAC地址转换为32位IP地址。

    ICMP:IP数据包发送过程中一旦发生异常导致无法到达对端目标地址时,需要给发送端一个发生异常的通知,ICMP就是为了该功能而定制;有时可用来诊断网络健康状况。

    扩展:
    地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP、代理ARP。NDP用于在IPv6中代替地址解析协议。

    RARP(反向地址转换协议)允许局域网的物理机器从网关服务器的 ARP 表或者缓存上请求其 IP 地址。局域网网关路由器中存有一个表以映射 MAC 和与其对应的 IP 地址。当设置一台新的机器时,其 RARP 客户机程序需要向路由器上的 RARP 服务器请求相应的 IP 地址。假设在路由表中已经设置了一个记录,RARP 服务器将会返回 IP 地址给机器。”

    既然通信的最终结果都是通过MAC地址进行通信,为什么不直接使用MAC地址来进行通信呢?
    最早这个世界上的电脑没这么多的时候,是没有路由这个东西存在的,主机都在一张网里,所以确实是直接通过 mac 地址通信的。最初的链路层协议是和 ip 地址无关的,没有网络层方面的设定,只有物理层和链路层,最初也只有集线器,没有交换机路由器,服务器之间传输数据全靠 mac 地址。在没有 ip 地址之前,mac 地址已经在使用了。现在到处都在用的二层交换机,就是根据 mac 地址转发数据。mac 地址的设计不携带设备在网络中的位置信息,想要通过 mac 地址通信,我们得在所有的设备上维护一张很大的表,记录所有 mac 地址路由在当前位置的的下一跳,这显然是不合理的。
    MAC 地址结构一共有 48bit,分为两部分,前 24bit 是厂商代码,后 24bit 是厂家自己分配的。假如我们认为 MAC 地址可以区分不同的网络的话,那只能是使用厂商代码来区分不同的网络,显然同品牌网卡不代表在同一个网络。

    4、传输层

    TCP/IP传输层有TCP和UDP两个具有代表性的协议,主要功能是让应用程序之间实现通信。

    其功能包括:

    (1)格式化信息流;

    (2)提供可靠传输。为实现后者,传输层协议规定接收端必须发回确认,并且假如分组丢失,必须重新发送。

    通信逻辑如下图:

    TCP:面向有连接的传输层协议,可以保证通信两端主机之间的通信可达;可以正确的处理传输过程中丢包、传输乱序等异常情况;还能有效利用带宽,缓解网络拥堵。(TCP报头含20字节定长、选项和填充<选项和填充小于等于40字节>)

    UDP:面向无连接的传输层协议,不关注对端是否真的收到传送的数据;如需检查对端是否收到分组数据包,或对端是否连接到网络,需要在应用程序中实现常用于分组数据较少或多播。广播通信及视频通信等领域。

    扩展:

    传输层规定为每个应用程序都指定一个特殊的 “地址” 来辅助定位,这个 “地址” 就是 —— 进程端口(Port)

    传输层的主要作用就是建立进程与进程之间的通信,即 Port 到 Port 之间的数据传输,主要有 UDP 协议和 TCP 协议两种实现。如果你具有网络应用编程经验,那么你对 (IP, Port) 的组合应该不会感到陌生,这就是 Unix 系列操作系统定义的 Socket 套接字。

    这里写图片描述

    可用端口号在 [0, 65535] 之间,其中 [0, 1023] 属于系统端口,由操作系统原生服务进程使用,其余为用户端口,由用户自由分配。传输层的 PUD 为数据段(Segment),其首部也有 TCP 首部和 UDP 首部两种类型。

    数据段首部为 8 字节,数据部分为上层应用数据占 65527 字节,总长不超过 65,535 字节,正好作为下层 IP 数据包的数据部分。

    5、应用层(会话层以上的分层)

    TCP/IP分层中,将OSI中的会话层、表示层、应用层都集中到了应用程序中实现

    TCP/IP应用的架构绝大多数术语客户端/服务端模型;提供服务的程序叫服务端,接受服务的程序叫客户端,服务器会预先部署到主机上,等待接收任何时刻客户端发送的请求

    常见的应用层协议:

    HTTP协议:(HyperText Transfer Protocol)

    浏览器与客户端通信所使用的协议,传输数据主要格式为HTML,http协议OSI应用层协议,而HTML属于表示层的协议

    文件传输协议:FTP(File Transfer Protocol)

    传输过程可以选择用二进制还是文本方式,传输时会建立两个TCP连接:发送传输请求时用到的控制连接和实际传输时用到的数据连接

    电子邮件协议:SMTP(Simple Mail Transfer Protocol)

    可以发送声音图像文字,甚至改变文字大小、颜色等

    远程登录(TELNET与SSH):

    常见的还有其他远程登录协议,比如:BSD UNIX系中的rlogin的r命令和X Window System中的X协议

    网络管理协议:SNMP(Simple Newwork Management Protocol)

    在TCP/IP进行网络管理时,采用该协议,其中使用SNMP管理的主机。网桥、路由器等称作SNMP代理(Agent),进行管理的那一段叫做管理器(Manager)

    在SNMP代理端,保存着网络接口信息、通信数据量、异常数据量以及设备温度等信息,这些信息通过MIB访问,在TCP/IP中,SNMP属于应用协议,MIB属于表示层协议

    MIB(Management Information Base):可透过网络的结构变量

    DNS协议

    主要功能是通过用户友好的名称为用户提供域名解析服务,即将主机名域名解析为IP地址。

    远程登录协议TELNET:

    客户服务器模式,能适应许多计算机和操作系统的差异,网络虚拟终端NVT的意义

    简单文件传送协议TFTP:

    客户服务器模式,使用UDP数据报,只支持文件传输,不支持交互,TFTP代码占内存小 

    应用层的主要应用:

    WWW:浏览器和服务端之间通信所用的协议是HTTP协议,所传输数据的主要格式为HTML,WWW中的HTTP属于OSI应用层的协议,HTML属于表示层的协议。

    电子邮件:发送电子邮件时用到的协议是SMTP。最初,只能以文件格式发送电子邮件。然后现在的电子邮件的格式由MIME协议扩展之后,就可以发送声音、图像等各式各样的信息。MIME属于表示层的协议。

    文件传输(FTP):文件传输是指将其它计算机磁盘上的文件转移到本地计算机上,或将本地磁盘上的文件传送到其它计算机磁盘上。该文件传输过程使用的协议叫做FTP协议。在FTP中进行文件传输时会建立两个TCP连接,分别是发送传输请求时所要用到的控制连接与实际传输数据时所要用到的数据连接。

    远程登录(TELNET与SSH):远程登录是指登录到远程的计算机上,使那台计算机上的程序得以运行的一种功能。远程登录常用TELNET与SSH两种协议。(当然还有其它一些协议)

    网络管理(SNMP):在TCP/IP中进行网络管理时,采用SNMP(Simple Network Management Protocol)协议。使用SNMP协议管理的主机、网桥、路由器等称作SNMP代理,而进行管理的那一端叫做管理器。SNMP就是这个管理器和代理要用到的协议。在SNMP的代理端,保存着网络接口的信息、通信数据量、异常数据量以及设备温度等信息。这些信息可以通过MIB(Management Information Base)访问。因此,在TCP/IP的网络管理中,SNMP属于应用协议,MIB属于表示层协议。

    五、小结

    • 物理介质层:是最底层的数据传输物理媒介
    • 数据链路层:通过 MAC 地址来定位本地子网中的主机
    • 网络层:通过 IP 地址来定位不同子网间的主机
    • 传输层:通过 Port 来定位到主机上的应用程序
    • 应用层:为主机上不同的应用程序提供服务

    六、参考资料

    1、https://zhuanlan.zhihu.com/p/136380691

    2、https://www.cnblogs.com/imyalost/p/6086808.html

    3、TCP-IP详解卷1:协议

    4、https://blog.csdn.net/bjweimengshu/article/details/79214572

    5、https://www.cnblogs.com/jmilkfan-fanguiju/p/10589771.html

    6、https://blog.csdn.net/mumubumaopao/article/details/107860818

  • 相关阅读:
    const修饰指针
    C++调用C中编译过的函数要加extern "C"
    linux常用指令(1)
    链式队列实现
    存储类别和类型限定词
    数组,指针和引用
    字符函数和字符串函数
    C/C++编译的程序占用的内存
    结构体1(嵌套使用)
    输入输出函数小结
  • 原文地址:https://www.cnblogs.com/linford/p/14990411.html
Copyright © 2020-2023  润新知