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

TCP/IP协议详解

TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/互联网协议)是互联网的基本协议,也是国际互联网络的基础。

TCP/IP 不是指一个协议,也不是 TCP 和 IP 这两个协议的合称,而是一个协议族,包括多个网络协议,比如 IP、ICMP(Internet Control Message Protocol,互联网控制报文协议)、TCP、HTTP(Hyper Text Transfer Protocol,超文本传输协议)、FTP(File Transfer Protocol,文件传输协议)、POP3(Post Office Protocol version 3,邮局协议)等。

TCP/IP 定义了计算机操作系统如何连入互联网,以及数据传输的标准。

TCP/IP 是为了解决不同系统的计算机之间的传输通信而提出的一个标准,不同系统的计算机采用了同一种协议后,就能相互通信,从而能够建立网络连接,实现资源共享和网络通信。就像两个不同国家的人,用同一种语言就能相互交流了。

1. 协议介绍:

TCP/IP协议族包括许多协议,其中一些最重要的包括:

  • IP协议(Internet Protocol): 它定义了互联网上的唯一标识符(IP地址),并负责数据包的路由和转发。

  • TCP协议(Transmission Control Protocol): 提供可靠的、面向连接的数据传输。它确保数据以正确的顺序到达目标,并具有错误检测和重传机制。

  • UDP协议(User Datagram Protocol): 提供无连接的、不可靠的数据传输。它用于一些实时应用程序,如音频和视频流。

  • ICMP协议(Internet Control Message Protocol): 用于网络故障诊断和错误报告。

  • ARP协议(Address Resolution Protocol): 用于将IP地址映射到物理MAC地址。

  • HTTP协议(Hypertext Transfer Protocol): 用于在Web上传输超文本文档,是万维网的基础。

  • FTP协议(File Transfer Protocol): 用于文件传输。

  • SMTP协议(Simple Mail Transfer Protocol): 用于电子邮件的发送。

  • DNS协议(Domain Name System): 用于将域名解析为IP地址。

2. 数据传输:

TCP/IP协议的数据传输是端到端的,意味着数据从一个端点(例如计算机)传输到另一个端点,通过一系列的中间路由器和交换机。数据被分为数据包,每个数据包包含源和目标IP地址以及端口号。

数据传输过程如下:

  • 发送端将数据划分为数据包,添加源IP地址、目标IP地址和端口号。
  • 数据包从源计算机发送到目标计算机,经过中间路由器和交换机。
  • 路由器根据目标IP地址将数据包路由到下一跳。
  • 目标计算机接收数据包,根据端口号将数据传递给相应的应用程序。

3. 子网和路由:

TCP/IP网络通常分为多个子网,每个子网有自己的IP地址范围。路由器用于连接不同的子网,负责数据包的转发。

4. 安全性:

TCP/IP协议并不特别关注安全性,因此需要额外的安全协议来确保数据的保密性和完整性。例如,SSL/TLS协议用于加密数据传输,IPSec协议用于虚拟专用网络(VPN)的安全性。

5.TCP/IP的分层结构:

TCP/IP 协议族按照层次由上到下分成 4 层,分别是应用层(Application Layer)、传输层(Transport Layer)、网络层(Internet Layer,或称网际层)和网络接口层(Network Interface Layer,或称数据链路层)。

应用层包含所有的高层协议,比如 Telnet(Telecommunications Network,远程登录协议)、FTP、SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)、DNS(Domain Name Service,域名服务)、NNTP(Net News Transfer Protocol,网络新闻传输协议)和 HTTP 等。Telnet 允许一台机器上的用户登录远程机器进行工作,FTP 提供将文件从一台机器上移到另一台机器上的有效方法,SMTP用于电子邮件的收发,DNS 用于把主机名映射到网络地址,NNTP 用于新闻的发布、检索和获取,HTTP 用于在 WWW 上获取主页。

应用层的下面一层是传输层,著名的 TCP 和 UDP(User Datagram Protocol,用户数据报协议)就在这一层。TCP 是面向连接的协议,它提供可靠的报文传输和对上层应用的连接服务。为此,除了基本的数据传输外,它还有可靠性保证、流量控制、多路复用、优先权和安全性控制等功能。UDP 是面向无连接的不可靠传输协议,主要用于不需要TCP的排序和流量控制等功能的应用程序。

传输层的下面一层是网络层,该层是整个 TCP/IP 体系结构的关键部分,其功能是使主机可以把数据报(Packet,或称为分组)发往任何网络,并使分组独立地传向目标。这些分组经由不同的网络到达的顺序和发送的顺序可能不同。网络层使用的协议有 IP。

