当前位置: 首页 > news >正文

TCP/IP 协议族

1、计算机网络体系结构

1.1 网络模型

开放系统互连参考模型 (Open System Interconnect,OSI)是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参考模型,为开放式互连信息系统提供了一种功能结构的框架。OSI 采用分层结构化技术,共分为七层:物理层、数据链路层、网络层、 传输层、会话层、表示层、应用层

OSI 模型比较复杂且学术化,所以我们实际使用的 TCP/IP 模型,共分 4 层,链路层、网络层、传输层、应用层。两个模型之间的对应关系如图所示:

在这里插入图片描述

无论什么模型,每一个抽象层建立在低一层提供的服务上,并且为高一层提供服务。

1.2 为什么要分层?

总的来说,是网络不稳定导致了分层需求。

数据在网络传输时会自动选择最优路径,这种路径选择过程称为路由。由于网络具有天然不稳定性(如路由器损坏、网线被拔、停电等意外情况),需要通过接收方回执确认和超时重传来保证传输可靠性。当传输路径中的路由器损坏时,发送方在超时未收到回执后会选择其他路径重传数据。假设一个数据很大,数据量越大传输时间越长,且传输时间与失败风险成正比。那么在重传时如果又遇到路由损坏,就又要换路由重传这一个大数据,又要等很长时间。

因此,需要分块解决方案,仅需重传失败的数据块(接收方会记录已接收数据,避免重复处理),分块传输的额外成本要远远小于整体重传的额外成本,在显著降低重传数据量的同时,也降低了失败概率。

在分块传输的基础上,为了实现功能解耦,让多个协议可以共享同一套传输机制,就进一步演化为分层。这样每层就只负责自己的功能即可(比如传输层统一处理分块/重传等基础功能),而且每一层不用关心其他层的具体传输细节。

1.3 TCP/IP 协议族

Transmission Control Protocol/Internet Protocol 的简写,中译名为传输控制协议/因特网互联协议,是 Internet 最基本的协议、Internet 国际互联网络的基础,由网络层的 IP 协议和传输层的 TCP 协议组成。协议采用了 4 层的层级结构。然而在很多情况下,它是利用 IP 进行通信时所必须用到的协议群的统称。也就是 说,它其实是个协议家族,由很多个协议组成,并且是在不同的层, 是互联网的基础通信架构。

在这里插入图片描述

每个分层中,都会对所发送的数据附加一个首部,在这个首部中包含了该层必要的信息,如发送的目标地址以及协议相关信息。通常,为协议提供的信息为包首部,所要发送的内容为数据。在下一层的角度看,从上一层收到的包全部都被认为是本层的数据。网络中传输的数据包由两部分组成:一部分是协议所要用到的首部,另一部分是上一层传过来的数据。首部的结构由协议的具体规范详细定义。在数据包的首部,明确标明了协议应该如何读取数据。反过来说,看到首部,也就能够了解该协议必要的信息以及所要处理的数据。

在这里插入图片描述

各层的工作内容:

  1. 应用程序处理:首先应用程序会进行编码处理,这些编码相当于 OSI 的表示层功能;编码转化后,邮件不一定马上被发送出去,这种何时建立通信连接何时发送数据的管理功能,相当于 OSI 的会话层功能
  2. TCP 模块的处理:TCP 根据应用的指示,负责建立连接、发送数据以及断开连接。TCP 提供将应用层发来的数据顺利发送至对端的可靠传输。为了实现这一功能,需要在应用层数 据的前端附加一个 TCP 首部
  3. IP 模块的处理:IP 将 TCP 传过来的 TCP 首部和 TCP 数据合起来当做自己的数据,并在 TCP 首部的前端加上自己的 IP 首部。IP 包生成后,参考路由控制表决定接受此 IP 包的路由或主机
  4. 网络接口(以太网驱动)的处理:从 IP 传过来的 IP 包对于以太网来说就是数据。给这些数据附加上以太网首部并进行发送处理,生成的以太网数据包将通过物理层传输给接收端
  5. 网络接口(以太网驱动)的处理:主机收到以太网包后,首先从以太网包首部找到 MAC 地址判断是否为发送给自己的包,若不是则丢弃数据。如果是发送给自己的包,则从以太网包首部中的类型确定数据类型,再传给相应的模块,如 IP、ARP 等。这里的例子则是 IP
  6. IP 模块的处理:IP 模块接收到 数据后也做类似的处理。从包首部中判断此 IP 地址是否与自己的 IP 地址匹配,如果匹配则根据首部的协议类型将数据发送给对应的模块,如 TCP、UDP。这里的例子则是 TCP。 另外,对于有路由器的情况,接收端地址往往不是自己的地址,此时,需要借助路由控制表,在调查应该送往的主机或路由器之后再进行转发数据
  7. TCP 模块的处理:在 TCP 模块中,首先会计算一下校验和,判断数据是否被破坏。然后检查是否在按照序号接收数据。最后检查端口号,确定具体的应用程序。数据被完整地接收以后,会传给由端口号识别的应用程序
  8. 应用程序的处理:接收端应用程序会直接接收发送端发送的数据。通过解析数据,展示相应的内容

相关文章:

  • Python AI 绘画
  • Linux多线程编程
  • 15.1 【基础项目】使用 HTML、CSS 和 TypeScript 构建的简单计数器应用
  • 数据仓库中的业务域与数据域
  • XSS脚本攻击-DDoS僵王博士-SQL注入-考试周前的邮件
  • 【Java工程师面试全攻略】专栏开篇:从面试流程到基础准备
  • 前端开发知识体系全景解析
  • 【HTML-12】HTML表格常用属性详解:从基础到高级应用
  • 【EcelVBA】系统学习 ActiveX 控件
  • 历年哈尔滨工业大学保研上机真题
  • leetcode排序链表 java
  • Python Day33
  • java多态的学习笔记
  • 解决DeepSeek部署难题:提升效率与稳定性的关键策略
  • MYSQL中的分库分表
  • C++ STL 算法函数std::remove_if学习
  • Q1:Go协程、Channel通道 被close后,读会带来什么问题?
  • 题目 3325: 蓝桥杯2025年第十六届省赛真题-2025 图形
  • Q2:如果 Channel 没有关闭,读取会一直阻塞吗?
  • C++23 元编程工具新特性探索
  • 网站的主要功能/企业网络推广方式
  • 衢州市建设工程管理处网站/百度热度指数排行
  • 免费做网站靠谱么/自助发外链网站
  • 网站建设 话术/陕西优化疫情防控措施
  • 鹤壁哪里做网站/做整站优化
  • 免费模板建设网站/关于软文营销的案例