【Linux篇】TCP/IP协议(笔记)

news2024/12/28 6:30:47

目录

一、TCP/IP协议族体系结构

 1. 数据链路层

(1)介绍

(2)常用协议

① ARP协议(Address Resolve Protocol,地址解析协议)

② RARP协议(Reverse Address Resolve Protocol,逆地址解析协议)

2. 网络层

(1)介绍

(2)常用协议

① IP协议(Internet Protocol,因特网协议)

② ICMP协议(Internet Control Message Protocol,因特网控制报文协议)

3. 传输层

(1)介绍

(2)常用协议

① TCP协议(Transmission Control Protocol,传输控制协议)

② UDP协议(User Datagram Protocol,用户数据报协议)

③ SCTP协议(Stream Control Transmission Protocol,流控制传输协议)

4. 应用层

(1)介绍

(2)常见协议

① ping

② telnet协议

③ OSPF(Open Shortest Path First,开放最短路径优先)协议

④ DNS(Domain Name Service,域名服务)协议

二、封装

1. TCP报文段(TCP message segment)

2. IP数据报(IP datagram)

3. 帧(frame)

三、分用

四、socket和TCP/IP协议族的关系

五、IP工作流程

六、TCP服务特点

        TCP传输为什么可靠?


一、TCP/IP协议体系结构

 1. 数据链路层

(1)介绍

        数据链路层实现了 网卡接口的 网络驱动程序,以 处理数据在 物理媒介(比如以太网、令牌环等)上的 传输。不同的物理网络 具有不同的 电气特性,网络驱动程序 隐藏了 这些细节,为上层协议提供一个 统一的接口。

(2)常用协议

ARP协议(Address Resolve Protocol,地址解析协议)

        网络层使用 IP地址 寻址一台机器,而 数据链路层 使用物理地址 寻址 一台机器,因此 网络层必须 先将 目标机器的 IP地址 转化成其 物理地址, 才能使用数据链路层提供的服务,这就是 ARP协议的用途。

② RARP协议(Reverse Address Resolve Protocol,逆地址解析协议)

        仅用于 网络上的 某些 无盘工作站。因为缺乏存储设备,无盘工作站 无法 记住自己的 IP地址,但它们 可以利用 网卡上的 物理地址 来向网络管理者(服务器或网络管理软件)查询自身的 IP地址。运行 RARP服务 的网络 管理者 通常 存有该网络上 所有机器的 物理地址到 IP地址 的映射。

2. 网络层

(1)介绍

        网络层 实现数据包的 选路和转发 。WAN Wide Area Network ,广域网)通常使用 众多 分级的 路由器来 连接分散的 主机 或 LAN Local Area Network,局域网),因此,通信的 两台主机一般 不是直接相连的,而是 通过多个中间节点(路由器)连接的。
        网络层的 任务就是 选择 这些中间节点,以 确定两台主机之间的 通信路径。同时,网络层对上层 协议 隐藏了网络拓扑连接的 细节,使得 在传输层 和 网络应用程序 看来, 通信的双方 是 直接相连的。

(2)常用协议

① IP协议(Internet Protocol,因特网协议)
         IP协议 根据数据包的 目的 IP 地址 来决定如何 投递它。 如果 数据包不能 直接发送给 目标主机,那么 IP协议 就为它 寻找一个合适的 下一跳(next hop)路由器,并 将数据包交付给 该路由器来 转发。 多次 重复这一过程,数据包 最终到达 目标主机,或者 由于发送失败而 被丢弃。
        可见,IP 协议使用逐跳(hop by hop)的方式确定通信路径。
② ICMP协议(Internet Control Message Protocol,因特网控制报文协议)
        它是 IP协议 的重要补充, 主要 用于检测网络连接ICMP协议 并非严格意义上 的 网络层协议,因为 它使用处于 同一层的 IP协议 提供的服务(一般来说,上层协议 使用下层协议 提供的 服务)。

3. 传输层

(1)介绍

        传输层 为两台主机上 的应用 程序提供 端到端(end to end)的通信 。与 网络层使用的 逐跳通信方式不同,传输层 只关心通信的 起始端和 目的端,而不在 乎数据包的 中转过程。

        垂直的 实线箭头表示 TCP/IP协议族 各层之间的 实体通信 (数据包 确实是沿着 这些线路传递的),而 水平的虚线箭头 表示逻辑通 信线路。