网络层的下面是数据链路层,该层是整个体系结构的基础部分,负责接收 IP 层的 IP 数据报,通过网络向外发送,或接收从网络上来的物理帧,抽出 IP 数据报,向 IP 层发送。该层是主机与网络的实际连接层。

数据链路层下面就是实体线路(比如以太网络、光纤网络等)。数据链路层有以太网、令牌环网等标准,负责网卡设备的驱动、帧同步(就是从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。交换机可以在不同的数据链路层的网络之间(比如十兆以太网和百兆以太网之间、以太网和令牌环网之间)转发数据帧,由于不同数据链路层的帧格式不同,交换机要将进来的数据报拆掉报头重新封装之后再转发。

不同的协议层对数据报有不同的称谓,在传输层叫作段(Segment),在网络层叫作数据报(Datagram),在数据链路层叫作帧(Frame)。数据封装成帧后发送到传输介质上,到达目的主机后,每层协议再剥掉相应的报头,最后将应用层数据交给应用程序处理。

不同层包含不同的协议,可以使用下图来表示各个协议及其所在的层。
在这里插入图片描述

在主机发送端,从传输层开始会把上一层的数据加上一个报头形成本层的数据,这个过程称为数据封装。在主机接收端,从最下层开始,每一层数据会去掉报头信息,该过程称为数据解封。其过程如下图所示。
在这里插入图片描述

我们来看一个例子。以浏览某个网页为例,看一下浏览网页的过程中 TCP/IP 各层做了哪些工作。

发送方:
打开浏览器,输入网址 www.xxx.com,按回车键来访问网页,其实就是访问 Web 服务器上的网页,在应用层采用的协议是 HTTP,浏览器将网址等信息组成 HTTP 数据,并将数据传送给传输层。
传输层在数据前面加上 TCP 报头,并标记端口为 80(Web 服务器的默认端口),将这个数据段给了网络层。
网络层在这个数据段前面加上自己机器的 IP 和目的 IP,这时该段被称为 IP 数据报,然后将这个 IP 数据报给了数据链路层。
数据链路层先在 IP 数据报前面加上自己机器的 MAC 地址以及目的 MAC 地址,加上 MAC 地址的数据称为帧,然后通过物理网卡把这个帧以比特流的方式发送到网络上。

互联网上有路由器,它会读取比特流中的 IP 地址进行路由操作,到达正确的网段后,这个网段的交换机读取比特流中的 MAC 地址,从而找到要接收的对应机器。

接收方:
数据链路层用网卡接收到了比特流,读取比特流中的帧,将帧中的 MAC 地址去掉,就成了 IP 数据报,传递给网络层。
网络层接收下层传来的 IP 数据报,将 IP 从包的前面拿掉,取出带有 TCP 的数据(数据段)交给传输层。
传输层拿到了这个数据段,看到 TCP 标记的端口是 80,说明应用层协议是 HTTP,之后将 TCP 头去掉并将数据交给应用层,告诉应用层对方请求的是 HTTP 数据。
应用层得知发送方请求的是 HTTP 数据,因此调用 Web 服务器程序把 www.xxx.com 的首页文件发送回去。

如果两台计算机位于不同的网段中,那么数据从一台计算机到另一台计算机传输的过程中要经过一个或多个路由器,如下图所示。

在这里插入图片描述

目的主机收到数据报后,如何经过各层协议栈最终到达应用程序呢?整个过程如下图所示:

在这里插入图片描述

以太网驱动程序首先根据以太网报头中的“上层协议”字段确定该数据帧的有效载荷(Payload,指除去协议报头之外实际传输的数据)是 IP、ARP 或 RARP 的数据报,然后交给相应的协议处理。假如是 IP 数据报,IP 再根据 IP 报头中的“上层协议”字段确定该数据报的有效载荷是 TCP、UDP、ICMP 或 IGMP,然后交给相应的协议处理。假如是 TCP 段或 UDP 段,TCP 或 UDP 再根据 TCP 报头或 UDP 报头的“端口号”字段确定应该将应用层数据交给哪个用户进程。IP 地址是标识网络中不同主机的地址,而端口号是同一台主机上标识不同进程的地址,IP 地址和端口号合起来标识网络中唯一的进程。

注意,虽然 IP、ARP 和 RARP 数据报都需要以太网驱动程序来封装成帧,但是从功能上划分,ARP 和 RARP 属于数据链路层,而 IP 属于网络层。虽然 ICMP、IGMP、TCP、UDP 的数据都需要 IP 协议来封装成数据报,但是从功能上划分,ICMP、IGMP 与 IP 同属于网络层,而 TCP 和 UDP 属于传输层。

上面可能讲得有点繁杂,再用一张简图来总结一下 TCP/IP 模型对数据的封装,如下图所示。
在这里插入图片描述

每一层数据是由上一层数据+本层报头信息组成的,其中每一层的数据称为本层的协议数据单元(Protocol Data Unit,PDU)。
应用层:用户数据在应用层中会被加密、编码传输。
传输层:在传输层中,经过 TCP 封装的数据将会加上 TCP 报头,此时的 PDU 被称为 TCP 报文段,或简称为 TCP 段。经过 UDP 封装的数据将会加上 UDP 报头,此时的 PDU 被称为 UDP 报文段。该层的数据单元也可以统称为段。TCP/UDP 报头主要包含源进程端口号和目的进程端口号。
网络层:经过 IP 封装的 PDU 被称为 IP 数据报,也被称为包。IP 报头主要包含源 IP 地址和目的 IP 地址,以及上层传输层协议的类型。
数据链路层:在数据链路层中,PDU 被进一步封装为帧。传输媒介不同,帧的类型也不同,比如通过以太网传输的就是以太网帧,而令牌环网上传输的则是令牌环帧。以太网帧报头主要包含源 MAC 地址和目的 MAC 地址,以及帧类型(用于确定上层协议类型)。最终,帧被以比特流的形式通过物理传输介质传输给目的主机,此时数据传输的单位就是比特。

当目的主机收到一个以太网数据帧时,通过匹配帧中的 MAC 地址发现目的地是本机,数据就开始在协议栈中由底向上升,同时去掉各层协议加上的报头。每层协议盒都要去检查报头中的协议标识,以确定接收数据的上层协议。

总之,TCP/IP协议是互联网通信的基础,它定义了网络通信的分层结构和一组协议,允许不同的计算机在全球范围内进行通信。这个协议族的设计使得它非常灵活,适用于各种应用和网络环境。

相关文章:

TCP/IP协议详解

TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/互联网协议)是互联网的基本协议,也是国际互联网络的基础。 TCP/IP 不是指一个协议,也不是 TCP 和 IP 这两个协议的合称,而是一个协…...

