TCP/IP的基础知识

文章目录

  • TCP/IP的基础知识
    • 硬件(物理层)
    • 网络接口层(数据链路层)
    • 互联网层(网络层)
    • TCP/IP的具体含义
    • 传输层
    • 应用层(会话层以上的分层)
    • TCP/IP分层模型与通信示例
    • 发送数据包的一个例子
    • 接收上面发送的数据包

TCP/IP的基础知识

TCP(Transmission Control Protocol)和IP(Internet Protocol)是互联网的众多通信协议中最为著名的。本章旨在介绍TCP/IP的发展历程及其相关协议的概括,如下图:
在这里插入图片描述
在这里插入图片描述
上图列出了TCP/IP与OSI分层之间的大致关系。不难看出,TCP/IP与OSI在分层模块上稍有区别。OSI参考模型注重“通信协议必要的功能是什么”,而TCP/IP则更强调“在计算机上实现协议应该开发那种程序”。

硬件(物理层)

TCP/IP的最底层是负责数据传输的硬件。这种硬件就相当于以太网或电话线路等物理层的设备。关于它的内容一直无法统一定义。因为只要人们在物理层面上所使用的的传输媒介不同(如使用网线或无线),网络的带宽、可靠性、安全性、延迟等都会有所不同,而在这些方面又没有一个既定的指标。总之,TCP/IP是在网络互连的设备之间能够通信的前提下才被提出的协议。

网络接口层(数据链路层)

网络接口层利用以太网中的数据链路层进行通信,因此属于接口层。也就是说,把它当做让NIC起作用的“驱动程序”也无妨。驱动程序是在操作系统与硬件之间起桥梁作用的软件。计算机的外围附加设备或扩展卡,不是直接插到电脑上或电脑的扩展槽上就能马上使用的,还需要有相应驱动程序的支持。例如换了一个新的NIC网卡,不仅需要硬件,还需要软件才能真正投入使用。因此,人们常常还需要在操作系统的基础上安装一些驱动软件以便使用这些附加硬件。

互联网层(网络层)

互联网层使用IP协议,它相当于OSI模型中的第3层网络层。IP协议基于IP地址转发分包数据。如下图:
在这里插入图片描述
TCP/IP分层中的互联网层与传输层的功能通常由操作系统提供。尤其是路由器,它必须得实现通过互联网层转发分组数据包的功能。
此外,连接互联网的所有主机跟路由器必须都实现IP的功能。其它连接互联网的网络设备(如网桥、中继器或集线器)就没必要一定实现IP或TCP的功能。

IP
IP是跨越网络传送数据包,使整个互联网都能收到数据的协议。IP协议使数据能够发送到地球的另一端,这期间它使用IP地址作为主机的标识。

IP还隐含着数据链路层的功能。通过IP,相互通信的主机之间不论经过怎样的底层数据链路都能够实现通信。

虽然IP也是分组交换的一种协议,但是它不具有重发机制。即使分组数据包未能到达对端主机也不会重发。因此,属于非可靠性传输协议。

ICMP
IP数据包在发送途中一旦发生异常导致无法到达对端目的地址时,需要给发送端发送一个发生异常的通知。ICMP就是为这一功能而制定的。它有时也被用来诊断网络的健康状况。

ARP
从分组数据包的IP地址中解析出物理地址(MAC地址)的一种协议。

TCP/IP的具体含义

从字面意义上讲,有人可能会人为TCP/IP是指TCP与IP两种协议。实际生活当中有时也确实就是指这两种协议。然而在很多情况下,它只是利用IP进行通信时所必须用到的协议群的统称。具体来说,IP或ICMP、TCP或UDP。TELNET或FTP、以及HTTP等都属于TCP/IP的协议。它们与TCP或IP的关系紧密,是互联网必不可少的组成部分。TCP/IP一词泛指这些协议,因此,有时也称TCP/IP为网际协议族。如下图:
在这里插入图片描述

传输层

TCP/IP的传输层有两个具有代表性的协议。该层的功能本身与OSI参考模型中的传输层类似。如下图:
在这里插入图片描述
传输层最主要的功能就是能够让应用程序之间实现通信。计算机内部,通常同一时间运行着多个程序。为此,必须分清是哪些程序与哪些程序在进行通信。识别这些应用程序的是端口号。