(2)常用协议

① TCP协议(Transmission Control Protocol,传输控制协议)
        为应用层提供 可靠的、面向连接的 和 基于流(stream)的服务TCP协议 使用 超时重传、数据 确认等 方式来 确保数据包 被正确地发 送至目的端,因此 TCP服务是可靠的。
         使用 TCP协议通信的双方 必须先建立 TCP连接,并在 内核中 为该连接 维持一些 必要的数据结构 (如连接的状态、读写缓冲区,以及诸多定时器等),当通信结束时,双方必须关闭连接以释放这些 内核数据。
        TCP服务是 基于流的。基于流 的数据 没有边界(长度)限制,它 源源不断地 从通信的一端 流入另一端。发送端 可以逐个字节地 向数据流中 写入数据,接收端 也可以 逐个字节地将 它们读出。
② UDP协议(User Datagram Protocol,用户数据报协议)
         它为 应用层提供 不可靠、无连接 和 基于数据报的 服务。
        “不可靠 ” 意味UDP协议 无法保证数据从发送端正确地 传送到目的端。如果 数据在 中途丢失,或者目的 端通 过数据校验 发现数据错误而 将其丢弃,则 UDP 协议 只是 简单地 通知应用程序 发送失败。因此,使用 UDP协议 的应用程序 通常要自己 处理数据确认、超时重传等逻辑。
        UDP协议 是无连接的,即 通信双方 不保持一个 长久的联系,因此 应用程序 每次发送数据 都要明确 指定接收端的 地址( IP地址等信息 )。每个 UDP数据报 都有一个 长度,接收端 必须 以该长度 为最小单位 将其所有 内容 一次性读出,否则 数据将被截断。
③ SCTP协议(Stream Control Transmission Protocol,流控制传输协议)
        这是一种相对较新的 传输层协议,它是 为了在因特网上 传输电话信号 而设计的。

4. 应用层

(1)介绍

         应用层负责 处理应用程序的逻辑。
        数据链路层、网络层和传输层负责 处理网络 通信细节,这部分 必须既稳定 又高效,因此它们 都在内核空间中 实现。而应用层则 在用户空间实现,因为 它负责 处理 众多逻辑,比如 文件传输、名称查询 和 网络管理等。如果 应用层也在内核中 实现,则会 使内核变得 非常庞大。
        也有少数服务器程序是 在内核中实现的,这样 代码就无须在 用户空间 和 内核空间 来回切换( 主要是数据的复制 ),极大地 提高了 工作效率。不过 这种代码实现 起来较 复杂,不够灵活,且不便于移植。

(2)常见协议

① ping
        是应用程序,而不是协议,是调试网络环境的 必备工具。
② telnet协议
        是一种远程登录协议,它使我们能在本地完成 远程任务。
③ OSPF(Open Shortest Path First,开放最短路径优先)协议

        是一种动 态路由更新协议,用于路由器之间的通信,以告知对方各自的路由信 息。

④ DNSDomain Name Service,域名服务)协议
        提供机器域名到IP地 址的转换,我们将在后面简要介绍DNS协议。

二、封装

1. TCP报文段(TCP message segment)

        经过 TCP 封装 后的数据 称为  TCP 报文段( TCP message segment)。 TCP协议 为 通信双方 维持一个连接,并且 在内核中 存储 相关数据。这部分数据中的 TCP头部信息 和 TCP内核缓冲 区(发送缓冲区或接收缓冲区)数据一起构成了 TCP报文段。

        当发送端应用程序 使用 send( 或者 write )函数向一个 TCP连接 写入数据时,内核中 的 TCP模块 首先 把这些数据复制 到 与该连接对应的 TCP 内核 发送缓冲区 中,然后 TCP模块调用 IP模块 提供的 服务,传递的参 数包括 TCP头部信息 和 TCP发送缓冲区 中的 数据,即 TCP报文段。

