深入解析TCP/IP协议栈:了解网络通信的核心

本文涉及的产品
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
.cn 域名,1个 12个月
简介: 深入解析TCP/IP协议栈:了解网络通信的核心

前言:TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。

一、TCP/IP基础知识

1.1TCP/IP的标准化

TCP/IP的具体含义

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

TCP/IP标准化精髓

TCP/IP的协议的标准化过程与其他的标准化过程有所不同, 具有两大特点:一是具有开放性, 二是注重实用性, 即被标准化的协议能否被实际运用。

首先, 开放性是由于TCP/IP的协议是由IETF讨论制定的, 而IETF本身就是一个允许任何人加入进行讨论的组织。在这里人们通常采用电子邮件组的形式进行日常讨论, 而邮件组可以由任何人随时订阅。

其次, 在TCP/IP的标准化过程中, 制订某一协议的规范本身已不再那么重要, 而首要任务是实现真正能够实现通信的技术。难怪有人打趣到“TCP/IP简直就是先开发程序, 后写规格标准”。为此, TCP/IP中只要某个协议的大致规范决定下来, 人们就会在多个已实现该协议的设备之间进行通信实验, 一旦发现有什么问题, 可以继续在IEFT中讨论, 及时修改程序、 协议或相应的文档。经过这样一次又一次的讨论、 实验和研究, 一款协议的规范才会最终诞生。因此,TCP/IP协议始终具有很强的实用性。

1.2TCP/IP规范——RFC

那些需要标准化的协议,被人们列入RFC(Request For Comment) (RFC从字面意义上看就是指征求意见表, 属于一种征求协议相关意见的文档。) 文档并在互联网上公布。RFC不仅记录了协议规范内容, 还包含了协议的实现和运用的相关信息(协议实现或运用相关的信息叫做FYI(For Your Information) 。) , 以及实验方面的信息(实验阶段的协议称作Experimental。) 。

RFC文档通过编号组织每个协议的标准化请求。例如IP协议的规范由RFC279制定, TCP协议的规范由RFC793号文档决定。RFC的编码是既定的, 一旦成为某一RFC的内容, 就不能再对其进行随意修改。若要扩展已有某个协议规范的内容, 一定要有一个全新编号的RFC文档对其进行记录。若要修改已有某个协议规范内容, 则需要重新发行一个新的RFC文档, 同时, 老的那份RFC作废。新的RFC文档会明确规定是扩展了哪个已有的RFC以及要作废哪个已有RFC。

此时, 有人提出每当对RFC进行修改时都要产生新的RFC编号太麻烦。为此, 人们采用STD(Standard) (例如STD5表示包含ICMP的IP协议标准。因此, STD5由RFC791、 RFC919、 RFC922、 RFC792、 RFC950以及RFC1112 6个RFC组成。) 方式管理编号。STD用来记载哪个编号制定哪个协议。因此, 同一个协议的规范内容即便发生了变化也不会导致STD编号发生变化。

今后, 即使协议规范的内容改变也不会改变STD编号, 但是有可能导致某个STD下的RFC编号视情况有所增减。

此外, 为了向互联网用户和管理者提供更有益的信息, 与STD类似, FYI(For Your Information) 也开始标注编号组织。FYI为了人们方便检索, 也在其每个编号里涵盖了所涉及的RFC编号。即使更新内容,编号也不会发生变化。

1.3TCP/IP的标准化流程

一个协议的标准化一定要经过IETF讨论。IETF虽然每年只组织3次会议, 但是日常都会通过邮件组的形式进行讨论, 并且该邮件组不限制订阅。

TCP/IP协议的标准化流程大致分为以下几个阶段:首先是互联网草案阶段;其次, 如果认为可以进行标准化, 就记入RFC进入提议标准阶段;第三, 是草案标准阶段;最后, 才进入真正的标准阶段。

