网络参考模型与标准协议(二)-TCP/IP对等模型详细介绍

news2025/1/9 16:49:11

应用层

  • 应用层为应用软件提供接口,使应用程序能够使用网络服务。应用层协议会指定使用相应的传输层协议,以及传输层所使用的端口等。
  • TCP/IP每一层都让数据得以通过网络进行传输,这些层之间使用PDU ( Paket Data Unit,协议数据单元)彼此交换信息,确保网络设备之间能够通信。
  • 不同层的PDU中包含有不同的信息,因此PDU在不同层被赋予了不同的名称。应用层的PDU被称为Data ( 数据)。

在这里插入图片描述

FTP

FTP ( File Transfer Protocol)是一个用于从一台主机传送文件到另一台主机的协议,用于文件的“下载”和“上传”,它采用C/S ( Client/Server) 结构。

在这里插入图片描述

Telnet

Telnet是数据网络中提供远程登录服务的标准协议。 Telnet为用户提供了在本地计算机上完成远程设备工作的能力。

在这里插入图片描述

HTTP

HTTP( HyperText Transfer Protocol) 是互联网上应用最为广泛的一种网络协议。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。

在这里插入图片描述

传输层

  • 传输层协议接收来自应用层协议的数据,封装上相应的传输层头部,帮助其建立“端到端”( Port to Port) 的连接。
  • 传输层的PDU被称为Segment ( 段)。

在这里插入图片描述

TCP报文头部

在这里插入图片描述

  • Source Port: 源端口,标识哪个应用程序发送。长度为16比特。
  • Destination Port: 目的端口,标识哪个应用程序接收。长度为16比特。
  • Sequence Number: 序号字段。TCP链接中传输的数据流每个字节都编上一个序号。序号字段的值指的是本报文段所发送数据的第一个字节的序号。长度为32比特。
  • Acknowledgment Number: 确认序列号,是期望收到对方下一个报文段数据的第1个字节的序号,即上次已成功接收到的数据段的最后一个字节数据的序号加1。只有Ack标识为1,此字段有效。长度为32比特。
  • Header Length: 头部长度,指出TCP报文头部长度,以32比特(4字节)为计算单位。若无选项内容,则该字段为5,即头部为20字节。
  • Reserved: 保留,必须填0。长度为3比特。
  • Control bits: 控制位,包含FIN、ACK、SYN等标志位,代表不同状态下的TCP数据段。
  • Window: 窗口TCP的流量控制,这个值表明当前接收端可接受的最大的数据总数(以字节为单位)。窗口最大为65535字节。长度为16比特。
  • Checksum: 校验字段,是一个强制性的字段,由发端计算和存储,并由收端进行验证。在计算检验和时,要包括TCP头部和TCP数据,同时在TCP报文段的前面加上12字节的伪头部。长度为16比特。
  • Urgent: 紧急指针,只有当URG标志置1时紧急指针才有效。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。紧急指针指出在本报文段中紧急数据共有多少个字节( 紧急数据放在本报文段数据的最前面)。长度为16比特。
  • Options: 选项字段(可选),长度为0-40字节。

UDP报文头部

在这里插入图片描述

  • Source Port: 源端口,标识哪个应用程序发送。长度为16比特。
  • Destination Port: 目的端口,标识哪个应用程序接收。长度为16比特。
  • Length: 该字段指定UDP报头和数据总共占用的长度。可能的最小长度是8字节,因为UDP报头已经占用了8字节。由于这个字段的存在,UDP报文总长不可能超过65535字节(包括8字节的报头,和65527字节的数据)。
  • Checksum: 覆盖UDP头部和UDP数据的校验和,长度为16比特。

TCP和UDP - 端口号

在这里插入图片描述

TCP的建立- 三次握手

任何基于TCP的应用,在发送数据之前,都需要由TCP进行“三次握手”建立连接。

在这里插入图片描述
TCP连接建立的详细过程如下:

  • 由TCP连接发起方(图中PC1),发送第一个SYN位置1的TCP报文。初始序列号a为一个随机生成的数字,因为没收到过来自PC2的任何报文,所以确认序列号为0;
  • 接收方(图中PC2)接收到合法的SYN报文之后,回复一个SYN和ACK置1的TCP报文初始序列号b为一个随机生成的数字,同时因为此报文是回复给PC1的报文,所以确认序列号为a+1;
  • PC1接收到PC2发送的SYN和ACK置位的TCP报文后,回复一个ACK置位的报文,此时序列号为a+1,确认序列号为b+1。PC2收到之后,TCP双向连接建立。

TCP的关闭- 四次挥手

当数据传输完成,TCP需要通过“四次挥手”机制断开TCP连接,释放系统资源。

