详解报文传输路径与接收端 (报文传输方式)

报文传输路径与接收端详解(报文传输方式) 报文传输方式

一、引言

在信息化时代,报文传输成为数据传输的主要方式之一。
报文传输涉及发送方将信息封装成报文,通过网络传输介质,最终由接收方解封装并获取原始信息的过程。
本文将详细解析报文传输路径与接收端的工作原理,以及报文传输方式的特点。

二、报文传输路径

报文传输路径是指报文从发送方到接收方所经过的网络路径。典型的报文传输路径包括以下几个环节:

1. 发送端:发送端将原始数据封装成报文,包括报文的头部和正文。头部包含目的地址、源地址等控制信息,正文则包含实际的数据内容。
2. 网络接口:发送端通过网络接口将报文发送到网络介质中。
3. 传输介质:传输介质是信息传输的通道,如光纤、电缆、无线信道等。
4. 路由选择:报文在网络中传输时,会根据路由选择协议选择最佳路径。
5. 中间节点:报文在传输过程中可能经过若干中间节点,如交换机、路由器等,这些节点负责报文的转发和路由选择。
6. 接收端:接收端接收到报文后,通过解封装获取原始数据,并传递给应用程序处理。

三、报文传输方式

报文传输方式决定了报文在网络中的传输特性和性能。常见的报文传输方式有以下几种:

1. 同步传输:同步传输是一种有序的、按固定时钟节拍进行数据传输的方式。它适用于大量连续数据的传输,如文件传输。同步传输过程中,发送方和接收方需要保持严格的同步,以确保数据的正确接收。
2. 异步传输:异步传输是一种灵活的传输方式,它不要求发送方和接收方保持严格的同步。每个字符或数据块都单独发送,具有独立的起始和结束标识。异步传输适用于交互式通信,如键盘输入和打印机输出。
3. 半双工传输:半双工传输允许数据在同一时刻只能单向传输,即要么发送方发送数据,要么接收方接收这种传输方式适用于某些特定场景,如串口通信。
4. 全双工传输:全双工传输允许数据在双向同时进行传输,即同时支持发送和接收。这种传输方式适用于网络通信,如以太网。

四、接收端详解

接收端是报文传输的终点,负责接收并解封装报文,恢复原始数据。接收端的工作过程如下:

1. 接收网络信号:接收端通过网络接口接收网络中的信号,这些信号包含了发送方发送的报文。
2. 解封装报文:接收端对接收到的信号进行解封装,提取出报文头部和正文。
3. 解析报文:接收端根据报文的头部信息,如目的地址、源地址等,对报文进行解析,获取原始数据。
4. 数据处理:接收端将解析后的数据传递给应用程序进行处理,完成数据的利用。

五、报文传输的优势与挑战

报文传输具有许多优势,如支持异步通信、灵活的数据格式、支持长距离传输等。
报文传输也面临一些挑战,如网络安全问题、数据传输延迟、网络拥塞等。
为了解决这些挑战,需要采用相应的技术和策略,如加密技术、流量控制、拥塞避免等。

六、结论

本文详细解析了报文传输路径与接收端的工作原理,以及报文传输方式的特点。
报文传输作为数据传输的主要方式之一,在现代通信和网络中发挥着重要作用。
了解报文传输的路径和方式,有助于更好地理解和优化网络通信性能。


报文是什么意思

报文的意思是指一种数据通信中的信息传输单位。

报文是网络中交换和传输信息的载体,它在网络中扮演着至关重要的角色。

在详细解释方面:

1. 报文的基本概念

报文是一种包含信息的数据单元,它在网络中从一个节点传输到另一个节点。 报文可以包含文本、图像、音频、视频等多种形式的数据,用于实现不同设备之间的通信。

2. 报文的结构和内容

报文通常包含源地址、目标地址、序列号、数据内容等信息。 源地址指示报文的发送方,目标地址指示报文的接收方。 序列号用于标识报文的顺序,确保报文按照正确的顺序进行接收和处理。 数据内容是报文所传递的实际信息,可以是文本、图片、音频或视频等。

3. 报文的传输过程