互联网草案的有效期通常为6个月。也就是说, 只要进入讨论流程, 就必须在6个月内将所讨论的结果反映到的草案, 否则将以长时间无任何进展为由自动消除。这也是为了防止一些没有实质意义和实际讨论内容的草案出现。在这个全世界信息泛滥的时代, TCP/IP的草案也是漫天横飞。因此, 去伪存真是非常重要的。

经过充分的讨论, 如果得到IESG(IETF Engineering Steering Group, 由IETF的主要成员组成) 的批准, 就能被编入RFC文档。这个文档叫做提议标准(Proposed Standard) 。

提议标准中所提出的协议将被众多设备应用。如果能够得到IESG的认可, 就可以成为草案标准(Draft Standard) 。而如果在实际应用当中遇到问题, 则可在成为草案标准前进行修订。当然, 这种修订也是通过互联网草案的形式发布的。

因此标准化的过程是漫长而有风险的。如果未在互联网上被广泛使用, 就无法最终成为一个提案标准。TCP/IP的标准化过程与一般的标准化过程不同。它不是由标准化组织制定为标准以后才开始投入应用, 而是到其成为标准的那一刻为止, 已经被较为充分地试验并得到了较广的普及(有些协议不是以标准化为目的, 而只是实验性质的。这种协议在RFC中被称作实验性协议(Experimental) 。) 。那些已经成为标准的TCP/IP协议其实早已被人们广泛应用, 因此, 具有很强的实用性。

【文章福利】小编推荐自己的Linux C++技术交流群:【1106675687】整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加哦!!!前100名进群领取,额外赠送大厂面试题。

RFC的获取方法

获取RFC可以有几种方法。最直接的方法就是利用互联网查询“RFC Editor”(所有的RFC都在“RFC Editor”中管理) 。具体网址为:

http://www.rfc-editor.org/rfc/
ftp://ftp.rfc-editor.org/in-notes/

上面两个网址保存着所有RFC文件, 网站中有一个名为rfc-index.txt的文件包含了所有RFC的概览。RFC网站除了发布RFC的相关信息, 还提供RFC检索功能。

二、互联网基础知识

互联网中的每个网络都是由骨干网(BackBone) 和末端网(Stub)组成的。每个网络之间通过NOC(Network Operation Center, 网络操作中心。) 相连。如果网络的运营商不同, 它的网络连接方式和使用方法也会不同。连接这种异构网络需要有IX(Internet Exchange, 网络交换中心。) 的支持。总之, 互联网就是众多异构的网络通过IX互连的一个巨型网络。

连接互联网需要向ISP或区域网提出申请。公司企业或一般家庭申请入网只要联系ISP签约即可。不同的ISP所提供的互联网接入服务的项目也不同。例如, 不限流

量包月、 限定上网时限以及有线/无线网络连接等各种各样的服务。

区域网指的是在特定区域内由团体或志愿者所运营的网络。这种方式通常价格比较便宜, 但是有时可能会出现连接方式复杂或使用上有限制等情况。

所以人们在实际申请连网前, 最好先确认一下ISP或区域网所对应的具体服务条目、 所提供服务的细则(如接入方式、 条件、 费用等)等, 然后再结合自己的使用目的做决定。

三、TCP/IP协议分层模型

3.1TCP/IP与OSI参考模型

1)硬件(物理层)

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

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

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

3)互联网层(网络层)

互联网层使用IP协议, 它相当于OSI模型中的第3层网络层。IP协议基于IP地址转发分包数据。