在这里插入图片描述
TCP支持全双工模式传输数据,这意味着同一时刻两个方向都可以进行数据的传输。在传输数据之前,TCP通过三次握手建立的实际上是两个方向的连接,因此在传输完毕后,两个方向的连接必须都关闭。如图所示:

  • 1: 由PC1发出一个FIN字段置”1”的不带数据的TCP段。
  • 2: PC2收到PC1发来的FIN置位的TCP报文后,会回复一个ACK置位的TCP报文。
  • 3: 若PC2也没有需要发送的数据,则直接发送FIN置位的TCP报文。假设此时PC2还有数据要发送,那么当PC2发送完这些数据之后会发送一个FIN置位的TCP报文去关闭连接。
  • 4: PC1收到FIN置位的TCP报文,回复ACK报文,TCP双向连接断开。

网络层

  • 传输层负责建立主机之间进程与进程之间的连接,而网络层则负责数据从一台主机到另外一台主机之间的传递。
  • 网络层的PDU被称为Packet (包)。
  • IPv4( Internet Protocol Version 4),简称IP,是目前应用最广泛的网络层协议

在这里插入图片描述

网络层协议工作过程

在这里插入图片描述

  • 当采用IP作为网络层协议时,通信的双方都会被分配到一个“独一无二”的IP地址来标识自己。IP地址可被写成32位的二进制整数值形式,但为了方便人们阅读和分析,它通常被写成点分十进制的形式,即四个字节被分开用十进制表示,中间用点分隔,比如192.168.1.1

  • IP数据包的封装与转发:

    • 网络层收到上层(如传输层)协议传来的数据时候,会封装一个IP报文头部,并且把源和目的IP地址都添加到该头部中。
    • 中间经过的网络设备(如路由器 ),会维护一张指导IP报文转发的“地图”一一路由表,通过读取IP数据包的目的地址,查找本地路由表后转发IP数据包。
    • IP数据包最终到达目的主机,目的主机通过读取目的IP地址确定是否接受并做下一步处理。
  • IP协议工作时,需要如OSPF、IS-IS、BGP等各种路由协议帮助路由器建立路由表,ICMP帮忙进行网络的控制和状态诊断。

数据链路层

  • 数据链路层位于网络层和物理层之间,可以向网络层的IP、IPv6等协议提供服务。
  • 数据链路层的PDU被称为Frame(帧)。
  • 以太网( Ethernet)是最常见的数据链路层协议。

在这里插入图片描述

以太网与MAC地址

MAC地址由48比特( 6个字节)长,12位的16进制数字组成。例如: 8-A4-72-1C-8F-4F

在这里插入图片描述

地址解析协议(ARP)

ARP ( Address Resolution Protocol) 地址解析协议: 根据已知的IP地址解析获得其对应的MAC地址。

在这里插入图片描述

  • ARP( Address Resolution Protocol,地址解析协议 )是根据IP地址获取数据链路层地址的一个TCP/IP协议。
  • ARP是IPv4中必不可少的一种协议,它的主要功能是:
    • 将IP地址解析为MAC地址。
    • 维护IP地址与MAC地址的映射关系的缓存,即ARP表项。
    • 实现网段内重复IP地址的检测。

物理层

  • 数据到达物理层之后,物理层会根据物理介质的不同,将数字信号转换成光信号、电信号或者是电磁波信号。
  • 物理层的PDU被称为比特流( Bitstream )

在这里插入图片描述

常见传输介质

在这里插入图片描述

  • 双绞线: 当今以太网最常见的传输介质,按照抗电磁干扰能力还可以分为:
    • STP-屏蔽双绞线
    • UTP-非屏蔽双绞线
  • 光纤传输,按照功能部件可分为:
    • 光纤: 光传输介质,简单的说,就是一根玻璃纤维,用于约束光传输的通道。
    • 光模块: 将电信号与光信号互转的器件,产生光信号。
  • 串口电缆在WAN ( Wide Area Network,广域网)中大规模使用,根据WAN线路类型不同串口电缆在设备上连接的接口类型也不同: 异/同步串口、ATM接口、POS接口、CE1/PRI接口等。
  • 无线信号的传输可以通过电磁波进行,例如: 无线路由器将数据通过调制以电磁波发送出去,移动终端的无线网卡将电磁波解调,得到数据,完成从无线路由器到移动终端的数据传输。

数据通信过程

发送方数据封装

