大家好,报文服务器相信很多的网友都不是很明白,包括上传返回报文异常也是一样,不过没有关系,接下来就来为大家分享关于报文服务器和上传返回报文异常的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

一、TCP报文结构和功能简析

TCP:传输、控制、协议。

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

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

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

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

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

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

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

TCP包首部

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

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

即发送方:(11111111,1111111) 2=(65535) 10,除去0~1023.

即接收方:(11111111,1111111) 2=(65535) 10,除去0~1023.

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

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

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

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

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

TCP报文结构

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

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

(1111) 2=(15) 10,即是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 16-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 30-1。

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

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

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

第二、用于处理TCP序号超过2 32的情况,这又称为防止序号绕回PAWS。我们知道,TCP报文段的序号只有32位,而每增加2 32个序号就会重复使用原来用过的序号。当使用高速网络时,在一次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的状态变迁图

二、上传返回报文异常***请检查服务怎么办

检查网络连接,确认服务器状态。

1、检查网络连接:如果使用的是网络上传,检查网络连接是否稳定,网络不稳定会导致上传失败或返回报文异常。

2、确认服务器状态:如果上传到服务器,尝试确认服务器是否正常运行,可以联系服务器管理员或服务提供商来确认服务器状态。

三、什么是协议,什么是报文

要看你说的是什么协议咯,协议有

ATM协议即异步传输模式,ATM协议是以高速分组传送模式为主,综合电路传输模式优先的一种宽带传输模式。

BGP协议 BGP协议即边界网关协议,BGP协议是不同自治系统路由器之间进行通信的外部网关协议

DHCP协议主要用在路由器中给局域网各主机分配IP

DNS协议域名系统(服务)协议

DSL协议高速数字用户线,已经是历史了

EIGRP协议增强的内部网关路由选择协议

FDDI协议 FDDI(光纤分布数据接口)是目前成熟的LAN技术中传输速率最高的一种

FTP协议地球人都知道

HTTP协议地球人都知道

IGRP协议 IGRP(Interior Gateway Routing Protocol)是一种动态距离向量路由协议,它由Cisco公司八十年代中期设计。使用组合用户配置尺度,包括延迟、带宽、可靠*和负载。

IPV6协议目前的全球因特网所采用的协议族是TCP/IP协议族。IP是TCP/IP协议族中网络层的协议,是TCP/IP协议族的核心协议。目前IP协议的版本号是4(简称为IPv4,v是version——版本),它的下一个版本就是IPv6。IPv6正处在不断发展和完善的过程中,它在不久的将来将取代目前被广泛使用的IPv4。

MPLS协议 MPLS(Multi-Propocol Label Switching)即多协议标记*。

I*协议 I*协议是Novell NetWare自带的最底层网络协议,主要用来控制局域网内或局域网之间数据包的寻址和路由,只负责数据包在局域网中的传送,并不保证消息的完整*,也不提供纠错服务。

OSPF协议 OSPF(Open Shortest Path First)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决策路由。

POP3协议 POP即为 Post Office Protocol的简称,是一种电子邮局传输协议,而 POP3是它的第三个版本

PPP协议 PPP协议中提供了一整套方案来解决链路建立、维护、拆除、上层协议协商、认证等问题。

RIP协议距离向量路由协议。

SMTP协议 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源到目的传送邮件的规则,由它来控制信件的中转方式。

SNMP协议简单网络管理协议(SNMP)首先是由Inter工程任务组织(Inter Engineering Task Force)(IETF)的研究小组为了解决Inter上的路由器管理问题而提出的。它可以在IP,I*,AppleTalk,OSI以及其他用到的传输协议上被使用。

TCP/IP协议 TCP/IP(Transmission Control Protocol/Inter Protocol的简写,中文译名为传输控制协议/互联网络协议)协议是Inter最基本的协议,简单地说,就是由底层的IP协议和TCP协议组成的。

TELNET协议用于远程登录

TFTP协议 TFTP全称为Trivial File Transfer Protocol,中文名叫简单文件传输协议。

UDP协议用户数据报协议是定义用来在互连网络环境中提供包*的计算机通信的协议。

VLAN协议 VLAN是为解决以太网的广播问题和安全*而提出的一种协议,它在以太网帧的基础上增加了VLAN头

VOIP协议 VoIP(Voice over Inter Protocol)是一种以IP电话为主,并推出相应的增值业务的技术

WINS协议 WINS是Windows Inter Name Server(Windows网际名字服务)的简称。WINS为NetBIOS名字提供名字注册、更新、释放和转换服务,这些服务允许WINS服务器维护一个将NetBIOS名到IP的动态数据库,大大减轻了对网络交通的负担。

WLAN协议 WLAN是无线局域网的首字母缩写词。

以太网协议以太网协议有两种,一种是IEEE802.2/IEEE802.3,还有一种是以太网的封装格式。

WAP(无线通讯协议)是在数字移动电话、互联网或其他个人数字助理机(PDA)、计算机应用乃至未来的信息家电之间进行通讯的全球*开放标准。

ICMP是“Inter Control Message Protocol”(Inter控制消息协议)的缩写。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。

我对报文的理解:

报文=数据块

RFC 791