TCP/IP分层中的互联网层与传输层的功能通常由操作系统提供。尤其是路由器, 它必须得实现通过互联网层转发分组数据包的功能。此外, 连接互联网的所有主机跟路由器必须都实现IP的功能。其他连接互联网的网络设备(如网桥、 中继器或集线器) 就没必要一定实现IP或TCP的功能(有时为了监控和管理网桥、 中继器、 集线器等设备,也需要让它们具备IP、 TCP的功能。) 。

  • IP
    IP是跨越网络传送数据包, 使整个互联网都能收到数据的协议。IP协议使数据能够发送到地球的另一端, 这期间它使用IP地址作为主机的标识(连接IP网络的所有设备必须有自己唯一的识别号以便识别具体的设备。分组数据在IP地址的基础上被发送到对端。) 。
    IP还隐含着数据链路层的功能。通过IP, 相互通信的主机之间不论经过怎样的底层数据链路都能够实现通信。
    虽然IP也是分组交换的一种协议, 但是它不具有重发机制。即使分组数据包未能到达对端主机也不会重发。因此, 属于非可靠性传输协议。
  • ICMP
    IP数据包在发送途中一旦发生异常导致无法到达对端目标地址时,需要给发送端发送一个发生异常的通知。ICMP就是为这一功能而制定的。它有时也被用来诊断网络的健康状况。
  • ARP
    从分组数据包的IP地址中解析出物 理地址(MAC地址) 的一种协议。

4)传输层

TCP/IP的传输层有两个具有代表性的协议。该层的功能本身与OSI参考模型中的传输层类似。

传输层最主要的功能就是能够让应用程序之间实现通信。计算机内部, 通常同一时间运行着多个程序。为此, 必须分清是哪些程序与哪些程序在进行通信。识别这些应用程序的是端口号。

  • TCP
    TCP是一种面向有连接的传输层协议。它可以保证两端通信主机之间的通信可达。TCP能够正确处理在传输过程中丢包、 传输顺序乱掉等异常情况。此外, TCP还能够有效利用带宽, 缓解网络拥堵。
    然而, 为了建立与断开连接, 有时它需要至少7次的发包收包, 导致网络流量的浪费。此外, 为了提高网络的利用率, TCP协议中定义了各种各样复杂的规范, 因此不利于视频会议(音频、 视频的数据量既定) 等场合使用。
  • UDP
    UDP有别于TCP, 它是一种面向无连接的传输层协议。UDP不会关注对端是否真的收到了传送过去的数据, 如果需要检查对端是否收到分组数据包, 或者对端是否连接到网络, 则需要在应用程序中实现。
    UDP常用于分组数据较少或多播、 广播通信以及视频通信等多媒体领域。

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

TCP/IP的分层中, 将OSI参考模型中的会话层、 表示层和应用层的功能都集中到了应用程序中实现。这些功能有时由一个单一的程序实现, 有时也可能会由多个程序实现。因此, 细看TCP/IP的应用程序功能会发现, 它不仅实现OSI模型中应用层的内容, 还要实现会话层与表示层的功能。

TCP/IP应用的架构绝大多数属于客户端/服务端模型。提供服务的程序叫服务端, 接受服务的程序叫客户端。在这种通信模式中, 提供服务的程序会预先被部署到主机上, 等待接收任何时刻客户可能发送的请求。

客户端可以随时发送请求给服务端。有时服务端可能会有处理异常、 超出负载等情况, 这时客户端可以在等待片刻后重发一次请求。

WWW:(中文叫万维网, 是一种互联网上数据读取的规范。有时也叫做Web、 WWW或W3。) 可以说是互联网能够如此普及的一个重要原动力。用户在一种叫Web浏览器(通常可以简化称作浏览器。微软公司的Internet Explore以及Mozilla Foundation的Firefox等都属于浏览器。它们已被人们广泛使用。) 的软件上借助鼠标和键盘就可以轻轻松松地在网上自由地冲浪。也就是说轻按一下鼠标架设在远端服务器上的各种信息就会呈现到浏览器上。浏览器中既可以显示文字、 图片、 动画等信息, 还能播放声音以及运行程序。

浏览器与服务端之间通信所用的协议是HTTP(HyperText Transfer Protocol) 。所传输数据的主要格式是HTML(HyperText Markup Language) 。WWW中的HTTP属于OSI应用层的协议, 而HTML属于表示层的协议。