在这里插入图片描述
假设你正在通过网页浏览器访问华为官网,当你输入完网址,敲下回车后,计算机内部会发生下列事情:

  1. IE浏览器(应用程序)调用HTTP(应用层协议),完成应用层数据的封装(图中DATA还应包括HTTP头部,此处省略)。
  2. HTTP依靠传输层的TCP进行数据的可靠性传输,将封装好的数据传递到TCP模块。
  3. TCP模块给应用层传递下来的Data添加上相应的TCP头部信息(源端口、目的端口等)。此时的PDU被称作Segment(段)。
  4. 在Pv4网络中,TCP模块会将封装好的Segment传递给网络层的IPv4模块(若在IPv6环境,会交给IPv6模块进行处理)。
  5. IPv4模块在收到TCP模块传递来的Segment之后,完成IPv4头部的封装,此时的PDU被称为Packet(包)。
  6. 由于使用了Ethernet作为数据链路层协议,故在IPv4模块完成封装之后,会将Packet交由数据链路层的Ethernet模块(例如以太网卡)处理。
  7. Ethernet模块在收到IPv4模块传递来的Packet之后,添加上相应的Ethernet头部信息和FCS帧尾,此时的PDU被称为Frame(帧)。
  8. 在Ethernet模块封装完毕之后,会将数据传递到物理层。
  9. 根据物理介质的不同,物理层负责将数字信号转换成电信号,光信号,电磁波(无线)信号等。
  10. 转换完成的信号在网络中开始传递。

中间网络数据传输

封装好的完整数据,将会在网络中被传递。

在这里插入图片描述
一般情况下:

  • 网络中的二层设备(如以太网交换机)只会解封装数据的二层头部,根据二层头部的信息进行相应的“交换”操作。
  • 网络中的三层设备(如路由器)只会解封装到三层头部,并且根据三层头部的信息进行相应的“路由”操作。

接收方数据解封装

经过中间网络传递之后,数据最终到达目的服务器。根据不同的协议头部的信息,数据将被一层层的解封装并做相应的处理和传递,最终交由WEB服务器上的应用程序进行处理。

在这里插入图片描述

总结

  • 不论是OSI参考模型还是TCP/IP参考模型,都采用了分层的设计理念。
    • 各个层次之间分工、界限明确,有助于各个部件的开发、设计和故障排除
    • 通过定义在模型的每一层实现什么功能,鼓励产业的标准化
    • 通过提供接口的方式,使得各种类型的网络硬件和软件能够相互通信,提高兼容性
  • 数据的产生与传递,需要各模块之间相互协作,同时每个模块又需要“各司其职”。

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

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

相关文章

七天.NET 8操作SQLite入门到实战 - SQLite 简介

什么是SQLite? SQLite是一个轻量级的嵌入式关系型数据库,它以一个小型的C语言库的形式存在。它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几…

openAI API简介 怎么写提示词获取更好的结果。prompt-engineering使用指南。人工智能的重大里程碑事件及技术创新chatGPT1

OpenAI API 几乎可以应用于任何任务。 包括内容或代码生成、摘要、对话、创意写作、图片生成、文本语音互转等。 关键概念 文本生成:提示,输入越精准,输出越精准。 获得更好结果的几种策略: 1.写出清晰的指令:包含…

YOLO目标检测——无人机航拍行人检测数据集下载分享【含对应voc、coc和yolo三种格式标签】

实际项目应用:智能交通管理、城市安防监控、公共安全救援等领域数据集说明:无人机航拍行人检测数据集,真实场景的高质量图片数据,数据场景丰富标签说明:使用lableimg标注软件标注,标注框质量高,…

【Java】异常处理(一)

🌺个人主页:Dawn黎明开始 🎀系列专栏:Java ⭐每日一句:什么都不做,才会来不及 📢欢迎大家:关注🔍点赞👍评论📝收藏⭐️ 文章目录 📋前…

2023下半年软件设计师考试知识点大全思维导图

