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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 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地址,对数据包进行路由。当计算机发送数据包时,路由器根据目标地址将数据包传输到适当的网络。如果数据包需要跨越多个网络,则路由器将选择最佳路径进行转发。这个过程需要路由器的帮助,因为路由器可以为不同的网络提供连接。

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


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

      相关文章
      |
      1天前
      |
      网络协议 安全 网络安全
      探索网络模型与协议:从OSI到HTTPs的原理解析
      OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
      13 1
      |
      6天前
      |
      监控 安全 BI
      什么是零信任模型?如何实施以保证网络安全?
      随着数字化转型,网络边界不断变化,组织需采用新的安全方法。零信任基于“永不信任,永远验证”原则,强调无论内外部,任何用户、设备或网络都不可信任。该模型包括微分段、多因素身份验证、单点登录、最小特权原则、持续监控和审核用户活动、监控设备等核心准则,以实现强大的网络安全态势。
      |
      26天前
      |
      网络协议 网络架构
      TCP/IP协议架构:四层模型详解
      在网络通信的世界里,TCP/IP协议栈是构建现代互联网的基础。本文将深入探讨TCP/IP协议涉及的四层架构,以及每一层的关键功能和作用。
      125 5
      |
      26天前
      |
      网络协议
      网络通信的基石:TCP/IP协议栈的层次结构解析
      在现代网络通信中,TCP/IP协议栈是构建互联网的基础。它定义了数据如何在网络中传输,以及如何确保数据的完整性和可靠性。本文将深入探讨TCP/IP协议栈的层次结构,揭示每一层的功能和重要性。
      54 5
      |
      1月前
      |
      网络协议 网络安全 网络虚拟化
      本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
      本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
      100 3
      |
      1月前
      |
      存储 网络协议 安全
      30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
      本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
      86 2
      |
      1月前
      |
      网络协议 安全 Go
      Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
      【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
      60 13
      |
      1月前
      |
      运维 网络协议 算法
      7 层 OSI 参考模型:详解网络通信的层次结构
      7 层 OSI 参考模型:详解网络通信的层次结构
      145 1
      |
      8天前
      |
      SQL 安全 网络安全
      网络安全与信息安全:知识分享####
      【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
      46 17
      |
      18天前
      |
      存储 SQL 安全
      网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
      随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。