电子邮件(E-Mail):电子邮件其实就是指在网络上发送信件。有了电子邮件, 不管距离多远的人, 只要连着互联网就可以相互发送邮件。发送电子邮件时用到的协议叫做SMTP(Simple Mail Tranfer Protocol) 。

最初, 人们只能发送文本格式(只由文字组成的信息。日语最初只能发送7bit JIS编码的文字。) 的电子邮件。然而现在, 电子邮件的格式由MIME(在互联网上广泛使用的、 用来定义邮件数据格式一种规范。在WWW与网络论坛中也可以使用。) 协议扩展以后, 就可以发送声音、 图像等各式各样的信息。甚至还可以修改邮件文字的大小、 颜色(有时某些机能可能会因为邮件接收端软件的限制不能充分展现。) 。这里提到的MIME属于OSI参考模型的第6层——表示层。

文件传输(FTP):文件传输是指将保存在其他计算机硬盘上的文件转移到本地的硬盘上, 或将本地硬盘的文件传送到其他机器硬盘上的意思。该过程使用的协议叫做FTP(File Transfer Prototol) 。FTP很早就已经投入使用(最近在文件传输中使用WWW的HTTP的情况也在增加。) ,传输过程中可以选择用二进制方式还是文本方式(用文本方式在Windows、 MacOS或Unix等系统之间进行文件传输时, 会自动修改换行符。这也属于表示层的功能。) 。在FTP中进行文件传输时会建立两个TCP连接, 分别是发出传输请求时所要用到的控制连接与实际传输数据时所要用到的数据连接(这两种连接的控制管理属于会话层的功能。) 。

远程登录(TELNET与SSH):远程登录是指登录到远程的计算机上, 使那台计算机上的程序得以运行的一种功能。TCP/IP网络中远程登录常用TELNET(TELetypewriter NETwork的缩写。有时也称作默认协议。)和SSH(SSH是Secure SHell的缩写。) 两种协议。其实还有很多其他可以实现远程登录的协议, 如BSD UNIX系中rlogin的r命令协议以及Window System中的X协议。

网络管理(SNMP):在TCP/IP中进行网络管理时, 采用SNMP(Simple Network Management Protocol) 协议。使用SNMP管理的主机、 网桥、 路由器等称作SNMP代理(Agent) , 而进行管理的那一段叫做管理器(Manager) 。SNMP正是这个Manager与Agent所要用到的协议。

在SNMP的代理端, 保存着网络接口的信息、 通信数据量、 异常数据量以及设备温度等信息。这些信息可以通过MIB(Management Information Base) (MIB也被称为是一种可透过网络的结构变量。) 访问。因此, 在TCP/IP的网络管理中, SNMP属于应用协议, MIB属于表示层协议。

一个网络范围越大, 结构越复杂, 就越需要对其进行有效的管理。而SNMP可以让管理员及时检查网络拥堵情况, 及早发现故障, 也可以为以后扩大网络收集必要的信息。

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

数据包首部

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

包、 帧、 数据报、 段、 消息以上五个述语都用来表述数据的单位, 大致区分如下:

  1. 包可以说是全能性述语。
  2. 帧用于表示数据链路层中包的单位。
  3. 数据包是IP和UDP等网络层以上的分层中包的单位。
  4. 段则表示TCP数据流中的信息。
  5. 消息是指应用协议中数据的单位。

包首部就像是协议的脸,网络中传输的数据包由两部分组成:一部分是协议所要用到的首部, 另一部分是上层传过来的数据。首部的结构由协议的具体规范详细定义。例如, 识别上一层协议的域应该从包的哪一位开始取多少个比特、 如何计算校验和并插入包的哪一位等。相互通信的两端计算机如果在识别协议的序号以及校验和的计算方法上不一样, 就根本无法实现通信。