软件设计师考试知识点大全思维导图 2023年下半年第一次机考 复习资料 以上是我在学习过程中根据自己的知识结构的特点及刷到的考题 做的导图,有需要的可以留言发原版的 mmap格式文件 方便自己拓展. 软考资料 这是网上找的资料 汇总免费放在这里 吧![ 链接&#x…

SpringBoot 整合 JdbcTemplate(配置多数据源)

数据持久化有几个常见的方案,有 Spring 自带的 JdbcTemplate 、有 MyBatis,还有 JPA,在这些方案中,最简单的就是 Spring 自带的 JdbcTemplate 了,这个东西虽然没有 MyBatis 那么方便,但是比起最开始的 Jdbc…

【Web】Ctfshow Nodejs刷题记录

目录 ①web334 ②web335 ③web336 ④web337 ⑤web338 ⑥web339 ⑦web340 ⑧web341 ⑨web342-343 ⑩web344 ①web334 进来是一个登录界面 下载附件,简单代码审计 表单传ctfshow 123456即可 ②web335 进来提示 get上传eval参数执行nodejs代码 payload: …

软件项目测试指南

软件测试是保证软件产品质量的重要手段之一。它是测量、评估软件产品特点和能力的活动。现在,国内一些软件企业对于软件测试的重视程度还很不够,认为测试工作非常简单,只是简单地操作所测的软件产品而已。这种错误的思想严重影响了国内软件质…

【深入Scrapy实战】从登录到数据解析构建完整爬虫流程

文章目录 1. 写在前面2. 抓包分析3. Scrapy提交登陆请求4. 列表与详情页面数据解析5. 中间件Middleware配置 【作者主页】:吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xf…

趣学python编程 (四、数据结构和算法介绍)

数据结构和算法在编程中非常重要。数据结构是组织和存储数据的方式,而算法是解决问题的方法和步骤。你要挑战的蓝桥杯,实际也是在设计算法解决问题。其实各种编程语言都只是工具,而程序的核心数据结构算法。犹如练武,数据结构和算…

Zotero在word中插入带超链接的参考文献/交叉引用/跳转参考文献

Zotero以其丰富的插件而闻名,使用起来十分的带劲,最重要的是它是免费的、不卡顿,不像某专业软件。 然而Zotero在word插入参考文献时,无法为参考文献添加超链接,这是一个不得不提的遗憾。 不过,有大佬已经…

C语言——写一个函数,每调用一次这个函数,就会将num的值增加1

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>void Add(int* p) {(*p); // 的优先级高于* } int main() {int num0;Add(&num);printf("第一次调用:num %d\n",num);Add(&num);printf("第二次调用:num %d\n",num);Add(&num);p…

如何客观看待通过线上性格测试来刷人的公司?

不论是校招&#xff0c;还是社招&#xff0c;我认为采用性格测评的目的&#xff0c;有两种情况&#xff1a; 1、应聘者多&#xff0c;减轻面试的压力 这种情况是最常见的&#xff0c;如果招不到人&#xff0c;应聘者少&#xff0c;我想HR是恨不得开车去接你过来面试&#xff…

Java 算法篇-链表的经典算法:判断回文链表、判断环链表与寻找环入口节点(“龟兔赛跑“算法实现)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 链表的创建 2.0 判断回文链表说明 2.1 快慢指针方法 2.2 使用递归方式实现反转链表方法 2.3 实现判断回文链表 - 使用快慢指针与反转链表方法 3.0 判断环链表说明…

【数据结构初阶】双链表

双链表 1.双链表的实现1.1结口实现1.2申请结点1.3初始化双链表1.4打印双链表1.5尾插1.6尾删1.7头插1.8头删1.9计算大小1.10查找1.11pos位置插入1.12删除pos位置1.12删除双链表 全部码源 1.双链表的实现 1.1结口实现 #include<stdio.h> #include<stdlib.h> #inclu…

快速排序知识总结

快速排序思维导图&#xff1a; 快速排序算法模版&#xff1a; #include <iostream>using namespace std;const int N 1e5 10;int n; int q[N];void quick_sort(int q[], int l, int r) {if (l > r) return;int x q[(l r) / 2], i l - 1, j r 1;while (i < …

10 Redis的持久化

Redis支持RDB和AOF两种持久化机制 1、RDB(Redis DataBase) 是对命令的全量快照随着key的数量增大&#xff0c;那么写入磁盘的开销也会越来越大 2、RDB文件的生成是否会阻塞主线程 save: 使用save的方式会阻塞主线程&#xff0c;影响redis的性能 bgsave: 一般情况下不会阻塞…

J. Chem. Inf. Model. | 使用GRID描述符进行深度学习预测血脑屏障透过性

今天为大家介绍的是来自Simon Cross团队的一篇论文。深度学习方法能够自动从输入数据中提取相关特征并捕捉输入和输出之间的非线性关系。在这项工作中&#xff0c;作者提出了基于GRID的AI&#xff08;GrAId&#xff09;描述符&#xff0c;这是对GRID MIFs的简单修改&#xff0c…

Javaweb之Ajax的详细解析

1.1 Ajax介绍 1.1.1 Ajax概述 我们前端页面中的数据&#xff0c;如下图所示的表格中的学生信息&#xff0c;应该来自于后台&#xff0c;那么我们的后台和前端是互不影响的2个程序&#xff0c;那么我们前端应该如何从后台获取数据呢&#xff1f;因为是2个程序&#xff0c;所以…

记一次攻防实战渗透

经典开局一个登录框 由于漏洞应该还未修复。对于数据和相关网址打个码见谅一下 常规思路&#xff08;爆破&#xff09; 常规操作进行一波 尝试弱口令然后开始爆破 对于此种有验证码的爆破&#xff0c;可以借用一个bp插件。 captcha-killer-modified-jdk14.jar 具体使用我就…