TCP/IP详解——数据转发过程

文章目录

  • 一、数据转发过程
    • 1. TCP封装(传输层封装)
    • 2. IP封装(网络层封装)
    • 3. 查找路由
    • 4. ARP(数据链路层封装)
    • 5. 以太网封装
    • 6. 数据帧转发过程
    • 7. 数据帧转发过程
    • 8. 数据包转发过程
    • 9. 数据帧解封装
    • 10. 数据包解封装
    • 11. 数据段解封装
    • 12. 总结

一、数据转发过程

image-20230719154827074

数据转发过程

image-20231126093022052

  • 数据从接口发出时,第一个承接的设备是二层交换机,二层交换机识别最外层以太网封装的。会按照源MAC和目的MAC在局域网之间进行一个短距离的传输。传递给路由器。
  • 路由器会获取到交换机传递来的数据。路由器是根据IP地址进行转发的,所以会解封装查看IP地址。确认好IP地址后,在其发送出去的时候会重新封装一层以太网。
  • 最终数据会传递到服务器中。而服务器是一个七层的,同样会进行逐层的解封装,然后查看端口号对应的服务是否开放,应用程序对数据进行处理。之后服务器会给客户端进行响应,同样的流程进行封装和解封装。

交换机转发的是数据帧

因特网中转发的是数据包

实例

运行FTP的两台主机

image-20231118211813579

  • 大多数的网络应用程序都被设计成客户——服务器模式。
  • 双方都有对应的一个或多个协议进行通讯。
  • 应用程序通常是用户进程,而下三层一般在内核执行(链路层,网络层,传输层)。
  • 应用层关心应用程序的细节,下三层处理通讯细节。

通过路由器连接的两个网络

image-20231118211755861

  • 端系统:pc和服务器(end system)。

  • 中间系统:路由器(intermediate system)。

  • 应用层和传输层使用端到端(end-to-end)协议。

  • 网络层提供的是逐跳(hop-to-hop)协议。

  • 网络IP提供的是一种不可靠的服务,只是尽可能快的把分组从源节点送到目的结点,但是不提供可靠性保障。

  • TCP在不可靠的IP层上提供了一个可靠的传输层。

  • 链路层逐介质的。

  • 互联网的目的之一就是在应用程序中隐藏所有的物理细节。

封装

image-20231118211703998

分用

image-20231118211720689

1. TCP封装(传输层封装)

image-20230719154857751

  • 当建立TCP连接后,开始对应用层数据进行封装。首先执行数据相关加密和压缩操作,然后进行传输层封装。Web应用基于传输层的TCP协议传输数据。

  • 使用TCP进行报文封装,首先填充源端口,目的端口字段,初始序列号,确认序列号,标识位,窗口字段以及校验和字段。源端口号主机A随机选择1027端口,目的端口为服务器的TCP知名端口80

2. IP封装(网络层封装)

image-20230719155149386

  • 主机A完成传输层封装,一般进行网络层数据封装,使用IP封装时,需明确IP报文源地址和目的地址,且IP报文大于网络最大传输单元(MTU),则该报文有可能在传输中被分片。

  • TTL字段用来减少网络环路造成的影响。

  • 协议字段Protocol标识传输层使用协议,如使用TCP,则为0X06。

3. 查找路由

image-20230719155358078

  • 每个主机维护各自的路由表项,主机A发送数据前检查能否到达目的端,是通过查找路由来完成的。
  • 本例中,主机A有一条到达“任何网络”的路由,它发往其他网络的数据都通过IP地址为10.1.1.1的接口跳到网关10.1.1.254。

4. ARP(数据链路层封装)

image-20230719155729236

  • 接下来,数据包要封装成帧,需要下一跳MAC地址,也就是网关MAC地址,主机首先查询ARP缓存表,本例中ARP缓存表存在网关MAC地址表项。
  • 如果没有查到,会通过发送ARP请求获取网关MAC地址。

5. 以太网封装

image-20230719155827431

  • 主机A封装数据帧的时候,遵循IEEE 802.3 或Ethernet_II 标准,Ethernet_II 帧头类型字段填充为0X0800,表示IP协议。并填充上源MAC地址和目的MAC地址。

6. 数据帧转发过程

image-20230719155933438

  • 主机工作在半双工状态,用CSMA/CD来检测链路是否空闲。如果空闲,主机A还会将一个前导码(Preamble)和一个帧首定界符(SFD)附加帧头上。
  • 前导码作用是使接受设备进行同步并做好接受数据帧的准备,包括7个字节的1,0交替代码,即101010…10共56位。
  • 帧首定界符是长度为1个字节的10101011二进制序列,是使接收端对帧第一位定位。

7. 数据帧转发过程

image-20230719160124947

本例中数据帧发送到共享以太网,此网络所有设备都会收到。

  1. 收到帧后,首先进行FCS校验,与本机计算的值对比来确定帧在传输过程中是否保持了完整性,未通过直接丢弃,然后再看MAC地址。
  2. 如果目的MAC地址与自己不同,丢弃。相同继续处理,处理过程中帧头帧尾会被剥去(解封装),剩下数据报文根据帧头类型字段值送到网络层对应协议模块处理。