因此, 在数据包的首部, 明确标明了协议应该如何读取数据。反过来说, 看到首部, 也就能够了解该协议必要的信息以及所要处理内容。因此, 看到包首部就如同看到协议的规范。难怪有人会说首部就像是协议的脸了。

发送数据包

假设甲给乙发送电子邮件, 内容为:“早上好”。而从TCP/IP通信上看, 是从一台计算机A向另一台计算机B发送电子邮件。我们就通过这个例子来讲解一下TCP/IP通信的过程。

① 应用程序处理

启动应用程序新建邮件, 将收件人邮箱填好, 再由键盘输入邮件内容“早上好”, 鼠标点击“发送”按钮就可以开始TCP/IP的通信了。首先, 应用程序中会进行编码处理。例如, 日文电子邮件使用ISO-2022-JP或UTF-8进行编码。这些编码相当于OSI的表示层功能。

编码转化后, 实际邮件不一定会马上被发送出去, 因为有些邮件的软件有一次同时发送多个邮件的功能, 也可能会有用户点击“收信”按钮以后才一并接收新邮件的功能。像这种何时建立通信连接何时发送数据的管理功能, 从某种宽泛的意义上看属于OSI参考模型中会话层的功能。

应用在发送邮件的那一刻建立TCP连接, 从而利用这个TCP连接发

送数据。它的过程首先是将应用的数据发送给下一层的TCP, 再做实际

的转发处理。

② TCP模块的处理

TCP根据应用的指示(这种关于连接的指示相当于OSI参考模型中的会话层。) , 负责建立连接、 发送数据以及断开连接。TCP提供将应用层发来的数据顺利发送至对端的可靠传输。

为了实现TCP的这一功能, 需要在应用层数据的前端附加一个TCP首部。TCP首部中包括源端口号和目标端口号(用以识别发送主机跟接收主机上的应用) 、 序号(用以发送的包中哪部分是数据) 以及校验和(Check Sum, 用来检验数据的读取是否正常进行的方法。) (用以判断数据是否被损坏) 。随后将附加了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(Frame Check Sequence) 由硬件计算, 添加到包的最后。设置FCS的目的是为了判断数据包是否由于噪声而被破坏。

经过数据链路的包

分组数据包(以下简称包) 经过以太网的数据链路时的大致流程如图2.19所示。不过请注意, 该图对各个包首部做了简化。

包流动时, 从前往后依此被附加了以太网包首部、 IP包首部、 TCP包首部(或者UDP包首部) 以及应用自己的包首部和数据。而包的最后则追加了以太网包尾(包首部附加于包的前端, 而包尾则指追加到包的后端的部分。) (Ethernet Trailer) 。

每个包首部中至少都会包含两个信息:一个是发送端和接收端地址, 另一个是上一层的协议类型。

经过每个协议分层时, 都必须有识别包发送端和接收端的信息。以太网会用MAC地址, IP会用IP地址, 而TCP/UDP则会用端口号作为识别两端主机的地址。即使是在应用程序中, 像电子邮件地址这样的信息也是一种地址标识。这些地址信息都在每个包经由各个分层时, 附加到协议对应的包首部里边。

此外, 每个分层的包首部中还包含一个识别位, 它是用来标识上一层协议的种类信息。例如以太网的包首部中的以太网类型, IP中的协议类型以及TCP/UDP中两个端口的端口号等都起着识别协议类型的作用。就是在应用的首部信息中, 有时也会包含一个用来识别其数据类型的标签。

数据包接收处理

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

⑤ 网络接口(以太网驱动) 的处理

主机收到以太网包以后, 首先从以太网的包首部找到MAC地址判断是否为发给自己的包。如果不是发给自己的包则丢弃数据(很多NIC产品可以设置为即使不是发给自己的包也不丢弃数据。这可以用于监控网络流量。) 。

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