2. IP数据报(IP datagram

        经过 IP 封装后的 数据称为  IP 数据报( IP datagram )。 IP 数据报也 包括 头部信息 和 数据部分,其中 数据部分就 是一个 TCP 报文段、 UDP 数据报 或者 ICMP 报文。

3. 帧(frame)

        经过数据链路层封装的数据称为帧(frame)。

        帧的 最大传输单元(Max Transmit Unit MTU ),即 帧最多能携带 多少上层 协议数据(比如 IP 数据报),通常受到 网络类型的限制。 所以,过长的  IP数据报 可能需要被 分片(fragment)传输。
        帧才是最终在物理网络上传送的字节序列。

三、分用

        当帧到达目的 主机时,将 沿着协议栈 自底向上 依次传递。各层协议依次 处理帧中 本层负责的 头部数据,以 获取所需的 信息,并 最终将处理后的 帧交给 目标应用程序。

  •       因为IP协议、ARP协议 和 RARP协议 都使用 帧传输数据,所以 帧的头部 需要提供 某个字段(具体情况取决于帧的类型)来 区分它们。
  •       因为 ICMP协议、TCP协议 和 UDP协议 都使用 IP协议,所以 IP数据报 的头部 采用 16位 的协议(protocol)字段 来区分它们。
  •       TCP报文段 和 UDP数据报 则通过 其头部中的 16位的端口号(port number)字段 来区分上层 应用程序。
        帧通过上述分用步骤后,最终将封装前的原始数据送至目标服务。

四、socket和TCP/IP协议族的关系

        数据链路层、网络层、传输层协议是在内核中实现的。因此操作系统 需要 实现一组 系统调用,使得 应用程序能够 访问这 些协议提供的 服务。实现这组系统调用的 API(Application Programming Interface,应用程序编程接口)主要有两套:socket 和 XTI

由 socket 定义 的这一组 API提供 如下两点功能:
      ① 将应用程序数据 从 用户缓冲区中 复制到 TCP/UDP 内核 发送缓冲区,以 交付内核 来发送数据,或者是 从内核 TCP/UDP 接收缓冲区 中 复制数据到 用户缓冲区,以 读取数据。
      ② 应用程序 可以通过它们 来修改 内核中 各层协议的 某些头部信息 或 其他数据结构,从而 精细地 控制底层通信 的行为。

        socket 是一套通用网络编程接口,它 不但可以 访问内核中 TCP/IP协议栈,而且 可以访问 其他网络协议栈。

五、IP工作流程

        这里从右往左来分析。
  1.   当IP模块接收到 来自数据链路层的 IP数据报 时,它首先 对该数据报的头部做 CRC校验,确认无误 之后就 分析其头部的 具体信息。
  2.   如果该 IP数据报 的头部设置了 源站选路 选项,则 IP模块 调用数据报 转发子模块 来 处理该 数据报。
  3.   如果该 IP数据报的 头部中 目标 IP地址 是本机的 某个 IP地址,或者是 广播地址,即 该数据报是 发送给本机的,则 IP模块 就根据数据报 头部中的 协议 字段来 决定将它 派发给 哪个上层应用(分用)。如果 IP模块 发现这个数据报 不是发送给 本机的,则也 调用数据报 转发子模块来处理该数据报。
  4.   数据报转发子模块 将首先检测 系统是否 允许转发,如果 不允许,IP模块 就将 数据报 丢弃。如果允许,数据报转发子模块 将对该数据报 执行一些 操作,然后 将它交给 IP数据 报输出子 模块。
  5.   IP数据 报应该 发送至哪个 下一跳路由(或者目标机器),以及 经过哪个 网卡来发送,就是 IP路由 过程。
  6.   IP输出队列 中存放的 是所有等待 发送的 IP数据报,其中 除了需要转发的 IP数据报 外,还包括 封装了本机 上层数据(ICMP报文、TCP报文段和UDP数据报)的IP数据报。

        IP模块 实现数据报 路由的 核心数据结构是 路由表。这个 表按照 数据报的 目标 IP地址 分类,同一类型的 IP数据报 将被 发往相同的 下一跳路由器(或者目标机器)。

六、TCP服务特点

        使用 TCP协议通信 的 双方必须 先建立连接,然后 才能 开始数据的 读写。双方 都必须 为该连接 分配必要的 内核资源,以管理连接的 状态 和 连接上数据的 传输。TCP连接 是 全双工的,即 双方的数据读 写 可以通过 一个连接进行。完成 数据交换之后,通信 双方都必须 断开连接 以释放 系统资源。

        TCP协议 的这种连接是 一对一的,所以 基于广播和多播(目标是多个主机地址)的应用程序 不能使用 TCP服务。而 无连接协议 UDP则非常适合于 广播和多播。

        当发送端应用程序 连续执行 多次写操作时,TCP模块 先将这些 数据放入 TCP 发送缓冲区中。当 TCP模块 真正开始 发送数据时,发送缓冲区 中这些等待 发送的 数据 可能被 封装成一个 或 多个 TCP报文段 发出。
        当 接收端收到一个 或 多个 TCP报文段 后,TCP模块 将它们携 带的 应用程序 数据按照 TCP报文段 的序号 依次放入 TCP接收缓冲区 中,并 通知应用程序读取数据。
        接收端 应用程序 可以一次性 将 TCP接收缓冲区 中 的数据 全部读出,也 可以分 多次读取,这 取决于 用户指定的应 用程序 读缓冲区的大小。

        使用 UDP,发送端应用程序 每执行一次 写操作,UDP  模块 就将其封 装成一个  UDP 数据报 并发送之。 接收端 必须及 时针对 每一个 UDP数据报 执行读操作(recvfrom系统调用),否则就 会 丢包(这经常发生在较慢的服务器上)
        如果用户没有指定足够的 应用程序缓冲区 来读取 UDP数据,则  UDP数据将被 截断。

        TCP传输为什么可靠?

  •   TCP协议 采用发送 应答机制,即 发送端发送的 每个 TCP报文段 都 必须得到 接收方的 应答,才认为这个TCP报文段 传输成功。
  •   TCP协议 采用 超时 重传机制,发送端在发送出一个 TCP报文段 之后 启动定时器,如果在 定时时间内 未收到应答,它 将 重发该报文 段。
  •   因为 TCP报文段 最终是以 IP数据报 发送的,而 IP数据报 到达 接收端 可能乱序、重复,所以 TCP协议 还会 对接收到的 TCP报文段 重排、整理,再交付给 应用层。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Meachines] [Easy] Sauna DC域+AS-REP+TGT票证窃取+AutoLogon凭据+DCSync攻击