在网络通信中,报文通过特定的通信协议进行传输。 发送方将信息封装成报文,然后通过网络将其发送到接收方。 接收方在接收到报文后,根据通信协议对报文进行解析,提取出其中的信息内容。

4. 报文的重要性

报文是网络通信中的基础单位,它在网络通信中扮演着信息传递的桥梁和纽带。 无论是在互联网、企业内部网络还是其他类型的网络中,报文都是实现设备之间通信和数据交换的重要手段。 报文的质量和传输效率直接影响到网络通信的质量和效率。 因此,对于网络工程师和开发人员来说,掌握报文的原理和应用是非常重要的。

总之,报文是网络通信中的关键组成部分,承载着信息的传输和交换任务。 了解其基本概念、结构、传输过程和重要性,对于理解和掌握网络通信的基本原理非常有帮助。

数据包结构与传输详解

揭秘数据包的神秘面纱:TCP/IP、UDP与IP报文段的深入解析

在数字通信的世界中,数据包的构造就如同一封精心设计的信件,每个字段都承载着重要的信息。 让我们一起探索TCP/IP协议中的关键元素——TCP报文段、UDP报文段和IP报文段的结构和功能。

1. TCP报文段:可靠传输的基石

每个TCP报文段都包含源端口(0-)和目的端口,标识数据分段的序号与确认号。 控制标志如URG、ACK等决定数据传输的特性,接收窗口用于流量控制,校验和确保数据完整性,紧急数据指针则标记紧急数据的位置。 此外,TCP报文段还可能包含协商参数选项,以及承载的报文内容。

2. UDP报文段:快速但不保证的传输

UDP报文段则相对简洁,仅需源和目的端口,长度和校验和确保数据的准确。 没有TCP的复杂控制和流控制机制,UDP适合对实时性要求高的应用。

3. IP报文段:网络的信使

IP报文段以4位版本号开头,首部长度可变,包含服务类型、总长度、标识符和标志等字段。 分段偏移和生存时间确保数据的正确传递,而协议字段则指示了上层使用的协议,如ICMP或DNS。 首部检验和则用来校验数据的完整性,源和目的IP地址是数据的终点和起点。

4. 从TCP到应用:内核与非内核的处理

TCP协议内核级处理提供了可靠性和顺序性,但非内核环境下的应用需要理解TCP机制以确保数据传输的准确性。 TCP流存储通过二位链表组织会话和顺序号,而HASH表则提升了多会话的处理效率。

深入学习与实践

想要深入了解TCP/IP的流重组技术,可以参考《关于snort和stream流重组》一文,而对于IP协议首部的详细分析,可以从经典的资源中找到答案。 每一个字段的微妙变化都影响着数据在网络中的旅程,学习这些基础知识是构建高效网络通信的关键。

探索未尽,连接未来

通过理解这些基本结构,我们可以更深入地洞察网络通信的机制,为构建高效、安全的网络应用打下坚实的基础。 在数字化的世界里,数据包的构造不再是秘密,它们是连接你我之间信息的桥梁,让我们一起揭开它们的神秘面纱。

TCP报文结构和功能简析

TCP:传输、 控制 、协议。

TCP与UDP最大却别就在那个 C 上面,它充分实现了数据传输时各种控制功能。 可以进行丢包 重发控制 ,还可以对次序乱掉的数据包进行 顺序控制 ,还能 控制传输流量 ,这些是UDP中没有的。 即T C P 提供一种面向连接的、可靠的字节流服务。

TCP是一中面向有链接的协议,只有在确认对端存在的时候,才会发送分数据,从而也可以控制通信流量的浪费。

什么是可靠的传输: 不丢包、不损坏、不乱序、不重复。

TCP通过 校验和 、 序列号 、 确认应答 、 重发控制 、 连接管理 以及 窗口控制 等机制来实现可靠传输。

接收端查询就收数据TCP首部中的序号和数据长度。 将自己下一步应该接受的序列号作为确认应答返送回去。 就这样,通过序列号和确认应答,TCP实现可靠传输。

一般使用TCP首部用于控制的字段来管理连接。 一个连接的建立和断开,正常过程中,至少需要来回共7个包才能完成。

TCP首部的数据结构如图所示:

TCP包首部