⑥ IP模块的处理

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

⑦ TCP模块的处理

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

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

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

⑧ 应用程序的处理

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

但在这个例子中, 主机B上恰好有乙的收件箱, 所以主机B和收件人乙能够收到电子邮件的正文。邮件会被保存到本机的硬盘上。如果保存也能正常进行, 那么接收端会返回一个“处理正常”的回执给发送端。

反之, 一旦出现磁盘满、 邮件未能成功保存等问题, 就会发送一个“处理异常”的回执给发送端。

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

四、TCP/IP理解

TCP/IP 是用于 internet 的通讯协议,指传输控制协议/网际协议 (Transmission Control Protocol / Internet Protocol),定义了电子设备(比如计算机)如何连入因特网,以及数据如何在它们之间传输的标准计算机通信协议是对那些计算机必须遵守以便彼此通信的规则的描述。

4.1TCP/IP 中包含的协议与作用

TCP/IP 是基于 TCP 和 IP 这两个最初的协议之上的不同的通信协议的大的集合。

主要包含:

TCP (传输控制协议) - 应用程序之间通信,应用程序到网络的数据传输控制负责在数据传送之前将它们分割为 IP 包,然后在它们到达的时候将它们重组。当应用程序希望通过 TCP 与另一个应用程序通信时,它会发送一个通信请求。这个请求必须被送到一个确切的地址。在双方“握手”之后,TCP 将在两个应用程序之间建立一个全双工 (full-duplex) 的通信。这个全双工的通信将占用两个计算机之间的通信线路,直到它被一方或双方关闭为止。

UDP (用户数据包协议) - 应用程序之间的简单通信,可靠性低于 TCP

IP (网际协议) - 计算机之间的通信,负责在因特网上发送和接收数据包,是无连接的通信协议。它不会占用两个正在通信的计算机之间的通信线路,降低了对网络线路的需求,每条线可以同时满足许多不同的计算机之间的通信需要。通过 IP,消息(或者其他数据)被分割为小的独立的包,并通过因特网在计算机之间传送,负责将每个包路由至它的目的地

  1. HTTP - 超文本传输协议,负责 web 服务器与 web 浏览器之间的通信。用于从 web 客户端(浏览器)向 web 服务器发送请求,并从 web 服务器向 web 客户端返回内容(网页)
  2. HTTPS - 安全的 HTTP,负责在 web 服务器和 web 浏览器之间的安全通信,作为有代表性的应用,HTTPS 会用于处理信用卡交易和其他的敏感数据
  3. SSL - 安全套接字层,用于为安全数据传输加密数据
  4. SMTP - 简易邮件传输协议,用于电子邮件的传输
  5. MIME - 多用途因特网邮件扩展,使 SMTP 有能力通过 TCP/IP 网络传输多媒体文件,包括声音、视频和二进制数据。
  6. IMAP - 因特网消息访问协议,用于存储和取回电子邮件
  7. POP - 邮局协议,用于从电子邮件服务器向个人电脑下载电子邮件。
  8. FTP - 文件传输协议,负责计算机之间的文件传输
  9. NTP - 网络时间协议,用于在计算机之间同步时间(钟)
  10. DHCP - 动态主机配置协议,用于向网络中的计算机分配动态 IP 地址
  11. SNMP - 简单网络管理协议,用于计算机网络的管理
  12. LDAP - 轻量级的目录访问协议,用于从因特网搜集关于用户和电子邮件地址的信息。
  13. ICMP - 因特网消息控制协议,负责网络中的错误处理
  14. PPTP - 点对点隧道协议,用于私人网络之间的连接(隧道)
  15. ARP - Address Resolution Protocol,用于通过 IP 来查找基于 IP 地址的计算机网卡的硬件地址
  16. RARP - Reverse Address Resolution Protocol,用于通过 IP 查找基于硬件地址的计算机网卡的 IP 地址。
  17. BOOTP - Boot Protocol,用于从网络启动计算机