SSM SpringBoot vue快递柜管理系统

SSM SpringBoot vue快递柜管理系统 系统功能 登录 注册 个人中心 快递员管理 用户信息管理 用户寄件管理 配送信息管理 寄存信息管理 开发环境和技术 开发语言:Java 使用框架: SSM(Spring SpringMVC Mybaits)或SpringBoot 前端: vue 数据库:Mys…...

期权交易保证金比例一般是多少?

期权交易是一种非常受欢迎的投资方式之一,它为期权市场带来了更为多样化和灵活化的交易形式。而其中的期权卖方保证金比例是期权交易中的一个重要指标,直接关系到投资者的风险与收益,下文介绍期权交易保证金比例一般是多少?本文来…...

029:vue项目,勾选后今天不再弹窗提示

第029个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使…...

Unet语义分割-语义分割与实例分割概述-001

文章目录 前言1、图像分割和图像识别1.语义分割2.实例分割 2、分割任务中的目标函数定义3.IOU 前言 大纲目录 1、图像分割和图像识别 下面是图像识别和图像分割的区别,图像识别就是识别出来,画个框,右边的是图像分割。 1.语义分割 两张图把…...

Linux常用命令字典篇

Linux命令 1. 翻页查看文件 less [-N] 文件名:可以向后翻页,也可以向前翻页,-N表示显示行号 more 文件名:仅可以向后翻页 2. 端口占用信息查看 netstat -tunlp | grep 端口号:查看端口号对应的信息 lsof i: 端口号…...

__declspec(novtable) 在C++

__declspec(novtable) 在C中接口中广泛应用. 不容易看到它是因为在很多地方它都被定义成为了宏. 比如说ATL活动模板库中的ATL_NO_VTABLE, 其实就是__declspec(novtable). __declspec(novtable) 就是让类不要有虚函数表以及对虚函数表的初始化代码, 这样可以节省运行时间和空间.…...

ChatGPT充值,银行卡被拒绝

目录 前言步骤1. 魔法地址选择2. 选择手机号码(归属地)3. 勾选,服从协议4. 填写信息5. 完善账单地址6. 订阅成功 前言 大家好,今天我在订阅ChatGPT4时,遭遇了银行卡被拒绝的尴尬境地。这里有个技巧,我来给…...