为了便于理解,忽略选项部分,固定首部通常为20个字节,将按作用分类分析。

前4个字节 来标识了发送方的端口号和接收方的端口号,即该数据包由谁发送,由谁接收。 前2个字节标识源端口号,紧接着2个字节标识目的端口号。

即发送方:(,) = () ,除去0~1023.

即接收方:(,) = () ,除去0~1023.

TCP是面向字节流的。 在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。整个要传送的字节流的起始序号必须在连接建立时设置。首部中的序号字段值则是指的是本报文段所发送的数据的第一个字节的序号。长度为4字节,序号是32bit的无符号数,序号到达2 - 1后又从0开始。

ack :确认序号, <u>即确认字节的序号</u> ,更确切地说,是 发送确认的一端 所期望收到的下一个序号。

所谓的 发送确认的一端 就是将确认信息发出的一端。比如第二次握手的 S 端就是 发送确认的一端 。

确认序号为上次接收的最后一个字节序号加1.只有确认标志位( ACK )为1的时候,确认序号才有效。

也叫首部长度,占4个bit,它指出TCP报文段的 数据 起始处距离TCP报文段的起始处有多远。

TCP报文结构

由于首部中还有长度不确定的选项字段,因此数据偏移字段是必要的。

“首部长度”是4位二进制数,单位是 32位字 ,能表示的最大十进制数字是15。

(1111) =(15) ,即是15个32位,一个32位是4个字节,因此数据偏移的最大值是15 4=60个字节,这也是TCP首部的最大字节。因为固定首部的存在,数据偏移的值最小为 20个字节 ,因此选项长度不能超过 40字节 *(减去20个字节的固定首部)。

占6位,保留为今后使用,但目前应置为0。

当URG=1时,表明紧急指针字段有效。

它告诉系统此报文段中有紧急数据,应尽快发送(相当于高优先级的数据),而不要按原来的排队顺序来传送。

例如,已经发送了很长的一个程序要在远地的主机上运行。 但后来发现了一些问题,需要取消该程序的运行,因此用户从键盘发出中断命令。 如果不使用紧急数据,那么这两个字符将存储在接收TCP的缓存末尾。 只有在所有的数据被处理完毕后这两个字符才被交付接收方的应用进程。 这样做就浪费了很多时间。

当URG置为1时,应用进程就告诉TCP有紧急数据要传送。 于是TCP就把紧急数据插入到本报文段数据的最前面,而在紧急数据后面的数据仍然是普通数据。 这时要与首部中 紧急指针 (Urgent Pointer)字段配合使用。

仅当ACK = 1时确认号字段才有效,当ACK = 0时确认号无效。 TCP规定,在连接建立后所有的传送的报文段都必须把ACK置为1。

当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能收到对方的响应。 在这种情况下,TCP就可以使用推送(push)操作。 发送方TCP把PSH置为1,并立即创建一个报文段发送出去。 接收方TCP收到PSH=1的报文段,就尽快地(即“推送”向前)交付接收应用进程。 而不用再等到整个缓存都填满了后再向上交付。

当RST=1时,表明TCP连接中出现了严重错误(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立传输连接。 RST置为1还用来拒绝一个非法的报文段或拒绝打开一个连接。

在连接建立时用来同步序号。 当 SYN=1 而 ACK=0 时,表明这是一个 连接请求报文段 。 对方若同意建立连接,则应在响应的报文段中使SYN=1和ACK=1。

因此 SYN=1 就表示这是一个连接请求或连接接受报文。

用来释放一个连接。 当FIN=1时,表明此报文段的发送发的数据已发送完毕,并要求释放运输连接。

占2字节。窗口值是(0,2 -1)之间的整数。

窗口指的是发送本报文段的一方的接受窗口(而不是自己的发送窗口),窗口大小是给对方用的。

窗口值告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方一次发送的数据量(以字节为单位)。

之所以要有这个限制,是因为接收方的数据缓存空间是有限的。

总之,窗口值作为接收方让发送方设置其发送窗口的依据。

例如,A发送了一个报文段,其确认号是3000,窗口字段是1000.这就是告诉对方B:“从3000算起,A接收缓存空间还可接受1000个字节数据,字节序号是3000-3999”,可以想象到河道的阀门。

总之:窗口字段明确指出了现在允许对方发送的数据量。 窗口值经常在动态变化。

占2字节。 检验和字段检验的范围包括首部和数据这两部分。 和UDP用户数据报一样,在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。 伪首部的格式和UDP用户数据报的伪首部一样。 但应把伪首部第4个字段中的17改为6(TCP的协议号是6);把第5字段中的UDP中的长度改为TCP长度。 接收方收到此报文段后,仍要加上这个伪首部来计算检验和。 若使用TPv6,则相应的伪首部也要改变。

占2字节。 紧急指针仅在URG=1时才有意义,它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据) 。 因此,在紧急指针指出了紧急数据的末尾在报文段中的位置。 当所有紧急数据都处理完时,TCP就告诉应用程序恢复到正常操作。 值得注意的是,即使窗口为0时也可以发送紧急数据。