信息收集 IP AddressOpening Ports10.10.10.175TCP:53,80,88,135,139,389,445,464,593,3268,3269,5985 $ nmap -p- 10.10.10.175 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 53/tcp open domain? | fingerprint-strings: | DNSVersionBindReqTCP…

电容的不同材质对应的温度范围

电容的温度范围是指电容在不同温度下能够正常工作的范围。不同材质的电容具有不同的温度特性,以下是一些常见电容材质的温度范围。 C0G/NP0:这类电容具有非常稳定的电气性能,工作温度范围通常为-55℃至125℃。 X7R:X7R材质的电容…

2021高教社杯全国大学生数学建模竞赛C题 Python代码演示

目录 问题一1.1 根据附件 1,对 402 家供应商的供货特征进行量化分析计算供货特征数据标准化对正向指标归一化对负向指标归一化 1.2 建立反映保障企业生产重要性的数学模型熵权法熵权法-TOPSISAHP 1.3 在此基础上确定 50 家最重要的供应商,并在论文中列表…

软件工程毕业设计开题汇总

文章目录 🚩 1 前言1.1 选题注意事项1.1.1 难度怎么把控?1.1.2 题目名称怎么取? 1.2 开题选题推荐1.2.1 起因1.2.2 核心- 如何避坑(重中之重)1.2.3 怎么办呢? 🚩2 选题概览🚩 3 项目概览题目1 : 大数据电商…

几个常见的非初等函数

在多个激励共同作用下,其响应恒等于每个激励单独引起的响应之和。这种现象称为线性现象。线性性质使得对这类现象的数学描述大为简化,它是线性系统理论的基础。 本篇博客将简单介绍以下几个常用的非初等函数。 rect 矩形函数(Rectangular Function)sinc 函数(Sinc Function)三…

“树”据结构:并查集从入门到AC

“树”据结构:并查集 前言算法设计代码示例优化相关文章 前言 在一组数据中,数据被分为了不同的集合,那么其中的集合往往可以用树形来表示。而区分集合,与查找集合的元素,就会成为核心的问题。并查集主要就是解决这类…

模特妙善:一位多才多艺的短视频达人,绽放新光彩