IP 路由器 :当一个 IP 包从一台计算机被发送,它会到达一个 IP 路由器,负责将这个包路由至它的目的地,直接地或者通过其他的路由器。

在一个相同的通信中,一个包所经由的路径可能会和其他的包不同。而路由器负责根据通信量、网络中的错误或者其他参数来进行正确地寻址。

TCP/IP :意味着 TCP 和 IP 在一起协同工作

  • TCP 负责应用软件(比如你的浏览器)和网络软件之间的通信
  • IP 负责计算机之间的通信
  • TCP 负责将数据分割并装入 IP 包,然后在它们到达的时候重新组合它们
  • IP 负责将包发送至接受者

TCP/IP 寻址

TCP/IP 使用 32 个比特或者 4 个 0 到 255 之间的数字来为计算机编址,一个字节等于八比特

域名

用于 TCP/IP 地址的名字被称为域名,借助dns将名称翻译成原本的地址,DNS 服务器负责将域名翻译为 TCP/IP 地址,同时负责使用新的域名信息更新彼此的系统。当一个新的域名连同其 TCP/IP 地址一同注册后,全世界的 DNS 服务器都会对此信息进行更新

TCP/IP 邮件

三种协议的使用方式:使用 SMTP(简单邮件传输协议) 来发送邮件,使用 POP (邮局协议)从邮件服务器下载邮件,使用 IMAP(因特网消息访问协议) 连接到邮件服务器。

SMTP 协议用于传输电子邮件。SMTP 负责把邮件发送到另一台计算机

通常情况下,邮件会被送到一台邮件服务器(SMTP 服务器),然后被送到另一台(或几台)服务器,然后最终被送到它的目的地。

SMTP 也可以传送纯文本,但是无法传输诸如图片、声音或者电影之类的二进制数据, 使用 MIME 协议通过 TCP/IP 网络来发送二进制数据。MIME 协议会将二进制数据转换为纯文本。

POP 协议被邮件程序用来取回邮件服务器上面的邮件

假如你的邮件程序使用 POP,那么一旦它连接上邮件服务器,你的所有的邮件都会被下载到邮件程序中(或者称之为邮件客户端),与 POP 类似,IMAP 协议同样被邮件程序使用,IMAP 协议与 POP 协议之间的主要差异是:如果 IMAP 连上了邮件服务器,它不会自动地将邮件下载到邮件程序之中。

IMAP 使你有能力在下载邮件之前先通过邮件服务器端查看他们。通过 IMAP,你可以选择下载这些邮件或者仅仅是删除它们。比方说你需要从不同的位置访问邮件服务器,但是仅仅希望回到办公室的时候再下载邮件,IMAP 在这种情况下会很有用。

4.2三次握手

所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。所谓四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。

在了解三次握手之前,我们需要先看TCP首部两个关键的属性——序号和确认号。序号字段代表报文端要发送的数据的第一个字节的序号;通信的任何一方收到消息都要发送一个确认报文,确认报文就需要一个确认号,它的值表示期望收到下一个报文段的序号值,也就是说在确认报文中确认号才会生效。

如何标识是否为确认报文呢?这里要关注六个标志位,分别是URG、ACK、PSH、PST、SYN、FIN。在这六个标志位中,又要重点关注三个,分别是:

  1. ACK:当ACK=1==确认号字段有效,为确认报文==;当ACK=0,确认号无效
  2. SYN:同步比特SYN=1,表示这是一个==连接请求或请求接受报文==。
  3. FIN:用来==释放一个连接==。当FIN=1,表示次报文段的发送端的数据已经发送完毕了,用来释放连接。

