TCP / IP 五层网络模型(下)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: TCP / IP 五层网络模型(下)

四、协议分层的背景下,数据如何通过网络传输?

按照TCP / IP五层网络模型协议有五层:应用层、传输层、网络层、数据链路层、物理层。传输层为应用层提供服务,网络编程主要就是学习传输层和应用层交互。

4.1 再谈协议

对于客户端及服务器应用程序,请求(给服务器发送信息)和响应(服务器给予回应)需要约定一样的数据格式,方便(封装和分用,下文讲述)。

    1. 客户端发送请求和服务端解析请求要求使用相同的数据格式。
    2. 服务端返回响应和客户端解析响应请求要使用相同的数据格式。
    3. 请求格式和响应格式可以相同,也可以是不同的约定,保证发出请求的格式和解析请求的格式一样、响应的格式和解析响应的的格式一样即可,约定相同的数据格式,主要目的是为了让接收端在解析的时候明确如何解析数据。
    4. 可以使用知名协议,也可以自己约定数据格式,属于自定义协议。

    4.2 封装 / 分用 vs 序列化 / 反序列化

    协议(protocol),最终体现为在网络上传输的数据包的格式。

    粗略的画个草图让大家先理解一下客户端服务器这种的通信流程:

    image.gif编辑

          我们每个人在使用qq 的时候,首先会联网,这样才能跟朋友愉快的聊天,其实这个联网的过程就是与腾讯qq 的服务器建立连接,当然腾讯有很多服务器,服务器之间可以进行信息交互,大家都连接上腾讯的服务器之后,这是qq 通信的基础,此时我们如果向好友qq发送信息,qq 应用层会生成一个应用层的数据报,里面的信息必然包括,你的qq ,对方的qq ,还有时间,信息体等信息,之后将数据交给传输层,传输层按照标准的网络协议保证将数据安全无误送给服务器,服务器读到你的请求之后,就会分析这个信息,看看是发给谁的,里面有 IP 地址(确认通信设备在互联网上的位置),端口号(相当于告诉这个信息是qq 发来的),以及qq 号, 腾讯的服务器依据对方qq 看看好友的 IP 设备连接上腾讯的服务器没有,如果没有就等待好友设备上线,如果刚好你朋友qq 上线了,就把消息根据拥有该账号设备的 IP地址,发给好友(同一时刻只允许一台通信设备-手机登录该qq,电脑是另一套逻辑),当然这是一串二进制数据,好友的设备接受到数据后,操作系统按照标准的网络通信协议解析,数据解析到达传输层的时候发现端口号描述的是 qq, 于是就将信息交给 qq 处理,qq 拿到信息之后按照 qq 这个应用开发者设计的消息约定,解析数据,最后消息就展现到好友的设备中了,由你发给好友的信息。


    在以上流程中,传输的数据是以数据包的格式传输。

    如果信息从应用层到物理层,层层协议会将程序中的对象层层打包,最终转化为二进制数,如果转化的过程中使用的是知名协议,例如 : 传输层的 UDP, TCP ,协议 网络层的 IP 协议,这个转化的过程被称之为封装,如果是使用的小众协议(包括自定义协议),这个转化过程就被称之为序列化

    接收端应用程序,接收数据时的数据转换,即对原始的二进制数进行解析,数据从物理层到应用层

    如果是使用知名协议解析,这个解析也称为分用,如果是使用小众协议(包括自定义协议),这个动作也称为反序列化。


    4.3 什么是端口号

    端口号是计算机网络中用于标识应用程序的的数字。在一个主机上可以同时运行多个网络应用程序,每个应用程序都会分配一个唯一的端口号,以便于其他计算机通过网络访问该应用程序。

    比如说我电脑qq 给 你发了一条消息,这个条消息通过网络发送到你的电脑,进入你的电脑后,这条消息怎么能知道要给那个应用程序呢(进程)?微信也是腾讯的,也没见着能接收qq 发的消息啊,关键的就是应用程序在启动时会绑定了一个端口号(端口号在一定范围内可以随机使用),一台主机中的端口号不可重复,所以消息在进入主机后就会根据端口号将信息发送到指定应用程序,应用程序就根据应用层的数据报协议(这个可以是通信双方约定的协议,qq自己的协议)解析信息。

    端口号只占两个字节,可以描述的数据范围是 [0, 65535] ,也就是我们可以使用的端口号只有这么多,对于小于 1024 的端口号被称之为“知名端口号”,是提供给一些名气比较大的服务器使用,例如:HTTP 服务器的端口号位 80, SSH 的端口号为:22, FTP 服务器的端口号是 21。所以我们要在程序设计中尽量避免使用这部分端口。

    下面是一些常用的端口号:

    1.HTTP协议代理服务器常用端口号:80/8080/3128/8081/9098

    2.SOCKS代理协议服务器常用端口号:1080

    3.FTP(文件传输)协议代理服务器常用端口号:21

    4.Telnet(远程登录)协议代理服务器常用端口号:23

    HTTP服务器,默认端口号为80/tcp(木马Executor开放此端口)

    HTTPS(securely transferring web pages)服务器,默认端口号为443/tcp 443/udp

    Telnet(不安全的文本传送),默认端口号为23/tcp(木马Tiny Telnet Server所开放的端口)

    FTP,默认的端口号为21/tcp(木马Doly Trojan、Fore、Invisible FTP、WebEx、WinCrash和Blade Runner所开放的端口)

    TFTP(Trivial File Transfer Protocol),默认端口号为69/udp

    SSH(安全登录)、SCP(文件传输)、端口号重定向,默认的端口号为22/tcp

    SMTP Simple Mail Transfer Protocol(E-mail),默认端口号为25/tcp(木马Antigen、Email Password Sender、Haebu Coceda、Shtrilitz Stealth、WinPC、WinSpy都开放这个端口)

    POP3 Post Office Protocol(E-mail),默认端口号为110/tcp

    Webshpere应用程序,默认端口号为9080

    webshpere管理工具,默认端口号9090

    JBOSS,默认端口号为8080

    TOMCAT,默认端口号为8080

    WIN2003远程登录,默认端口号为3389

    Symantec AV/Filter for MSE,默认端口号为 8081

    Oracle 数据库,默认的端口号为1521

    ORACLE EMCTL,默认的端口号为1158

    Oracle XDB(XML 数据库),默认的端口号为8080

    Oracle XDB FTP服务,默认的端口号为2100

    MS SQL*SERVER数据库server,默认的端口号为1433/tcp

    MS SQL*SERVER数据库monitor,默认的端口号为1434/tcp


    4.4 什么是 IP 地址

    IP地址(Internet Protocol Address)的缩写,也就是互联网协议地址属于网络层的协议。它是用于在网络中唯一标识设备的一组数字,类似于门牌号码。IP地址的作用是让数据包能够在网络上正确地传输和路由到目的地。在互联网中,每个连接到网络上的设备都需要有一个唯一的IP地址,这样其他设备才可以通过该地址与其进行通信。IP地址由32位或128位二进制数字组成,可分为IPv4和IPv6两种格式。IPv4是目前广泛使用的版本,但随着网络连接设备的增多,IPv6逐渐取代IPv4成为新型的IP地址标准。

    知道了地址才能找的到人家嘛,当前这是片面的理解,真实的理解是绑定了一个身份证号,在整个互联网中遍历寻找,找到你之后,网络层选择一条可靠的路径连接你。


    4.5 一条信息的封装

    发送方发送数据,要把数据从上到下(TCP / IP 网络模型),从应用层到物理层以此交给对应层次的协议进行封装。

    以qq 发送消息为例:

    张三使用qq 给 李四 发了一句 “早安” ;

    1. 应用层(qq应用程序)拿到张三发送的信息 “早安”, 根据发送方和接收方的用户数据进行封装,封装成应用层数据包。

    image.gif编辑

    应用层数据报可以理解为就是一串字符串连在一起,可以使用一些特殊的符号区分,是可以自定义的协议。


    2. 应用层到传输层 :使用 UDP 协议

    传输层使用那种协议可以是应用层选择的,此处使用 UDP 协议举例:

    应用层要调用传输层提供的接口来处理数据,在Java中,可以使用Java的原生套接字(Socket)API来操作UDP(用户数据报协议)。

    //创建DatagramSocket对象来表示套接字:

    DatagramSocket socket = new DatagramSocket();

    UDP 协议会根据上述数据报进行封装——添加 UDP 报头。

    image.gif编辑

    传输层协议最重要的就是给应用层数据报添加源端口和目的端口,此时端口可以认为是代表qq,添加报头本质上还是字符串的拼接。


    3. 传输层到网络层

    网络层获取到 UDP 数据报后,会将其进行二次封装,添加 IP 协议报头,网络层最常见的协议就是 IP 协议。

    image.gif编辑 编辑

    源 IP 和 源端口号都是描述数据从哪里来。

    目的 IP 和 目的端口号都是描述数据到哪里去。


    4. 网络层到数据链路层

    最典型的协议是——以太网 (数据链路层 + 物理层),同样也是会网络层数据报进行封装,也是字符串的拼接。 添加 以太网帧头,帧尾。

    image.gif编辑

    MAC地址是指 Media Access Control Address的缩写,又称为物理地址。它也是唯一的,可以理解为网卡的身份证。MAC地址是由6字节,48个二进制数表示的,通常用12个十六进制数表示。

    MAC 地址诞生的原因跟 IP 地址一样,用于在计算机网络中识别设备,每个网络接口都有一个唯一的MAC地址,当年 IP 地址的创作者跟 MAC 地址的创作者是各自设计的,他们的目的是相同的,数据包能够在网络上正确地传输和路由到目的地。

    MAC地址可以由网络设备生产商分配或者随机生成。在局域网中,当数据包从一个设备发送到另一个设备时,目标设备的MAC地址被用来确定数据包应该发送到哪个接口。

    以太网数据帧尾(Ethernet frame trailer)是以太网数据帧的最后部分,它标志着该数据帧的结束。这个字段的长度是4个字节。数据帧尾包含两个字段:CRC和帧尾定界符(FCS)。CRC表示循环冗余校验码,用于检测数据帧是否受损;帧尾定界符是一个由16个1组成的特殊序列,用于告诉接收方数据帧的结束。

    以太网数据帧尾是一个重要的组成部分,用于确保以太网数据帧能够正确地被发送和接收。


    5. 数据链路层到物理层

    到这里物理层要把从数据链路层传输过来的二进制数据转换成,光信号——光纤,电信号,电磁波信号等等进行传输。


    上述过程除应用层以外,操作系统会自动帮我们封装好,封装好之后,自然是传输到各大运营商(移动联通啥的)的服务器上,我们联网的过程就是连接他们的服务器,访问服务器中的数据,服务器会根据我们请求的数据进行二次转发,以服务器为基准向目的主机发送(响应)信息,我们各个设备之间不属于网络直连的。


    4.6 一条信息的分用

    发送方发送数据,要把数据从下到上(TCP / IP 网络模型),从物理层到应用层以此交给对应层次的协议进行分用——解析。

    设备接收信息刚好于上文反着来~~

    1. 物理层设备、网卡接收到高低电平的信号

    会接收到的信号进行解析,还原成二进制序列。

    2. 物理层到数据链路层

    当数据链路层接收到来自物理层的数据时,它会进行以下操作:

      • 检查数据的完整性:数据链路层会检查数据是否有误码(parities)或差错,以确保数据传输过程中没有出现错误。
      • 分帧:数据链路层会将接收到的比特流划分成数据帧,以便更好地进行管理和控制。
      • 数据帧的序号确认:对于可靠传输的协议,数据链路层会确认已经正确接收到的数据帧的顺序和编号。
      • 进行地址识别和转发:数据链路层会检查目标设备的地址,然后转发数据到目标设备或下一个跳点。
      • 控制流量:如果必要的话,数据链路层会使用流量控制方法来限制数据的发送速率,以确保网络的稳定性和可靠性。

      数据链路层负责管理和控制物理层传输的数据,确保成功的数据传输。

      image.gif编辑

      然后将数据帧提交给网络层。


      3. 从数据链路层到网络层

      当网络层从数据链路层接收到数据包时,会执行几个任务:

      解封装:网络层将删除数据链路层头部和尾部,只留下IP头和有效载荷。

      image.gif编辑

      校验和验证:网络层将验证IP头的校验和,以确保头部没有错误。

      路由:网络层检查IP头部的目标IP地址,并使用 IP 确定通过网络到达目标主机的最佳路径。

      数据的传输不是单单直接从点 - 点的机制,而是中间有许多中转的设备。

      完成这些任务后,网络层将数据包转发到适当的中转设备,以便将其传输到网络路由中的下一转发点,直到数据到达目标主机。

      此时由网络层的 IP 协议对网络层数据报进行解析,去掉 IP 报头。


      4. 从网络层到传输层

      传输层在接收到网络层传递过来的数据时,会根据协议规定对数据进行相应的处理。其中最常见的是针对传输控制协议(TCP)和用户数据报协议(UDP)。因为数据报是由 UDP 协议封装的数据,所以解析的时候也应当使用 UDP 协议解析(分用)。

      此时 UDP协议解析处理,凭借目的端口号来区分具体的应用程序(qq),每个联网的应用程序都需要关联一个端口号,然后去掉UDP 报头,取出荷载把数据交给应用层。

      image.gif编辑 编辑


      5. 传输层到应用层

      数据在传输层的时候凭借端口号确定是那个应用程序接收(qq),所以此时由qq 这个应用程序解析数据。

      image.gif编辑

      此时如果这是一个字符串,相信大家有许多种方法能将字符串中的字段按照某种格式提取出来,有发送方,有接收方,有时间,有消息体,此时qq 就可以将解析的数据展示给用户界面。接收方qq的作用看似没用,实际在网络传输中用来确定,qq 服务器需要根据接收方的qq 找到入网登录的设备,这一点也是上文实例提到过的。


      五、总结

      两设备之间相互通信,发送方:层层封装,接收方:层层分用。

      真实的网络环境中,数据的传输是非常复杂的,首先在整个互联网中确定主机IP 的位置就如同大海捞针,即使找到了,不见得有路线可以直达,所以数据的传输中间可能要经历很多节点的转发。

      一台电脑入网,其入网设备会随机分配一个端口号,如果该电脑需要在网络上获取信息或发送信息,就需要使用一个外网 IP 地址,作为主机的“唯一”标识,在数据分层传输的时候会常常会使用中转的设备,例如:集线器,交换机,路由器,中继器等。

      交换机:网络层设备

      1. 将物理层的数据分用到数据链路层,过程中需要判断一下目的 MAC 是否准确,以及数据帧是否完整。

      2. 交换机对数据链路层的数据进行封装,封装到物理层,继续转发数据。

      路由器:网络层设备

      1. 收到数据后会将数据直接从物理层分用(解析)到网络层,路由器属于网络层的设备,数据报在网络层会提供目的 IP 地址;,然后路由器根据目的 IP 进行下一阶段的寻址操作,IP 地址在一边传输的过程中,一边规划路径,此时源 IP 会被替换成该路由器的 IP 的地址,而原先的源 IP 地址会被路由器存储,新旧、源IP 之间形成映射关系,如果路由器进行下一阶段的寻址操作中发现前方道路无法到达目的 IP, 就会回头到 父节点,换一条路继续寻址。

      2. 将拿到的传输层数据报从网络层封装到物理层,经过数据链路层的时候,也会调整 MAC 地址,数据到达这个目标主机,才会从物理层分用到应用层。

      在网络通信中 ,以上叙述:二层和三层转发是两种不同路由的方式。

      二层转发基于物理地址进行转发,也被称为MAC地址转发。当计算机在局域网内发送数据时,数据包会被发送到目标计算机的MAC地址上。这个过程不需要路由器的帮助,因为所有的设备都连接在同一个子网内。

      三层转发则基于网络层协议,如IP地址,对数据包进行路由。当计算机发送数据包时,路由器根据目标地址将数据包传输到适当的网络。如果数据包需要跨越多个网络,则路由器将选择最佳路径进行转发。这个过程需要路由器的帮助,因为路由器可以为不同的网络提供连接。

      二层转发适用于局域网内部的通信,而三层转发适用于不同网络之间的通信。            


      勇敢一点,我们不会比今天更年轻了。

      相关文章
      |
      13天前
      |
      机器学习/深度学习 人工智能 算法
      鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
      鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
      60 12
      鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
      |
      6天前
      |
      机器学习/深度学习 数据采集 网络安全
      使用Python实现深度学习模型:智能网络安全威胁检测
      使用Python实现深度学习模型:智能网络安全威胁检测
      22 5
      |
      3天前
      |
      机器学习/深度学习 算法 搜索推荐
      图神经网络综述:模型与应用
      图神经网络综述:模型与应用
      |
      8天前
      |
      存储 机器人 Linux
      Netty(二)-服务端网络编程常见网络IO模型讲解
      Netty(二)-服务端网络编程常见网络IO模型讲解
      |
      1月前
      |
      网络协议 数据安全/隐私保护 网络架构
      计算机网络模型
      【9月更文挑战第2天】
      47 24
      |
      21天前
      |
      网络协议 网络架构 数据格式
      TCP/IP基础:工作原理、协议栈与网络层
      TCP/IP(传输控制协议/互联网协议)是互联网通信的基础协议,支持数据传输和网络连接。本文详细阐述了其工作原理、协议栈构成及网络层功能。TCP/IP采用客户端/服务器模型,通过四个层次——应用层、传输层、网络层和数据链路层,确保数据可靠传输。网络层负责IP寻址、路由选择、分片重组及数据包传输,是TCP/IP的核心部分。理解TCP/IP有助于深入掌握互联网底层机制。
      100 2
      |
      22天前
      |
      网络协议 Java
      谈谈TCP/IP网络编程
      【9月更文挑战第1天】在当今数字化的世界中,网络通信是连接各种设备和系统的关键。TCP/IP协议作为互联网通信的基石,被广泛应用于各种网络场景。了解TCP/IP网络编程的概念,并掌握如何在Java中实现TCP/IP通讯,对于开发人员来说是非常重要的。
      44 4
      |
      23天前
      |
      机器学习/深度学习 人工智能 自然语言处理
      机器学习模型之深度神经网络的特点
      深度神经网络(Deep Neural Networks, DNNs)是一类机器学习模型,通过多个层级(层)的神经元来模拟人脑的工作方式,从而实现复杂的数据处理和模式识别任务。
      32 1
      |
      29天前
      |
      算法
      基于GA遗传优化的离散交通网络双层规划模型设计matlab仿真
      该程序基于GA遗传优化设计了离散交通网络的双层规划模型,以路段收费情况的优化为核心,并通过一氧化碳排放量评估环境影响。在MATLAB2022a版本中进行了验证,显示了系统总出行时间和区域排放最小化的过程。上层模型采用多目标优化策略,下层则确保总阻抗最小,实现整体最优解。
      |
      29天前
      |
      网络协议 安全 网络安全
      C语言 网络编程(四)常见网络模型
      这段内容介绍了目前被广泛接受的三种网络模型:OSI七层模型、TCP五层模型以及TCP/IP四层模型,并简述了多个网络协议的功能与特性,包括HTTP、HTTPS、FTP、DNS、SMTP、TCP、UDP、IP、ICMP、ARP、RARP及SSH协议等,同时提到了ssh的免费开源实现openssh及其在Linux系统中的应用。
      下一篇
      无影云桌面