长度可变,最长可达40个字节。 当没有使用“选项”时,TCP的首部长度是20字节。

最大报文段长度(MSS:Maximum Segment Size)表示TCP传往另一端的最大块数据的长度。 当一个连接建立时,连接的双方都要通告各自的MSS。

当建立一个连接时,每一方都有用于通告它期望接收的MSS选项(MSS选项只能出现在SYN报文段中),如果一方不接收来自另一方的MSS值,则MSS就定为默认值536字节(这个默认值允许20字节的IP首部和20字节的TCP首部以适合576字节IP数据报) 。

为什么要规定一个最大报文长度MSS呢?

这并不是考虑接受方的接收缓存可能存放不下TCP报文段中的数据。 实际上,MSS与接收窗口值没有关系。

我们知道,TCP报文段的数据部分,至少要加上40字节的首部( TCP首部20字节 和 IP首部20字节 ,这里还没有考虑首部中的可选部分)才能组装成一个 IP数据报 。

若选择较小的MSS长度,网络的利用率就降低。 设想在极端情况下,当TCP报文段只含有1字节的数据时,在IP层传输的数据报的开销至少有40字节(包括TCP报文段的首部和IP数据报的首部)。 这样,对网络的利用率就不会超过1/41。 到了数据链路层还要加上一些开销。 但反过来,若TCP报文段非常长,那么在IP层传输时就有可能要分解成多个短数据报片。 在终点要把收到的各个短数据报片组成成原来的TCP报文段,当传输出错时还要进行重传,这些也都会使开销增大。

因此,MSS应尽可能大些,只要在IP层传输时不需要分片就行。

由于IP数据报所经历的路径是动态变化的,因此在这条路径上确定的不需要的分片的MSS,如果改走另一条路径就可能需要进行分片。 因此最佳的MSS是很难确定的。 在连接过程中,双方都把自己能够支持的MSS写入这一字段,以后就按照这个数值传输数据,两个传送方向可以有不同的MSS值。 若主机未填写这一项,则MSS的默认值是536字节长。 因此,所有在互联网上的主机都应该接受的报文段长度是536+20(固定首部长度)=556字节 。

后来又增加了几个选项如窗口扩大选项、时间戳选项等。

窗口扩大选项是为了扩大窗口。

我们知道,TCP首部中窗口字段长度是16位,因此最大的窗口大小为64K字节。 虽然这对早期的网络是足够用的,但对于包含卫星信道的网络,传播时延和宽带都很大,要获得高吞吐量需要更大的窗口大小。

窗口扩大选项占3字节,其中有一个字节表示移位值S。新的窗口值等于TCP首部中的窗口位数从16增大到(16+S)。移位值允许使用的最大值是14,相当于窗口最大值增大到2 (16+14)-1=2

窗口扩大选项可以在双方初始建立TCP连接时进行协商。 如果连接的某一端实现了窗口扩大,当它不再需要扩大其窗口时,可发送S=0选项,使窗口大小回到16。

时间戳选项占10字节,其中最主要的字段是时间戳字段(4字节)和时间戳回送回答字段(4字节)。时间戳选项有以下两个概念:

第一、 用来计算往返时间RTT。 发送方在发送报文段时把当前时钟的时间值放入时间戳字段,接收方在确认该报文段时把时间戳字段复制到时间戳回送回答字段。 因此,发送方在收到确认报文后,可以准确地计算出RTT来。