8. 数据包转发过程

image-20230719160215251

  • RTA收到收到数据报文后,网络层进行处理,首先根据IP头部检验和字段检查IP头部完整性。
  • 根据目的IP查看路由表,确定是否能够将数据包转发到目的端
  • RTA还会对TTL值进行处理。
  • 报文不能超过MTU值,否则将会被分片。
  • 网络层处理完成后,报文将送到数据链路层重新进行封装,成为一个新的数据帧,该帧头部封装新的源MAC地址和目的MAC地址。如果不知道下一跳MAC地址,将使用ARP协议来获得。

9. 数据帧解封装

数据链路层解封装

image-20230719160356805

  • RTB继续以服务器A的MAC地址作为目的MAC继续转发。在一个网络中,两台服务器都会受到数据帧,只有服务器A的数据帧发现目的MAC地址为自己的MAC地址,会继续处理该数据帧。

  • 服务器A收到该帧,先查看MAC地址是否和自己的MAC地址一致,如果一致那么进行FCS校验,通过FCS校验,根据帧中类型字段判别上层协议即网络层协议,解封装后交给网络层IP协议进行处理。

10. 数据包解封装

网络层解封装

image-20230719160623022

  • 首先会通过检验和字段验证报文头的完整性。
  • 服务器A检查数据包目的IP地址,发现与自己IP相同。
  • 如果数据传输中发生分片,在目的端会重新组合,标识字段标识属于同一数据源的分片报文,偏移量(Fragment Offset)是该分片在原分片组的相对位置。
  • 标志字段Flags只有两位有意义,最低位为1,表示后面还有分片,为0表示已经是最后一个数据片,中间一位为1表示不能分片,为0表示允许分片。所有分片被目的端全部接受后才进行重新组合。
  • 协议字段表示上层是哪种协议(下一个报头并非一定是传输层协议,也可能是网络层的ICMP报文,也是用IP协议进行封装,协议字段0x01)

11. 数据段解封装

传输层解封装

image-20230719160932074

  • IP报文头被剥离后,发送到传输层进行处理,此例中使用TCP,且已经通过三次握手进行链接,TCP查看目的端口号为80,用于表示处理该数据的应用层协议为HTTP协议,TCP处理完头部信息后将此数据段头部剥离,将剩余的应用程序数据发送给HTTP协议进行处理

12. 总结

  • 数据在进行二层和三层封装之前,主机需要了解哪些信息?

    • 主机在封装数据包之前,必须要知道目的端IP地址。
    • 在封装数据帧之前,必须要知道去往目的网络的路由以及下一跳的MAC地址。
  • 当数据帧发送到非目的主机时,非目的主机将如何处理?

    • 如果主机接收到一个不是发往自己的数据帧,在检验帧头中的目的MAC地址之后会丢弃该帧。
  • 传输层如何能够准确的将数据交给特定应用?

    • 传输层会检查TCP或UDP报文头中的目的端口号,以此来识别特定应用。
  • 当两台主机同时访问服务器HTTP服务,该服务器如何区分数据属于哪个会话?

    • 服务器可以只通过源IP地址识别两台主机的HTTP流量,另外TCP报文头中包含的源端口也可以被用来区分同一台主机通过不同的浏览器发起的不同的会话。例如,两个来自源IP为10.1.1.1的HTTP流量使用的目的端口号都是80,但源端口号可能为1028和1035。

源端口

image-20230719162858360

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/246426.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Docker】WSL 2 上的 Docker 搭建和入门

▒ 目录 ▒ 🛫 导读开发环境 1️⃣ 安装安装Docker Desktop for Windows 2️⃣ 环境配置3️⃣ hello world第一次运行再次运行分析总结 📖 参考资料 🛫 导读 开发环境 版本号描述文章日期2023-12-14操作系统Win11 - 22H222621.2715WSL2 C:…

TypeScript【枚举、联合类型函数_基础、函数_参数说明 、类的概念、类的创建】(二)-全面详解(学习总结---从入门到深化)