第一次握手时,Client向Server发送一个连接请求,需要设置SYN=1,同时发送自己的序列号Seq到服务器。第二次握手,为服务器收到请求后,发送一个确认报文,ACK=1,同时发送一个确认号,是期望收到对方的下一个报文段的数据的第一个字节的序号,ACKnum=X+1,+1所示收到 SYN标识。第三次握手为客户端收到服务器的响应报文,他也要回复确认报文,确认报文ACK=1,ACKnum=Y+1

4.3四次挥手

第一次挥手为客户端发送FIN=1,表示自己没有数据可以发送了,其次携带自己的序列号。第二次挥手为服务器端确认收到客户端的FIN包,发送一个确认包,表明自己接收到了客户端的关闭请求,但是这时并未准备好关闭连接。第三次挥手为服务器确认准备好关闭连接,这时发送FIN=1。第四次挥手为客户端收到服务端的关闭请求,发送一个确认包,服务器端收到这个请求后就关闭连接,不再回应客户端,客户端会等待一个固定时间后,自动关闭。

秋招可以写进简历的6个实战项目:


相关文章
|
4天前
|
安全 虚拟化
在数字化时代,网络项目的重要性日益凸显。本文从前期准备、方案内容和注意事项三个方面,详细解析了如何撰写一个优质高效的网络项目实施方案,帮助企业和用户实现更好的体验和竞争力
在数字化时代,网络项目的重要性日益凸显。本文从前期准备、方案内容和注意事项三个方面,详细解析了如何撰写一个优质高效的网络项目实施方案,帮助企业和用户实现更好的体验和竞争力。通过具体案例,展示了方案的制定和实施过程,强调了目标明确、技术先进、计划周密、风险可控和预算合理的重要性。
18 5
|
6天前
|
SQL 安全 网络安全
网络安全的护城河:漏洞防御与加密技术的深度解析
【10月更文挑战第37天】在数字时代的浪潮中,网络安全成为守护个人隐私与企业资产的坚固堡垒。本文将深入探讨网络安全的两大核心要素——安全漏洞和加密技术,以及如何通过提升安全意识来强化这道防线。文章旨在揭示网络攻防战的复杂性,并引导读者构建更为稳固的安全体系。
17 1
RS-485网络中的标准端接与交流电端接应用解析
RS-485,作为一种广泛应用的差分信号传输标准,因其传输距离远、抗干扰能力强、支持多点通讯等优点,在工业自动化、智能建筑、交通运输等领域得到了广泛应用。在构建RS-485网络时,端接技术扮演着至关重要的角色,它直接影响到网络的信号完整性、稳定性和通信质量。
|
4天前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
27 3
|
4天前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
17 2
|
7天前
|
域名解析 网络协议 测试技术
IP、掩码、网关、DNS1、DNS2到底是什么东西,ping telnet测试
理解IP地址、子网掩码、默认网关和DNS服务器的概念是有效管理和配置网络的基础。通过使用ping和telnet命令,可以测试网络连通性和服务状态,快速诊断和解决网络问题。这些工具和概念是网络管理员和IT专业人员日常工作中不可或缺的部分。希望本文提供的详细解释和示例能够帮助您更好地理解和应用这些网络配置和测试工具。
25 2
|
12天前
|
SQL 安全 算法
网络安全的屏障与钥匙:漏洞防护与加密技术解析
【10月更文挑战第31天】在数字世界的海洋中,网络安全是航船的坚固屏障,而信息安全则是守护宝藏的金钥匙。本文将深入探讨网络安全的薄弱环节——漏洞,以及如何通过加密技术加固这道屏障。从常见网络漏洞的类型到最新的加密算法,我们不仅提供理论知识,还将分享实用的安全实践技巧,帮助读者构建起一道更加坚不可摧的防线。
22 1
|
8天前
|
机器学习/深度学习 人工智能 自动驾驶
深入解析深度学习中的卷积神经网络(CNN)
深入解析深度学习中的卷积神经网络(CNN)
25 0
|
4天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
16 2
|
1月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
67 0

推荐镜像

更多