数据包,数据报文,数据帧之间的关系
一、数据帧(Frame):数据链路层,传递的单位是frame 帧,就是数据链路层的协议数据单元,包括三部分1、帧头,里面有mac地址,通过这个地址可以在底层的交换机这个层面里顺着网线找到你的计算机。2、数据部分,ip数据包,意思是使用ip地址定位的一个数据包。3、帧尾。其中,帧头和帧尾包含一些必要的控制信息,比如同步信息、地址信息、差错控制信息等;数据部分则包含网络层传下来的数据,比如ip数据包。二、数据包(Packet):TCP/IP协议通信传输中的数据单位,处于网络层,在局域网中,“包”是包含在“帧”里的。packet是整个tcpip通信协议里网络层的传输单位,也是最小的单位。有着目的地的ip地址及其来源的ip地址和其他的校验信息。它也被称为头。来自传输层托付给自己待传送的信息。这个信息会被分成多个ip数据包发送出去。所以网络层传递的是ip包,ip包里是待传输消息的一部分。三、数据报(Datagram):现在来到传输层了,传输层直接接受来自你的消息,小到给朋友发个晚安,大到给别人传递个文件,只要提供对方的ip地址(还有端口号),其它的都交给传输层帮助实现。这两种协议都会在发送前把你的消息拆分成多个ip数据包来传输。udp英文就叫 user datagram protocol。所以数据报是啥,就是带地址的消息。扩展资料:1、据报是不能比数据帧大的,数据帧根据不同网络(无线有线)长度会有所区别,数据包(一块数据)进行为网络层传输时会进行判别,如果长过是网络层要进行分片,成为数据报。2、假设要传输一个UDP数据包,以太网的MTU为1500字节,一般IP首部为20字节,UDP首部为8字节,数据的净荷(payload)部分预留是1500-20-8=1472字节。如果数据部分大于1472字节,就会出现分片现象。3、IP分片发生在IP层,不仅源端主机会进行分片,中间的路由器也有可能分片,因为不同的网络的MTU是不一样的,如果传输路径上的某个网络的MTU比源端网络的MTU要小,路由器就可能对IP数据报再次进行分片。而分片数据的重组只会发生在目的端的IP层。4、TCP:对于TCP数据,在建立连接的三次握手的过程中,连接双方会相互通告MSS(Maximum Segment Size,最大报文段长度),MSS一般是MTU—IP首部(20)—TCP首部(20),每次发送的TCP数据都不会超过双方MSS的最小值,所以就保证了IP数据报不会超过MTU,避免了IP分片。
数据发送时,由上层向下层封装, 四层,协议层传输的是数据报文,主要是协议格式。三层,网络层传输的是数据包,包含数据报文,并且增加传输使用的IP地址等三层信息二层,数据链路层传输的是数据帧,包含数据包,并且增加相应MAC地址与二层信息数据接收的时候,下层向上层解封装 具体区别就是所工作的层不同,可根据ISO七层模型或者TCP/IP四层模型理解

tcp数据包格式中没有包括的是
这也没有选项哇,不包括的东西有很多。TCP报文由首部和数据两部分组成。首部一般由20-60字节(Byte)构成,长度可变。其中前20B格式固定,后40B为可选。因为,TCP报文还得传给下层网络层,封装成IP包,而一个IP包最大长度为65535,同时IP包首部也包含最少20B,所以一个IP包或TCP包可以包含的数据部分最大长度为65535-20-20=65495B。TCP报文中数据部分是可选的,即TCP报文可以不包含数据(同理IP包也可以不包含数据)。不含数据的TCP报文通常是一些确认和控制信息类的报文,如TCP建立连接时的三次握手和TCP终止时的四次挥手等。1、源端口号(SourcePort)长度为16位,指明发送数据的进程。2、目的端口号(DestinationPort)长度为16位,指明目的主机接收数据的进程。3、序号(SequenceNumber)记录发送次数也称为序列号,长度为32位,序号用来标识从TCP发送端向接入端发送的数据字节流进行编号,可以理解成对字节流的计数。4、确认号(AcknowledgementNumber)长度为32位,确认号包含发送确认的一端所期望收到的下一个序号。确认号只有在ACK标志为1时才有效。5、首部长度(数据偏移)长度为4位,用于表示TCP报文首部的长度。用4位(bit)表示,十进制值就是[0,15],一个TCP报文前20个字节是必有的,后40个字节根据情况可能有可能没有。如果TCP报文首部是20个字节,则该位应是20/4=5。6、保留位(Reserved)长度为6位,必须是0,它是为将来定义新用途保留的。给QOS预留用的7、标志(CodeBits) 长度为6位,在TCP报文中不管是握手还是挥手还是传数据等,这6位标志都很重要。