TCP
TCP是一种面向有连接的传输层协议。它可以保证两端通信主机之间的通信可达。TCP能够正确处理在传输过程中丢包、传输顺序乱掉等异常情况。此外,TCP还能够有效利用带宽,缓解网络拥堵。
然而,为了建立与断开连接,有时它需要至少7次的发包收包,导致网络流量的浪费。此外,为了提高网络利用率,TCP协议中定义了各种各样复杂的规范,因此不利于视频会议(音频、视频的数据量既定)等场合使用。

UDP
UDP有别于TCP,它是一种面向无连接的传输层协议。UDP不会关注对端是否真的收到了传送过去的数据,如果需要检查对端是否收到分组数据包,或者对端是否连接到网络,则需要在应用程序中实现。
UDP常用于分组数据较少或多播、广播通信以及视频通信等多媒体领域。

应用层(会话层以上的分层)

TCP/IP的分层中,将OSI参考模型中的会话层、表示层和应用层的功能都集中到了应用程序中实现。这些功能有时由一个单一的程序实现,有时也可能会由多个程序实现。因此,细看TCP/IP的应用程序功能会发现,它不仅实现OSI模型中应用层的内容,还要实现会话层与表示层的功能。
在这里插入图片描述
TCP/IP应用的架构绝大多数属于客户端/服务端模型。提供服务的程序叫做服务端,接受服务的程序叫客户端。在这种通信模式中,提供服务的程序会预先被部署到主机上,等待接收任何时刻客户可能发送的请求。
客户端可以随时发送请求给服务端。有时服务端可能会有处理异常、超出负载等情况,这时客户端可以在等待片刻后重发一次请求。

WWW
在这里插入图片描述
WWW可以说是互联网能够如此普及的一个重要原动力。用户在一种叫Web浏览器的软件上借助鼠标和键盘就可以轻轻松松地在网上自由地冲浪。也就是说轻按一下鼠标架设在远端服务器上的各种信息就会呈现到浏览器上。浏览器中既可以显示文字、图片、动画等信息,还能播放声音以及运行程序。
浏览器与服务器之间通信所用的协议是HTTP(HyperText Transfer Protocol)。所传输数据的主要格式是HTML(HyperText Markup Language)。WWW中的HTTP属于OSI应用层的协议,而HTML属于表示层的协议。

电子邮件协议SMTP
在这里插入图片描述
电子邮件其实就是指在网络上发送信件。有了电子邮件,不管距离多远的人,只要连着互联网就可以互相发送邮件。发送电子邮件时用到的协议叫做SMTP(Simple Mail Tranfer Protocol)。
最初,人们只能发送文本格式的电子邮件。然而现在,电子邮件的格式由MIME协议扩展以后,就可以发送声音、图像等各式各样的信息。甚至还可以修改邮件文字的大小、颜色。这里提到的MIME属于OSI参考模型的第6层表示层。MIME在互联网上广泛使用的、用来定义邮件数据格式的一种规范。

文件传输协议FTP
在这里插入图片描述
文件传输是指将保存在其他计算机硬盘上的文件转移到本地的硬盘上,或将本地硬盘的文件传送到其它机器硬盘上的意思。
该过程使用的协议叫做FTP(File Transfer Prototol)。FTP很早就已经投入使用,传输过程中可以选择用二进制方式还是文本方式。
在FTP中进行文件传输时会建立两个TCP连接,第一个是发出传输请求时所要用到的控制连接,第二个是实际传输数据时所要用到的数据连接。

远程登录TELNET协议与SSH协议
在这里插入图片描述
远程登录是指登录到远程的计算机上,使那台计算机上的程序得以运行的一种功能。TCP/IP网络中远程登录常用TELNET和SSH两种协议。其实还有很多其它可以实现远程登录的协议,比如BSD UNIX系中的r命令协议等。

TCP/IP分层模型与通信示例

数据包首部
在这里插入图片描述
每个分层中,都会对所发送的数据附加一个首部,在这个首部中包含了该层必要的信息,如发送的目标地址以及协议相关信息。通常,为协议提供的信息为包首部,所要发送的内容为数据。如上图,在下一层的角度看,从上一分层收到的包全部都被认为是本层的数据。