文章目录 枚举 联合类型 函数_基础 函数_参数说明 类的概念 类的创建 枚举 枚举(Enum)类型用于取值被限定在一定范围内的场景,比如一周只能有七天,颜色限定为红绿蓝等 枚举例子 枚举使用 enum 关键字来定义 enum Days {…

uniapp框架——初始化vue3项目(搭建ai项目第一步)

文章目录 ⭐前言💖 小程序系列文章 ⭐uniapp创建项目💖 初始化项目💖 uni实例生命周期💖 组件生命周期💖 页面调用💖 页面通讯💖 路由 ⭐搭建首页⭐form表单校验页面⭐总结⭐结束 ⭐前言 大家好…

Chart 10 OpenCL 优化教学

文章目录 前言10.1 博客10.2 Sample Code10.2.1 算法优化10.2.2 Vectorized load/store10.2.3 image 代替 buffer 10.3 Epsilon Filter10.3.1 初始化实现10.3.2 Data pack optimization10.3.3 Vectorized load/store optimization10.3.4 Further increase workload per work it…

windows禁用系统更新

1.在winr运行框中输入services.msc,打开windows服务窗口。 services.msc 2.在服务窗口中,我们找到Windows update选项,如下图所示: 3.双击windows update服务,我们把启动类型改为禁用,如下图所示&#xff…

【网络安全】网络防护之旅 - 对称密码加密算法的实现

🌈个人主页:Sarapines Programmer🔥 系列专栏:《网络安全之道 | 数字征程》⏰墨香寄清辞:千里传信如电光,密码奥妙似仙方。 挑战黑暗剑拔弩张,网络战场誓守长。 目录 😈1. 初识网络安…

服务器系统启动卡logo问题解决分析

系统版本:Kylin-4.0.2-server-sp4-20200808.J1-57s-xxc_01-20210112-x86_64 问题:系统启动一直卡在麒麟logo那里,进不去系统。在gurb里去掉系统启动参数quiet和splash,发现启动卡在如下界面。 排查:开始怀疑是掉电导致…

【带头学C++】----- 九、类和对象 ---- 9.12 C++之友元函数(9.12.5---9.12.7)

❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️创做不易,麻烦点个关注❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️ ❤️❤️❤️❤️❤️❤️❤️❤️❤️文末有惊喜!献舞一支!❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️ 目录 补充上…

Kubernetes 容器编排 -- 1

前言 知识扩展 早在 2015 年 5 月,Kubernetes 在 Google 上的搜索热度就已经超过了 Mesos 和 Docker Swarm,从那儿之后更是一路飙升,将对手甩开了十几条街,容器编排引擎领域的三足鼎立时代结束。 目前,AWS、Azure、Google、阿里…

Vulnhub-DC-3 靶机复现完整过程

啰嗦两句: 提权之前完成是一个月前做的,当时在提权处出了点问题就搁置了,今天才完成,所以IP地址可能会会有变化 注意:后续出现的IP地址为192.168.200.55同样是靶机IP地址,若本文能有帮助到你的地方&#xf…

k8s中的Pod

目录 1.1 创建一个pod 1.2 pod是如何被创建的 1.3 创建一个单容器pod 1.4 创建一个多容器pod 1.4.1 配置节点标签 1.5 Pod容器的交互 1.5.1 创建pod,并做本地解析 1.5.2 pod共享进程 1.5.2 pod共用宿主机namespace Pod 是可以在 Kubernetes 中创建和管理的、…

Redis设计与实现之字典

目录 一、字典 1、 字典的应用 实现数据库键空间 用作Hash类型键的其中一种底层实现 2、字典的实现 哈希表实现 哈希算法 3、创建新字典 4、添加键值对到字典 5、添加新元素到空白字典 6、添加新键值对时发生碰撞处理 7、添加新键值对时触发了 rehash操作 Note:什么…

Java 基础学习(九)API概述、Object、String、正则表达式

1 API概述 1.1 API概述 1.1.1 什么是API API(Application Programming Interface),意为:应用程序接口。API就是已经写好的的程序或功能,程序要需要时可以直接调用,无需再次编写。 API可以大致分为如下几类: 编程语…

【笔试强化】Day 2

文章目录 一、选择1.2.(写错)3.4.5.6.(不会)7.(不清晰)8. (不会)9.10.(写错) 二、编程1. 排序子序列解法:代码: 2. 倒置字符串解法&am…

STM32--中断使用(超详细!)

写在前面:前面的学习中,我们接触了STM32的第一个外设GPIO,这也是最常用的一个外设;而除了GPIO外,中断也是一个十分重要且常用的外设;只有掌握了中断,再处理程序时才能掌握好解决实际问题的逻辑思…

MyBatis之逆向工程

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…

IT圈茶余饭后的“鄙视链”

哈哈,IT圈的鄙视链,简直就是一出情感大戏!这个圈子里的人们总是忍不住要互相比较,互相鄙视,仿佛这是一场刺激的游戏,每个人都想要站在鄙视链的最顶端,成为那个最牛逼的存在。 首先,…

uniapp开发项目注意事项

uniapp创建项目用HBuilderX创建或者用脚手架命令创建都可以vue文件渲染h5,小程序很好nvue文件渲染原生app更好,注意nvue文件css的一些局限性,简称坑死人nvue所支持的通用样式已在本文档中全部列出,一些组件可能有自定义样式&#…

Docker网络模式:深度理解与容器网络配置

Docker 的网络模式是容器化应用中一个关键而复杂的方面。本文将深入讨论 Docker 的网络模式,包括基本概念、常用网络模式以及高级网络配置,并通过更为丰富和实际的示例代码,帮助读者全面掌握如何理解和配置容器网络。 Docker网络基础 1 Doc…

Pr自动从视频脚本剪辑视频FirstCut插件免费下载

FirstCut 插件将自动从视频脚本中剪辑视频,在例如新闻、采访、自媒体视频等带有配音或字幕内容的视频制作中提高了粗剪效率。 使用 FirstCut,大大缩短了粗剪的时间,而不是转到每个视频文件并找到 IN 点和 OUT 点,然后将其插入到序…