模特妙善,在当今多元化的网络时代,短视频已成为人们生活中不可或缺的一部分。而在这一领域中,有一位以其独特魅力和多才多艺而备受瞩目的达人,她就是妙善,本名高艳芳。 模特妙善,出生于山西省的著名景点——…

一款免费的AI搜索工具,提升您的搜索效率!

开搜AI是一款面向大众的、直达答案的AI搜索引擎,它能够为用户问题提供直接、精准的答案,并自动总结重点、生成大纲、思维导图并下载。 开搜AI功能特点 精准结果呈现:开搜AI能够直接呈现精准结果,省去用户翻阅多个的繁琐过程。信…

MyBatis 增删改查【后端 17】

MyBatis 增删改查 引言 MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs (…

Adding Placement Constraints

步骤2:添加放置约束 探索一些设计层次结构,并开始放置逻辑元素以创建物理 约束。 1.从Flow Navigator中,选择Open Synthetic Design。综合设计可能 如果您直接进入此步骤,则已经打开。 合成网表打开,显示设备窗口。 2.…

Note091203_Outlook邮件撤回操作

Note091203_Outlook邮件撤回操作 如图所示: step1: 打开outlook step2: 点击已发送邮件,选中目标撤回邮件双击打开; step3: 点击图中2框所示,可看见撤回操作; 以上

Linux常用命令以及操作技巧

🌏个人博客主页:意疏-CSDN博客 希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,点赞 关注 收藏支持一下笔者吧~ 阅读指南: 开篇说明帮助命令常见的七个linux操作终端实用的技巧跟文件目录…

Leetcode—740. 删除并获得点数【中等】(unordered_map+set+sort)

2024每日刷题&#xff08;162&#xff09; Leetcode—740. 删除并获得点数 算法思想 实现代码 class Solution { public:int deleteAndEarn(vector<int>& nums) {unordered_map<int, int> freq;set<int> st;sort(nums.begin(), nums.end());int n num…

c++234继承

#include<iostream> using namespace std;//public 修饰的成员便俩个和方法都能使用 //protected&#xff1a;类的内部 在继承的子类中可使用 class Parents { public:int a;//名字 protected:int b;//密码 private:int c;//情人public:void printT(){cout << &quo…

关于wp网站出现的问题

问题1 问题1&#xff1a;如果出现这个界面的问题 说明是根目录的index.php编码出了问题&#xff0c;用备份的源文件退换一下即可。 问题2 问题2&#xff1a;如果出现页面错位现象&#xff0c;可能是某个WP插件引起的问题&#xff0c;这里需要逐步排查插件&#xff0c;或者你刚…

论文内容分类与检测系统源码分享

论文内容分类与检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comput…

【二叉树进阶】二叉搜索树

目录 1. 二叉搜索树概念 2. 二叉搜索树的实现 2.1 创建二叉搜索树节点 2.2 创建实现二叉搜索树 2.3 二叉搜索树的查找 2.4 二叉搜索树的插入 2.5 二叉搜索树的删除 2.6 中序遍历 2.7 完整代码加测试 3. 二叉搜索树的应用 3.1 K模型&#xff1a; 3.2 KV模型&#xf…

【C++】入门基础(下)

Hi&#xff01;很高兴见到你~ 目录 7、引用 7.3 引用的使用&#xff08;实例&#xff09; 7.4 const引用 【第一分点】 【第二分点1】 【第二分点2】 7.5 指针和引用的关系&#xff08;面试点&#xff09; 8、inline 9、nullptr Relaxing Time&#xff01; ———…

asp.net core调用wps实现word转pdf的方法

1&#xff0c;首先安装wps&#xff0c;从官网下载安装包 2&#xff0c;创建.net core控制项目 添加com引用&#xff0c;搜索wps 准备一个word文档&#xff0c;名字叫001.docx&#xff0c;随便编写一些文字内容 3&#xff0c;word转pdf 编写代码 namespace WPSStu01 {inter…

MYSQL数据库基础篇——DDL

DDL&#xff1a;DDL是数据定义语言&#xff0c;用来定义数据库对象。 一.DDL操作数据库 1.查询 ①查询所有数据库 输入&#xff1b; 得到结果&#xff1a; ②查询当前数据库 输入&#xff1b; 例如执行下面语句&#xff1a; 2.创建 输入 然后展示数据库即可得到结果&…