包首部就像是协议的脸。网络中传输的数据包由两部分组成:一部分是协议所要用到的首部,另一部分是上层传过来的数据。首部的结构由协议的具体规范详细定义。例如,识别上一层协议的域应该从包的哪一位开始取多少个比特、如何计算校验和并插入包的哪一位等。相互通信的两端计算机如果在识别协议的序号以及校验和的计算方法上不一样,就根本无法实现通信。
因此,在数据包的首部,明确标明了协议应该如何读取数据。反过来说,看到首部,也就能够了解该协议必要的信息以及所要处理的内容。因此看到包首部就如同看到协议的规范。难怪有人会说首部就像是协议的脸了。

发送数据包的一个例子

假设甲给乙发送电子邮件,内容为:“早上好”。而从TCP/IP通信上看,是从一台计算机A向另一台计算机B发送电子邮件。我们就通过这个例子来讲解一下TCP/IP通信的过程。
①应用程序处理,其实也就是应用层,表示层,会话层三个层的合集
启动应用程序新建邮件,将收件人邮箱填好,再由键盘输入邮件内容“早上好”,鼠标点击“发送”按钮就可以开始TCP/IP的通信了。
首先,应用程序中会进行编码处理。例如,日文电子邮件使用ISO-2022-JP或UTF-8进行编码。这些编码相当于OSI的表示层功能。
编码转化后,实际邮件不一定会马上被发送出去,因为有些邮件的软件有一次同时发送多个邮件的功能,也可能会有用户点击“收信”按钮以后才一并接收新邮件的功能。像这种何时建立通信连接何时发送数据的管理功能,从某种宽泛的意义上看属于OSI参考模型中会话层的功能。
应用在发送邮件的那一刻建立TCP连接,从而利用这个TCP连接发送数据。它的过程首先是将 应用的数据发送给下一层的TCP,再做实际的转发处理。

②TCP模块的处理,其实也就是传输层的处理
TCP根据应用的指示,负责建立连接。发送数据以及断开连接。TCP提供将应用层发来的数据顺利发送至对端的可靠性。
为了实现TCP的这一功能,需要在应用层数据的前端附加一个TCP首部。TCP首部中包括源端口号和目标端口号(用以识别发送主机根接收主机上的应用)、序号(用以发送的包中哪部分是数据)以及校验和(用以判断数据是否被损坏)。随后将附加了TCP首部的包再发送给IP。

③IP模块的处理,其实也就是网络层的处理
IP将TCP传过来的TCP首部和TCP数据合起来当做自己的数据,并在TCP首部的前端再加上自己的IP首部。因此,IP数据包中IP首部后面紧跟着TCP首部,然后才是应用的数据首部和数据本身。IP首部中包含接收端IP地址以及发送端IP地址。紧随IP首部的还有用来判断其后面数据是TCP还是UDP的信息。

IP包生成后,参考路由控制表决定接受此IP包的路由或主机。随后,IP包将被发送给连接这些路由器或主机网络接口的驱动程序,以实现真正发送数据。

如果尚不知道接收端的MAC地址,可以利用ARP(Address Resolution Protocol)查找。只要知道了对端的MAC地址,就可以将MAC地址和IP地址交给以太网的驱动程序,实现数据传输。

网络接口以太网驱动的处理
从IP传过来的IP包,对于以太网驱动来说不过就是数据。给这数据附加上以太网首部并进行发送处理。以太网首部中包含接收端MAC地址、发送端MAC地址以及标志以太网类型的以太网数据的协议。根据上述信息产生的以太网数据包将通过物理层传输给接收端。发送处理中的FCS由硬件计算,添加到包的最后。设置FCS的目的是为了判断数据包是否由于噪声而被破坏。

在这里插入图片描述

接收上面发送的数据包

包的接收流程是发送流程的逆序过程。

⑤网络接口(以太网驱动)的处理
主机收到以太网包以后,首先从以太网的包首部找到MAC地址判断是否为发给自己的包。如果不是发给自己的包则丢弃数据。

而如果接收到了恰好是发给自己的包,就查找以太网包首部中的类型域从而确定以太网协议所传送过来的数据类型。在这个例子中数据类型显然是IP包,因此再将数据传给处理IP的子程序,如果这时不是IP而是其它诸如ARP的协议,就把数据传给ARP处理。总之,如果以太网包首部的类型域包含了一个无法识别的协议类型,则丢弃数据。