TCP三次握手原理
本文主要内容1、TCP数据包格式TCP数据包格式如下:注意到中间还有几个标志位:数据包格式当中,最重要的是理解序号和确认序号。TCP为什么是稳定可靠的,与序号与确认序号这套机制紧密相关,这也是TCP的精髓。2、TCP的三次握手众所周知,TCP协议是可靠的,而UDP协议是不可靠的。在一些场景中必须用TCP,比如说用户登录,必须给出明确答复是否登录成功等。而有些场景中,用户是否接收到数据则不那么关键,比如网络游戏当中,玩家射出一颗子弹,另外的玩家是否看到,完全取决于当前网络环境,如果网络卡顿,就会有玩家已经被射杀,但界面仍然刷新不出来的情况。这种情形适合UDP。为了保证TCP协议可靠,在建立连接之时就要得到保证。最初两端的TCP进程都处于CLOSED关闭状态,A主动打开连接,而B被动打开连接。(A、B关闭状态CLOSED——B收听状态LISTEN——A同步已发送状态SYN-SENT——B同步收到状态SYN-RCVD——A、B连接已建立状态ESTABLISHED)B服务器进程就处于LISTEN(收听)状态,等待客户的连接请求。若有,则作出响应。3、TCP的传输和确认TCP 传输的可靠性,可以用一句话归结:每收到对方数据,就发送 ACK 进行确定,发送方发送后没有收到 ACK 就隔一段时间重发。就是 A 向 B 发送消息(下面将 TCP 的报文直接看做是消息,消息一词跟 TCP 报文混用),B 收到消息后需要向 A 发送 ACK。这个 ACK 相当于返回结果,没有返回结果,A 就重新发送消息。归纳起来,A 有 3 种消息需要确认。另外 A 也可以发送 RST 消息,代表出错了。出错消息不需要确认。RST 也可以当成返回接口,替代正常的 ACK。返回 ACK,表示消息发送并处理成功,返回 RST 表示消息处理失败。因为通过网络传输,还有第三种结果,就是不确定成功失败。这样归纳起来。就有三种返回结果。这两种具体情况,A 根本识别不了,都只能重发。4、TCP的序号和确认序号A 向 B 发送消息,假如同时发送 a、b、c、d 消息,因为通过网络,这些消息的顺序并非固定的。而 B 返回 ACK 结果,这样就有一个问题,这个结果到底对应了哪个消息?另外当 A 超时重发后,原来的消息延时一段时候,又重新到达了 B,这样 B 就收到两条相同的消息,那么 B 怎么确定这两条消息是相同的呢?为了解决这个对应问题,每一条消息都需要有一个编号,返回结果也应该有一个编号。TCP 的序号可以看成是发送消息的编号,确认序号可以看成是返回结果的编号。有了编号,重复的消息才可以忽略,返回结果(ACK)才可以跟消息对应起来。当建立连接的时候,TCP 选定一个初始序号,之后每发送一个数据包(消息),就将序号递增,保证每发送不同的数据包,数据包的序号都是不同的。TCP 是这样处理的:SYN、FIN 也需要递增序号。不然 A 向 B 重发多个 SYN 或者 FIN, B 根本判断不了 SYN 是否相同,这样就不可以忽略重复的数据包了。当 TCP 发送 ACK 时,相当于返回结果,需要带有确认序号,以便跟发送的消息对应起来。当发送包编号为 a,递增长度为 len。其中 SYN 和 FIN 可以看成是递增长度为 1。这条消息可以这样表示为:现在来回顾三次握手过程。 A 发送序列号x给 B , B 回复 A 确认号 x+ 1,同时发送序列号 y, A 接收到 B 的回复后,再回复确认号 y+1,同时发送序列号 x+1。给对方的回复一定是接收到的序号加1(或者是数据长度),这样对方才能知道我已经收到了,这样才能保证TCP是可靠的。

tcp的三次握手和举例
TCP三次握手 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送)FIN(finish结束) RST(reset重置) URG(urgent紧急)Sequence number(顺序号码) Acknowledge number(确认号码)第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;第二次握手:主机B收到请求后要确认联机信息,向A发送acknumber=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送acknumber=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。 完成三次握手,主机A与主机B开始传送数据。
在一个月黑风高的夜晚,快要到如家酒店门口时,对面刚好走过来一位小姐姐 ,此时你向小姐姐打招呼(syn),然后对方点头并且微笑向你招手(ack+syn),但是小姐姐有点害羞以为你在和别人打招呼,又向你做出了回应,于是乎你大声喊到美女就是我(ack),然后你们就过上一家三口的日子!
TCP需要三次握手才能建立连接,那么为什么需要三次握手呢?

TCP三次握手,通过抓包工具抓到三次握手过程,抓到的包里TCP首部长度等于28(field value=7)这个是什么意
field value的意思是首部的长度,这里是以4个字节为单位的,所以4*7刚好就是28个字节了,5*4=20个字节了
楼上正解,接楼上的往下说: TCP三次握手前两个报文需要指出MSS(最大报文长度),这个字段是在TCP选项字段里的,TCP报头由基本20字节和选项字段组成,所以前两个带SYN标志的报文都比20个字节大,至于究竟有多大,要看除了通告MSS之外还有没有使用其他的选项,如seletive ACK, 窗口扩大因子等。后续传输数据的TCP报文一般头长度都是二十字节(如果没有一些扩展选项被使用) 应用程序通过头长度来得知从哪一块起是TCP数据,如果这个指定错误,应用程序无法对数据正确处理。不能更改头长度值。查看一下TCP报头结构,你自然就知道怎么计算了。

本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/46627.html。