算法通过村第七关-树(递归/二叉树遍历)白银笔记|递归实战

文章目录 前言1. 深入理解前中后序遍历从小到大递推分情况讨论,明确结束条件组合出完整的方法:从大到小 画图推演 总结 前言 提示:没有客观公正的记忆这回事,所有的记忆都是偏见,都是为自己的存活而重组过的经验。--国…...

抖音小程序开发教学系列(6)- 抖音小程序高级功能

第六章:抖音小程序高级功能 6.1 抖音小程序的支付功能6.1.1 接入流程6.1.2 注意事项 6.2 抖音小程序的地理位置和地图功能6.2.1 接入流程6.2.2 使用方法 6.3 抖音小程序的实时音视频功能6.3.1 接入流程6.3.2 使用方法 6.4 抖音小程序的小游戏开发6.4.1 基本流程6.4.…...

SpringBoot运行原理

目录 SpringBootApplication ComponentScan SpringBootConfiguration EnableAutoConfiguration 结论 SpringbootApplication(主入口) SpringBootApplication public class SpringbootConfigApplication {public static void main(String[] args) {…...

为什么Proteus串口无法正常显示

我以前就可以正常显示,但是最近一段时间,发现串口无法正常显示,试了很多办法都不行, 然后今天干好有点时间就刷了个机,然后居然就好了, 这就说明:Proteus不正常可能是病毒破坏了某个文件导致异…...

Furion api npm web vue混合开发

Furion api npm web vue混合开发 Furion-api项目获取swagger.json文件复制json制作ts包删除非.ts文件上传到npm获取npm包引用 Furion-api项目获取swagger.json文件 使用所有接口合并的配置文件 复制json制作ts包 https://editor.swagger.io 得到 typescript-axios-clien…...

【搭建私人图床】本地PHP搭建简单Imagewheel云图床,在外远程访问

文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测…...

BOM操作

文章目录 BOM事件页面加载调整窗口事件定时器停止计时器Location对象History对象Offsetleft获取元素偏移Offset与style的区别可视区client系列滚动scroll系列Mouseover和mousenter区别 动画原理实现动画封装给不同对象添加定时器缓动动画原理多个位置间移动 BOM事件 页面加载 …...

【校招VIP】前端操作系统之存储管理加密

考点介绍 加密算法有很多,如不可逆的摘要算法MD5、SHA(安全哈希算法),可逆的Base64编码,对称加密算法DES、AES,还有非对称加密算法DH、RSA等。那是不是说明我们可以使用任何一种加密算法就能保证网站的安全…...

windows 下载安装 mysql

windows 下载安装 mysql 官网地址:https://dev.mysql.com/ 下载地址:https://cdn.mysql.com//Downloads/MySQLInstaller/mysql-installer-community-8.0.34.0.msi 点击 Downloads 点击 MySQL Community (GPL) Downloads 点击 MySQL Installer for Window…...

第14章_瑞萨MCU零基础入门系列教程之QSPI

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总: ht…...

【pygame】01 pygame制作游戏的最小系统

这次使用sublimepython进行pygame的游戏开发,目的是学习使用python的基本操作和常用模块 添加一个文件夹到工程 最小系统 1.导入使用的模块 2.初始化:pygame.init函数包含了各个子模块的初始化,可以重复调用 3.pygame.display.set_mode返…...

(文末赠书)我为什么推荐应该人手一本《人月神话》

能点进来的朋友,说明你肯定是计算机工作的朋友或者对这本书正在仔细琢磨着的朋友。 文章目录 1、人人都会编程的时代,我们如何留存?2、小故事说明项目管理着为什么必看这本书3、如何评价《人月神话:纪念典藏版》4、本书的目录(好…...

回文串 rust解法

输入一个字符串,判断它是否为回文串。 输入字符串保证不含数字0。所谓回文串,就是反转以后和原串相同,如abba和madam。 样例输入: NOTAPALINDROME ISAPALINILAPASI 样例输出: not huiwen huiwen 解法: u…...

echarts常用参数详解汇总(饼图,柱形图,折线图)持续更新中

常用配置: X/Y轴线的基础设置《通用》 细微的差距只能去官网查看了,基本一致 这里只是做了个汇总方便查看 xAxis/yAxis: {show:false, // 不显示坐标轴线、坐标轴刻度线和坐标轴上的文字axisTick:{// 不显示坐标轴刻度线show:false, alignWithLabel: tru…...

最新ChatGPT网站源码+支持GPT4.0+支持Midjourney绘画+支持国内全AI模型

一、智能创作系统 SparkAi创作系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧&…...

【MySQL】基础SQL语句——库的操作

文章目录 一. 创建数据库1.1 基础语句1.2 字符集和校验规则1.3 校验规则对读取数据的影响 二. 查看数据库三. 修改数据库四. 删除数据库及备份4.1 删除4.2 备份和还原 结束语 一. 创建数据库 1.1 基础语句 最简洁的创建数据库的SQL语句是: create database db_nam…...

基于YOLOv8模型的海洋生物目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要:基于YOLOv8模型的海洋生物目标检测系统可用于日常生活中检测与定位海洋生物目标,利用深度学习算法可实现图片、视频、摄像头等方式的目标检测,另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法训…...

华为星闪联盟:引领无线通信技术创新的先锋

星闪(NearLink),是由华为倡导并发起的新一代无线短距通信技术,它从零到一全新设计,是为了满足万物互联时代个性化、多样化的极致、创新体验需求而诞生的。这项技术汇聚了中国300多家头部企业和机构的集体智慧&#xff…...

炒期权的资金门槛是多少 ?

期权是一种合约,买方向卖方支付一定费用后有权利在特定的时间,以特定的价格买入或卖出一定数量的特定资产,卖方需履行相应义务,期权开户支持线上和零门槛开头,下文介绍炒期权的资金门槛是多少 ?本文来自:期…...

matlab根轨迹绘制

绘制根轨迹目的就是改变系统的闭环极点,使得系统由不稳定变为稳定或者使得稳定的系统变得更加稳定。 在使用PID控制器的时候,首先要确定的参数是Kp,画成框图的形式如下: 也就是想要知道Kp对系统性能有哪些影响,此时就…...

Vue错误记录

文章目录 1. 项目build的时候报错Warning: Accessing non-existent property cat of module exports inside circular dependency2. WebpackOptionsValidationError: Invalid configuration object. Webpack has been initialised using a configuration object that does not …...

Linux 修改SSH的显示样式,修改终端shell显示的样式,美观更改

要修改SSH的显示样式,您可以使用自定义的PS1(提示字符串1)变量来更改命令行提示符的外观。在您的情况下,您想要的格式似乎包括日期和时间,以及当前目录。以下是一个示例PS1设置,可以实现您所描述的样式&…...

wordpress播放百度云/谷歌搜索为什么用不了

路径参数 获取请求头中的指定参数,或者全部参数 获取拼接url中的参数 获取cookie中的参数,拿指定名称的,或者全拿 获取请求体 设置请求域 矩阵变量 矩阵变量生效...

网站建设要考/搜索关键词排名提升

在AndroidPN客户端里存在着心跳检测功能。就是每隔一段时间客户端向服务器端发送一个消息&#xff0c;以检测连接是否正常&#xff0c;发送的消息内容为&#xff1a; <presence id"h09Ke-13"></presence> 心跳检测频率时间在SmackConfiguration类中设置…...

百色建设局网站/如何做网站优化seo

临时表与一般的表不同&#xff0c;它是保存到tempDb表中。临时表的表名与你所建的表名也不一样&#xff0c;因为他要为不同人的相同操作创建不同的临时表。1、错误的删除操作&#xff1a; --错误的临时表删除操作&#xff0c;因为所在数据库不同IFEXISTS(SELECT*FROMsysobjects…...

东营做网站哪家好/病毒式营销案例

这里就需要了解一下Mysql提供的日志分析工具mysqldumpslow 输入帮助命令了解下mysqldumpslow的参数&#xff1a; mysqldumpslow --help参数说明s表示按照何种方式排序c访问次数I锁定时间r返回记录t查询时间al平均锁定时间ar平均返回记录数at平均查询时间t返回前面多少条数据g…...

怎么在百度推广自己的网站/今天时政新闻热点是什么

逻辑运算符 &和&&的区别: 单&#xff1a;&时&#xff0c;左边无论真假&#xff0c;右边都进行运算 双&#xff1a;&&时&#xff0c;如如果左边为真&#xff0c;右边参与运算 例 & 的使用情况&#xff1a; int a 3; int b 4; System.out.println…...

排版设计工作内容/seo zac

Redis默认配置是不需要密码认证的&#xff0c;也就是说只要连接的Redis服务器的host和port正确&#xff0c;就可以连接使用。这在安全性上会有一定的问题&#xff0c;所以需要启用Redis的认证密码&#xff0c;增加Redis服务器的安全性。 1. 修改配置文件 Redis的配置文件默认在…...