⑥IP模块的处理,也就是网络层
IP模块收到IP包首部以及后面的数据部分以后,也做类似的处理。如果判断得出包的首部中的IP地址与自己的IP地址匹配,则可接收数据并从中查找上一层的协议。如果上一层是TCP就将IP包首部之后的部分传给TCP处理;如果是UDP则将IP包首部后面的部分传给UDP处理。对于有路由的情况下,接收端地址往往不是自己的地址,此时,需要借助路由控制表,在调查应该送达的主机或路由器以后再转发数据。

⑦TCP模块的处理,也就是传输层
在TCP模块中,首先会计算一下校验和,判断数据是否被破坏。然后检查是否在按照序号接收数据。最后检查端口号,确定具体的应用程序。

数据接收完毕后,接收端则发送一个“确认回执”给发送端。如果这个回执信息未能达到发送端,那么发送端会认为接收端没有接收到数据而一直反复发送。

数据被完整地接收以后,会传给由端口号识别的应用程序。

⑧应用程序的处理
接收端应用程序会直接接收发送端发送的数据。通过解析数据可以获知邮件的收件人地址是乙地址。如果主机B上没有乙的邮件信箱,那么主机B返回给发送端一个“无此收件地址”的报错信息。

但在这个例子中,主机B上恰好有乙的收件箱,所以主机B和收件人乙能够收到电子邮件的正文。邮件会被保存到本机的硬盘上。如果保存也能正常进行,那么接收端会返回一个“处理正常”的回执给发送端。反之,一旦出现磁盘满、邮件未能成功保存等问题,就会发送一个“处理异常”的回执给发送端。

由此,用户乙就可以利用主机B上的邮件客户端,接收并阅读由主机A上的用户甲所发送过来的电子邮件“早上好”了。

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

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

相关文章

【公益案例展】火山引擎公益电子票据服务——连接善意,共创美好

‍ 火山引擎公益案例 本项目案例由火山引擎投递并参与数据猿与上海大数据联盟联合推出的 #榜样的力量# 《2023中国数据智能产业最具社会责任感企业》榜单/奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 捐赠票据是慈善组织接受捐赠后给捐赠方开具的重要凭证&…

Mybatis与Mybatis-Plus(注解与Xml)(单表与多表)

准备工作 这里我们准备了两个与数据库表对应的实体类,stu为学生表,cls为班级表 类属性上的注解如 TableId等 为Mybatis-Plus的注解,使用mybatis会无视掉这些注解 在Stu 类的最后一个属性我们定义了Cls实体类的对象,对于单表查询&…

Dcoker学习笔记(一)

Dcoker学习笔记一 一、 初识Docker1.1 简介1.2 虚拟机和docker的区别1.3 Docker架构1.4 安装Docker(Linux) 二、 Dcoker基本操作2.1 镜像操作2.2 容器操作练习 2.3 数据卷volume(容器数据管理)简介数据卷语法数据卷挂载 2.4 自定义…

高性能三防工业平板电脑 防摔防爆电容屏工控平板

HT1000是一款高性能工业三防平板,10.1英寸超清大屏,厚度仅14.9mm,超薄机身,可轻松插入袋中,方便携带,搭载8核2.0GHz高性能CPU,行业领先的Android 11.0,设备性能大幅提升,…

机器人制作开源方案 | 管内检测维护机器人

一、作品简介 作者:李泽彬,李晋晟,杜张坤,禹馨雅 单位:运城学院 指导老师:薛晓峰 随着我国的社会主义市场经济的飞速发展和科学技术的革新,各行各业的发展越来越离不开信息化和网络化的…

【深度学习】卷积层填充和步幅以及其大小关系

参考链接 【深度学习】:《PyTorch入门到项目实战》卷积神经网络2-2:填充(padding)和步幅(stride) 一、卷积 卷积是在深度学习中的一种重要操作,但实际上它是一种互相关操作,,首先我们来了解一下二维互相关&#xff…

ros1 自定义topic 主题的发布,监听以及和消息体的定义

1. 在功能包下新增msg 文件夹 在功能包的下面新建 msg 文件夹,如下图所示 2. 新增Person.msg 消息实体 右键打开命令框,输入 touch Person.msg 就会在msg 目录下新增 Person.msg 文件 在Person.msg中输入如下内容完成.msg文件的创建,msg文…