第二、 用于处理TCP序号超过2 的情况,这又称为防止序号绕回PAWS。我们知道,TCP报文段的序号只有32位,而每增加2 个序号就会重复使用原来用过的序号。当使用高速网络时,在一次TCP连接的数据传送中序号很可能被重复使用。例如,当使用1.5Mbit/s的速度发送报文段时,序号重复要6小时以上。但若用2.5Gbit/s的速率发送报文段,则不到14秒钟序号就会重复。为了使接收方能够把新的报文段和迟到很久的报文段区分开,则可以在报文段中加上这种时间戳。

从 功能 和 性能 的角度去理解

三次握手建立连接

第一次:

C 向 S 发送一个 建立连接 的请求。 此过程中携带一些报文属性信息,这些信息,存在于报文首部,有初始化用的信息,比如,有用于认证的信息。

初始化信息:如报文序列号、

SYN: TCP在数据通信之前,通过TCP首部发送的一个 SYN 标志位,作为建立连接的请求等待接收方确认应答。 如果 S 发来确认应答,则认为可以进行数据通信,否则,就不能进行通信。

TCP规定:****SYN=1 的报文段不能携带数据,但是要 消耗掉一个序号 :seq=x。

这个时候 C 进入 SYN-SENT ( 同步已发送 )状态。

第二次:

S 收到 C 请求后,如果同意建立连接,则向 C 返回确认信息:将 SYN 、 ACK 都置 1 ,确认号为 ack=seq+1 (seq来自客户端),并携带自己的 初始化,同时用于认证的信息S 。

同理: SYN=1 的报文段不能携带数据,但是要 消耗掉一个序号 :seq=y。

这个时候 S 进入 SYN-RCVD ( 同步已接收 )状态。 C 收到 S 返回的确认信息后,进入 ESTABLISHED (已建立连接)的状态,

第三次:

C 收到 S 返回的确认信息后,向 S 再一次发送确认报文。 ACK 置为 1 ,确认号 ack=seq+1 (seq来自 S ),自己的 seq=x+1 。

TCP规定: ACK报文可以携带数据。 但是,如果不携带数据,则不消耗序号,这时,下一数据报文段的序号仍是 seq=x+1 。 服务器 收到 客户端 返回的确认信息后,也进入 ESTABLISHED (已建立连接)的状态,

从功能角度去考虑前两次握手,从性能的角度去理解为什么需要第三次握手。

有第三次,是考虑到一种错误情况: 假设 C 发了一请求建立连接的报文,长时间未收到 S 的确认报文,则 C 会重发,这个时候 S 与之建立连接、完成数据通信、关闭了连接,这个时候 C 第一发出的请求建立连接的报文到达了 S , S 则会等待 C 发送数据,实际上 C 已经 CLOSED 了, S 就一直在这等待,浪费资源,

确切地说,应该是至少四次数据交互才能实现一个连接的彻底关闭。 关闭连接,需要四个报文来指示关闭。

TCP是全双工通信的,所以在一端发送数据完毕后,还具有接收另一端的数据的能力,这就所谓的半关闭。

四次挥手

举个例子 :如果 C 的数据已经发送完毕, C 是不能立即关闭的,因为建立连接的通信双方是平等的。

C 首先告诉 S :“数据发送完毕“,这个消息在TCP报文的首部由 FIN 来标识,让 S 知道 C 是准备断开连接了。 这是第一次挥手。

S 收到 C 发来的 FIN 标识的报文后,要给 C 端恢复一个 确认FIN 的消息,告诉 C 说,知道你的数据发完了。 这是第二次挥手。

这个时候,如果 S 端的数据也发送完毕了,就给 C 发一个 FIN=1 报文。 这是第三次挥手。

C 收到 S 发来的 FIN 标识的报文后,要给 S 端恢复一个 确认FIN 的消息,告诉 C 说,知道你的数据发完了。 这是第四次挥手。

然后就彻底断开连接了。

TCP的状态变迁图

本文原创来源:电气TV网,欢迎收藏本网址,收藏不迷路哦!

相关阅读

添加新评论