关于卷积神经网络中如何计算卷积核大小(kernels)

首先需要说明的一点是,虽然卷积层得名于卷积( convolution )运算,但我们通常在卷积层中使用更加直观的计算方式,叫做互相关( cross-correlation )运算。 也就是说,其实我们现在在这里…

安装 Node.js

首先,我们需要安装 Node.js 和相关的库,如 request 和 cheerio。 npm install request cheerio然后,我们可以使用以下代码来爬取网页内容: const request require(request); const cheerio require(cheerio);request({url: js…

基于ubuntu1604的ROS安装

不同版本的Ubuntu都有对应的ROS版本,不要强行安装不对应的版本,否则遇到问题会很难找到解决方法。此教程也只是基于Ubuntu1604和kinetic版本的ROS。 一、基本流程 以下命令仅记录执行顺序,不要无脑复制执行,重在理解 #基本更新…

Linux学习第35天:Linux LCD 驱动实验(二):星星之火可以燎原

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 三、LCD驱动程序编写 需要注意的地方: ①、 LCD 所使用的 IO 配置。 ②、 LCD 屏幕节点修改,修改相应的属性值,换成我们所使…

JavaScript爬虫程序爬取游戏平台数据

这次我用一个JavaScript爬虫程序,来爬取游戏平台采集数据和分析的内容。爬虫使用了爬虫IP信息,爬虫IP主机为duoip,爬虫IP端口为8000。以下是每行代码和步骤的解释: // 导入所需的库 const axios require(axios); const cheerio …

京东数据分析:2023年9月京东打印机行业品牌销售排行榜

鲸参谋监测的京东平台9月份打印机市场销售数据已出炉! 鲸参谋数据显示,今年9月,京东平台打印机的销量为60万,环比增长约32%,同比下滑约25%;销售额为5亿,环比增长约35%,同比下滑约29%…

Python中的上下文管理器和with语句

在Python编程中,资源管理是一个核心概念,涉及文件处理、网络连接、数据库会话等。这些资源需要正确的管理,以确保它们在使用后被适当地关闭或释放,避免资源泄漏。Python通过上下文管理器(Context Managers)和with语句提供了一种优雅的资源管理机制。在本篇博客中,我们将…

jpa Repository的常用写法总结

一、前言 之前项目在xml中写sql,感觉标签有很多,比较灵活; 最近在写新项目,使用了jpa,只能在java中写sql了,感觉不太灵活,但是也得凑付用。 以下总结下常用入参出参写法。 二、Repository代…

Notepad++中删除连续的任意n行

使用Notepad里的行标记功能,可以删除指定的任意n行。 案例1,删除sample2.dat里的第201行到第10000行。方法如下: (1) 用户NotePad打开sample2.dat,右击201行 —》“开始/结束”/开始 图(1) 选择行的起点:201 (2) 接…

JS的内存泄漏详解

介绍: js中的内存垃圾回收机制:垃圾回收器会定期扫描内存,当某个内存中的值被引用为零时就会将其回收。当前变量已经使用完毕但依然被引用,导致垃圾回收器无法回收这就造成了内存泄漏。传统页面每次跳转都会释放内存,…

做什么数据表格啊,要做就做数据可视化

是一堆数字更易懂,还是图表更易懂?很明显是图表,特别是数据可视化图表。数据可视化是一种将大量数据转化为视觉形式的过程,通过图形、图表、图像等方式呈现数据,以便更直观地理解和分析。 数据可视化更加生动、形象地…

Linux内核分析(八)--用户/内核缓冲区及磁盘高速缓存

目录 一、引言 二、缓冲区 ------>2.1、缓冲区介绍 ------>2.2、缓冲区类型 ------------>2.2.1、行缓冲 ------------>2.2.2、全缓冲 ------------>2.2.3、无缓冲 ------>2.3、内核缓冲区 ------------>2.3.1、数据预读(cache) ------------&g…

蓝桥杯每日一题203.11.7

题目描述 题目分析 使用dp思维&#xff0c;当前位置是否可行是有上一位置推来&#xff0c;计算出最大的可行位置即可 #include <stdio.h> #include <string.h>#define N 256 int f(const char* s1, const char* s2) {int a[N][N];int len1 strlen(s1);int len2 …