TCP首部
TCP和UDP的区别及各自优缺点区别
TCP和UDP的区别及各⾃优缺点区别区别⼀、是否基于连接TCP是⾯向连接的协议,⽽UDP是⽆连接的协议。
即TCP⾯向连接;UDP是⽆连接的,即发送数据之前不需要建⽴连接。
区别⼆、可靠性和有序性区别TCP 提供交付保证(Tcp通过校验和,重传控制,序号标识,滑动窗⼝、确认应答实现可靠传输),⽆差错,不丢失,不重复,且按序到达,也保证了消息的有序性。
该消息将以从服务器端发出的同样的顺序发送到客户端,尽管这些消息到⽹络的另⼀端时可能是⽆序的。
TCP协议将会为你排好序。
UDP不提供任何有序性或序列性的保证。
UDP尽最⼤努⼒交付,数据包将以任何可能的顺序到达。
TCP的逻辑通信信道是全双⼯的可靠信道,UDP则是不可靠信道区别三、实时性UDP具有较好的实时性,⼯作效率⽐TCP⾼,适⽤于对⾼速传输和实时性有较⾼的通信或⼴播通信。
区别四、协议⾸部⼤⼩TCP⾸部开销20字节; UDP的⾸部开销⼩,只有8个字节。
区别五、运⾏速度TCP速度⽐较慢,⽽UDP速度⽐较快,因为TCP必须创建连接,以保证消息的可靠交付和有序性,毕竟TCP协议⽐UDP复杂。
区别六、拥塞机制UDP没有拥塞控制,因此⽹络出现拥塞不会使源主机的发送速率降低(对实时应⽤很有⽤,如IP电话,实时视频会议等)区别七、流模式(TCP)与数据报模式(UDP);TCP⾯向字节流,实际上是TCP把数据看成⼀连串⽆结构的字节流;UDP是⾯向报⽂的。
区别⼋、资源占⽤TCP对系统资源要求较多,UDP对系统资源要求较少。
TCP被认为是重量级的协议,⽽与之相⽐,UDP协议则是⼀个轻量级的协议。
因为UDP传输的信息中不承担任何间接创造连接,保证交货或秩序的的信息。
这也反映在⽤于承载元数据的头的⼤⼩。
区别九、应⽤每⼀条TCP连接只能是点到点的;UDP⽀持⼀对⼀,⼀对多,多对⼀和多对多的交互通信。
基于UDP不需要建⽴连接,所以且适合多播的环境,UDP是⼤量使⽤在游戏和娱乐场所。
优缺点基于上⾯的区别;TCP和UDP的优缺点也很明显了。
数据包报文格式(IP包TCP报头UDP报头)
数据包报文格式(IP包TCP报头UDP报头)一、IP包格式IP数据包是一种可变长分组,它由首部和数据负载两部分组成。
首部长度一般为20-60字节(Byte),其中后40字节是可选的,长度不固定,前20字节格式为固定。
数据负载部分的长度一般可变,整个IP数据包的最大长度为65535B。
1、版本号(Version)长度为4位(bit),IP v4的值为0100,IP v6的值为0110。
2、首部长度指的是IP包头长度,用4位(bit)表示,十进制值就是[0,15],一个IP包前20个字节是必有的,后40个字节根据情况可能有可能没有。
如果IP包头是20个字节,则该位应是20/4=53、服务类型(Type of Service TOS)长度为8位(bit),其组成:前3位为优先级(Precedence),后4位标志位,最后1位保留未用。
优先级主要用于QoS,表示从0(普通级别)到7(网络控制分组)的优先级。
标志位可分别表示D(Delay更低的时延)、T(Throughput 更高的吞吐量)、R(Reliability更高的可靠性)、C(Cost 更低费用的路由)。
TOS只表示用户的请求,不具有强制性,实际应用中很少用,路由器通常忽略TOS字段。
4、总长度(Total Length)指IP包总长度,用16位(bit)表示,即IP包最大长度可以达216=65535字节。
在以太网中允许的最大包长为1500B,当超过网络允许的最大长度时需将过长的数据包分片。
5、标识符(Identifier)长度为16位,用于数据包在分段重组时标识其序列号。
将数据分段后,打包成IP 包,IP包因走的路由上不同,会产生不同的到达目地的时间,到达目地的后再根据标识符进行重新组装还原。
该字段要与标志、段偏移一起使用的才能达到分段组装的目标。
6、标志(Flags)长度为3位,三位从左到右分别是MF、DF、未用。
MF=1表示后面还有分段的数据包,MF=0表示没有更多分片(即最后一个分片)。
TCP报头概述
TCP报头结构TCP协议头最少20个字节,包括以下的区域:源端口和目的端口我们知道,网络实现的是不同主机的进程间通信。
在一个操作系统中,有很多进程,当数据到来时要提交给哪个进程进行处理呢?这就需要用到端口号。
在TCP头中,有源端口号(Source Port)和目标端口号(Destination Port)。
TCP与UDP段结构中端口地址都是16比特,可以有在0---65535范围内的端口号。
对于这65536个端口号有以下的使用规定:(1)端口号小于256的定义为常用端口,服务器一般都是通过常用端口号来识别的。
任何TCP/IP实现所提供的服务都用1---1023之间的端口号,是由ICANN来管理的;(2)客户端只需保证该端口号在本机上是惟一的就可以了。
客户端口号因存在时间很短暂又称临时端口号;(3)大多数TCP/IP实现给临时端口号分配1024---5000之间的端口号。
大于5000的端口号是为其他服务器预留的。
源端口(Source Port):16位。
源端口号标识了发送主机的进程。
目的端口(Destination port):16位。
目标端口号标识接受方主机的进程。
序列号和确认号例如,pc1向pc2发送数据,该数据为5000字节,该数据到达传输层,使用tcp传输会给每个字节加一个序列号,序列号是从0-2^32之间随机产生的。
比如该报文的第一个字节的序列号为x,第二个字节的序列号就是x+1,最后一个字节的编号就是x+4999。
传输层在传送数据时如果数据比较大会进行分段传送,假设,100个字节分一个片段,那么第一个片段的第一个字节序列号肯定是X,最后一个字节的序列号就是x+99,那么就用X来表示该报文片段。
第二个报文片段的序列号范围是X+100-----X+199,用X+100代表第二个报文片段。
以此类推,第三个X+200---X+299。
当接收方收到第一个报文片段后,如果接受方正确的收到了第一个报文段就会发送一个确认,确认的目的就是表示准确的收到了一个报文,并通知发送方希望继续接受下一个报文段的序号。
TCP&UDP报文格式
TCP/UDP报文格式TCP 协议为终端设备提供了面向连接的、可靠的网络服务,UDP 协议为终端设备提供了无连接的、不可靠的数据报服务。
从上图我们可以看出,TCP 协议为了保证数据传输的可靠性,相对于UDP 报文,TCP 报文头部有更多的字段选项。
首先让我们来看一下TCP 的报文头部主要字段:每个TCP 报文头部都包含源端口号(source port)和目的端口号(destination port),用于标识和区分源端设备和目的端设备的应用进程。
在TCP/IP 协议栈中,源端口号和目的端口号分别与源IP 地址和目的IP 地址组成套接字(socket),唯一的确定一条TCP 连接。
序列号(Sequence number)字段用来标识TCP 源端设备向目的端设备发送的字节流,它表示在这个报文段中的第一个数据字节。
如果将字节流看作在两个应用程序间的单向流动,则TCP 用序列号对每个字节进行计数。
序列号是一个32bits 的数。
既然每个传输的字节都被计数,确认序号(Acknowledgement number,32bits)包含发送确认的一端所期望接收到的下一个序号。
因此,确认序号应该是上次已成功收到的数据字节序列号加1。
TCP 的流量控制由连接的每一端通过声明的窗口大小(windows size)来提供。
窗口大小用数据包来表示,例如Windows size=3, 表示一次可以发送三个数据包。
窗口大小起始于确认字段指明的值,是一个16bits 字段。
窗口大小可以调节。
校验和(checksum)字段用于校验TCP 报头部分和数据部分的正确性。
最常见的可选字段是MSS(Maximum Segment Size,最大报文大小)。
MSS指明本端所能够接收的最大长度的报文段。
当一个TCP 连接建立时,连接的双方都要通告各自的MSS 协商可以传输的最大报文长度。
我们常见的MSS有1024(以太网可达1460 字节)字节。
TCP头部选项功能详解
TCP 头部选项功能详解TCP头部的选项部分是TCP为了适应复杂的网络环境和更好的服务应用层而进行设计的。
TCP选项部分最长可以达到40byte,再加上TCP选项外的固定的20byte字节部分,TCP的最长头部可达60byte。
TCP头部长度可以通过TCP头部中的“数据偏移”位来查看。
(值得注意的是TCP偏移量的单位是32位,也就是4byte。
而TCP偏移量共占4bit位,取最大的1111 计算也就是十进制的15。
15*4byte=60byte,这个也是TCP的首部不超过60byte的原因。
)大多数的TCP选项部分出现在TCP连接建立阶段,也就是TCP的三次握手数据包中。
当然有些选项也会出现在已经建立连接的session中,不过此种情况较少出现。
TCP选项部分占有的位数必须是8bit的倍数,这也就是说,即使出现我们应用的选项部分为4bit,但也必须使用4bit的垫片。
这样才符合RFC的要求TCP选项部分实际运用的有以下几种:最大报文传输段(Maximum Segment Size ---MSS)窗口扩大选项(window scaling )选择确认选项(Selective Acknowledgements --SACK)时间戳选项(timestamps)Nop下面是一个实际网络中选项部分使用齐全的一个数据包,如图解码部分:使用wireshark 做出解码的解释:下面我们详细看下每个选项的功能,和其主要用法等:MSSMSS 是TCP选项中最经常出现,也是最早出现的选项。
MSS选项占4byte。
MSS是每一个TCP报文段中数据字段的最大长度,注意:只是数据部分的字段,不包括TCP的头部。
TCP在三次握手中,每一方都会通告其期望收到的MSS(MSS只出现在SYN数据包中)如果一方不接受另一方的MSS值则定位默认值536byte。
MSS值太小或太大都是不合适。
太小,例如MSS值只有1byte,那么为了传输这1byte 数据,至少要消耗20字节IP头部+20字节TCP头部=40byte,这还不包括其二层头部所需要的开销,显然这种数据传输效率是很低的。
图解TCP建立连接全过程
CP客户端,B是服务端。最初两端的TCP进程都处于 CLOSED状态。图中在主机下面的是TCP进程所处的状态。 A是主动打开连接,B是被动打开连
接。 首先A向B发出连接请求报文段,这时首部中的同步位 SYN=1,同时选择一个初始序号seq=x。TCP规定,SYN报 文段不能携带数据,但
要消耗掉一个序号。这时,A进入SYN-SENT状态。 B收到请求后,向A发送确认。在确认报文段中把SYN和 ACK位都置为1,确认号是ack
=x+1,同时也为自己选择一个初始序号seq=y。请注意,这 个报文段也不能携带数据,但同样要消耗掉一个序号。 这时B进入SYN-RCVD状态。
A收到B的确认后,还要向B给出确认。确认报文段的ACK 置为1,确认号ack=y+1,而自己的序号seq=x+1。这时, TCP连接已经建立
Hale Waihona Puke 发出的第一个请求报文段并未丢失,而是在某个网络节 点长时间滞留了,以致延误到连接释放以后的某个时间 才到达B。本来这是一个早已失效的报文段。但B
收到此失效的连接请求报文段后,就误以为A又发了一次 新的连接请求,于是向A发出确认报文段,同意建立连接。 假如不采用三次握手,那么只要B发出确认
,新的连接就建立了。 由于A并未发出建立连接的请求,因此不会理睬B的确认, 也不会向B发送数据。但B却以为新的运输连接已经建立 了,并一直等待
,A进入ESTABLISHED状态,当B收到A的确认后,也会进 入ESTABLISHED状态。 以上给出的连接建立过程就是常说的TCP三次握
手。 为什么A还要发送一次确认呢?这主要是为了防止已失效 的连接请求报文段突然又传送到了B,因而产生错误。 所谓已失效的连接请求报文段是这
TCP包头格式详解
TCP包头格式详解⼀般来说,⽹络编程我们只需要调⽤⼀些封装好的函数或者组件就能完成⼤部分的⼯作,但是⼀些特殊的情况下,就需要深⼊的理解⽹络数据包的结构,以及协议分析。
如:⽹络监控,故障排查等……IP包是不安全的,但是它是互联⽹的基础,在各⽅⾯都有⼴泛的应⽤。
由IP协议衍⽣的协议族有10数种(据我所知),以后还会出现更多的基于IP的协议…先从实际出发吧!⼀般我们在谈上⽹速度的时候,专业上⽤带宽来描述,其实⽆论说⽹速或者带宽都是不准确的,呵呵。
⽐如:1兆,512K……有些在学校的学⽣,也许会有疑问,明明我的业务是1M,为什么下载速度到100K就飙不上去了?512K的为什么50多K就封顶了?…这⾥所说的1M是指1Mbps = 1 Million Bits Per Second,也就是1M⽐特每秒,即⼀秒钟传输1048576个⼆进制位。
我们知道⼀个字节是8个⼆进制位。
好,⼜来问题了。
即便这样⼦,1M=1048756÷8=131072÷1024=128K。
那也应该有128K啊,为什么下载速度还是很少到120K,110K都谢天谢地了。
看完本⽂,你的帐就对了……IP数据包结构:如图,⼀个刻度表⽰1个⼆进制位(⽐特)。
1-1.版本4位,表⽰版本号,⽬前最⼴泛的是4=B1000,即常说的IPv4;相信IPv6以后会⼴泛应⽤,它能给世界上每个纽扣都分配⼀个IP地址。
1-2.头长4位,数据包头部长度。
它表⽰数据包头部包括多少个32位长整型,也就是多少个4字节的数据。
⽆选项则为5(红⾊部分)。
1-3.服务类型,包括8个⼆进制位,每个位的意义如下:过程字段:3位,设置了数据包的重要性,取值越⼤数据越重要,取值范围为:0(正常)~ 7(⽹络控制)延迟字段:1位,取值:0(正常)、1(期特低的延迟)流量字段:1位,取值:0(正常)、1(期特⾼的流量)可靠性字段:1位,取值:0(正常)、1(期特⾼的可靠性)成本字段:1位,取值:0(正常)、1(期特最⼩成本)保留字段:1位,未使⽤1-4.包裹总长16位,当前数据包的总长度,单位是字节。
TCP传输机制
TCP传输机制简介摘要:传输层是计算机网络中重要的一层,它负责连接下层物理结构和上层的应用程序,TCP协议是运输层的重要协议之一,本文对TCP协议做一个简单的介绍,然后为了介绍TCP传输机制,首先介绍TCP报文段的结构,而后介绍TCP协议可靠传输的实现方法以及TCP协议的流量控制和TCP协议的拥塞控制,最后介绍TCP协议整个的传输过程,从连接的建立一直到连接的释放。
关键词:TCP协议;TCP报文段;流量控制;拥塞控制1 引言运输层是整个网络体系结构中的关键层次之一,为应用进程之间提供端到端的逻辑通信。
TCP(Transport Control Protocol,传输控制协议)协议是运输层两个重要的协议之一(另一个是UDP协议)。
它是提供面向连接的服务,为用户提供一条可靠的通信信道,这在一些场合(比如说文件传输,电子邮件等)中是必须的。
本文对TCP协议做一个简要的介绍,重点叙述TCP报文的结构以及TCP是如何实现可靠传输的,包括流量控制和拥塞控制,帮助初学者更好的了解TCP传输机制。
2 TCP协议概述传输控制协议TCP是运输层的重要协议之一,当运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的(只是提供尽最大努力服务),但这种逻辑通信信道就相当于一条全双工的可靠信道。
它提供一种点对点的面向连接的服务,在传输数据之前必须先建立连接,数据传输结束后要释放连接。
TCP不提供广播或多播服务。
由于TCP要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多开销,如确认、流量控制、计时器以及连接管理等。
这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。
TCP提供可靠的交互服务的含义是,通过TCP连接传送的数据,无差错、不丢失、不重复、并且按序到达。
TCP提供全双工通信的含义是,TCP允许通信双方的应用进程在任何时候都能发送数据。
TCP连接的两端都设有发送缓存和接受缓存,在发送时将数据发送到缓存中,而后TCP在合适的时候将数据发送出去;接受时将数据先存入缓存中,上层的程序在合适的时候读取缓存中的数据进行处理。
TCP首部格式
TCP⾸部格式《图解TCP/IP》 6.7 TCP的⾸部格式TCP中没有表⽰包长度和数据长度的字段。
可由IP层获知TCP的包长由TCP的包长可知数据的长度。
源端⼝号:表⽰发送端端⼝号,字段长16位。
⽬标端⼝号:表⽰接收端端⼝号,字段长度16位。
序列号:字段长32位。
序列号是指发送数据的位置。
每发送⼀次数据,就累加⼀次该数据字节数的⼤⼩。
序列号不会从0或1开始,⽽是在建⽴连接时由计算机⽣成的随机数作为其初始值,通过SYN包传给接收端主机。
然后再将每转发过去的字节数累加到初始值上表⽰数据的位置。
此外,在建⽴连接和断开连接的时发送的SYN包和FIN包虽然并不携带数据,但是也会作为⼀个字节增加对应的序列号。
确认应答号:确认应答号字段长度为32位。
是指下⼀次应该收到的数据的序列号。
实际上,它是指已收到确认应答号减⼀为⽌的数据。
发送端接收到这个确认应答号以后可以认为在这个序列号以前的数据都已经被正常接收。
数据偏移:该字段表⽰TCP所传输的数据部分应该从TCP包的哪个位开始,当然也可以把它看做TCP⾸部的长度。
该字段长4位,单位为4字节(32位)。
保留:该字段主要是为了以后扩展时使⽤,其长度为4位,⼀般设置为0,但即使收到的包在该字段不为0,此包也不会被丢弃。
控制位:字段长为8位,每⼀个从左到⾄右分别为CWR,ECE,URG,ACK,PSH、RST、SYN、FIN。
这些控制标志也叫作控制位。
当它们对应位上的值为1时,具体含义如CWR(Congestion Window Reduced):CWR标志与后⾯的ECE标志⽤于IP⾸部的ECN字段。
ECE标志为1时,则通知对⽅将拥塞窗⼝变⼩。
ECE(ECN-Echo):ECE标志表⽰ECN-Echo。
置为1会通知通信对⽅,从对⽅到这边的⽹络有拥塞。
在收到数据包的IP⾸部中ECN为1时将TCP⾸部中的ECE设置为1。
URG(Urgent Flag):该为为1时,表⽰包中有需要紧急处理的数据。
【知识详解】传输层详解(秋招总结)
【知识详解】传输层详解(秋招总结)传输层详解⽬录1.传输层概述1.1 概述TCP⾪属于传输层,所以要⾸先明⽩传输层的作⽤是什么,传输层能够实现端到端的连接。
⽐如说我们⽤QQ与别⼈发信息,⽹络层能够将信息发送到对⽅的主机上,主机上使⽤什么协议来接受这个信息就由传输层来完成,所以传输层实现的是进程到进程间的连接。
传输层提供的是应⽤程序间的逻辑通信,也就是说它向⾼层(应⽤层)屏蔽了下⾯⽹络层的细节,使应⽤程序看起来好像是在传输层之间沿着⽔平⽅向传输数据,但事实上两者之间并没有这样⼀条实际的物理连接。
1.2 功能1.⽹络层提供了点到点的连接,⽽传输层提供了端到端的服务,也就是进程间的通信;2.⽹络层提供的是不可靠的连接,传输层能够实现可靠的传输;1.3 协议TCP(Transmission Control:Protocol) 传输控制协议UDP(User Datagram Protocol) ⽤户数据报协议1.4 传输层和应⽤层的关系1.4.1 端⼝TCP/IP传输层⽤⼀个16位端⼝号(0~65535)来标识⼀个端⼝,但是注意,端⼝号只具有本地意义,不同计算机的相同端⼝号没有关联,0⼀般不⽤,所以允许有65535个不同的端⼝号。
两个计算机的进程要实现通信,不仅必须知道对⽅的IP地址(为了找到对⽅的计算机),⽽且还要知道对⽅的端⼝号(为了找到对⽅计算机中的应⽤程序)问:怎么理解端⼝?在⽹络技术中,端⼝(Port)⼤致有两种意思:1.硬件端⼝,也就是设备间交互的接⼝,是物理意义上的端⼝,⽐如集线器,交换机等设备的接⼝;2.软件端⼝,指的是应⽤层的的进程和运输层进⾏层间交互的⼀种地址,是逻辑意义上的端⼝,⼀般指的是TCP/IP协议中的端⼝。
正是这种端⼝,所有传输层实现的是端到端的通信;在TCP/IP协议中,⽤"源IP地址、⽬的IP地址、源端⼝号、⽬的端⼝号、协议号"这五部分组成⼀个套接字,来标识⼀次通信;⼀个进程可以绑定多个端⼝号,因为⼀个进程可以有很多线程或者说是⼦进程等,这每⼀个都对应⼀个端⼝号,所以⼀个进程可以绑定多个端⼝号;但是⼀个端⼝号不可以被多个进程绑定,每⼀个端⼝号都与唯⼀的进程对应,if有多个了,那通信不就乱了套了吗;⼀个端⼝号⼀个进程,⼀个进程可以多个端⼝;端⼝号分类公认端⼝:0~1023,明确与某种服务绑定,⽐如各种协议;注册端⼝:1024~65535:松散的绑定⼀些服务,也就是有许多服务绑定这些端⼝。
TCP协议简述
TCP协议简述TCP(传输控制协议)提供的了一种可靠的数据流服务,采用“带重传的确认”技术来实现传输的可靠性。
一、TCP协议中涉及了诸多规则来保障通信链路的可靠性,主要有以下几点:1、面向连接。
2、将应用层的数据分割成最适合发送的数据块。
3、重传机制。
规定时间内未收到确认包,重传数据。
4、对首部和数据进行校验。
5、对收到的数据进行排序,然后交给应用层,丢弃重复的数据。
6、还提供流量控制。
二、TCP包的首部1、16bit源端口号和16bit目的端口号用于寻找发送端和接收端的进程,通过端口号和IP地址,可以唯一确定一个TCP连接。
2、序号是用来标识从TCP发端向TCP接收端发送的数据序号。
3、确认序号包含发送确认的一端所期望收到的下一个序号,因此,确认序号是上次已经成功收到数据序号加1.4、首部长度指出了TCP首部的长度值,若不存在选项,则这个值为20字节。
5、标志位(flag)标志位为1时,表示相对应的位有效。
URG: 紧急指针有效;ACK:确认序号有效;PSH:接收方应尽快将这个报文段交给应用层;RST:重建连接; SYN:同步序号用来发起一个连接;FIN:发端完成发送任务(主动关闭);三、连接的建立与释放1、连接建立建立一个TCP连接,必须经历三次握手过程,其中发送第一个SYN的一端将执行主动打开,接收这个SYN并发回下一个SYN的另一端执行被动打开。
2、连接终止要释放一个TCP连接,需要通过四次握手过程,这是由TCP的半关闭特性造成的,因为TCP连接时全双工的,因此,需要TCP两端要单独执行关闭。
值得注意的是,主动关闭的一端在发送FIN之后,依然还能正常接收对方的数据,只是通知对方它已经没有数据需要发送了。
同理,被动关闭的一端在收到FIN之后,仍然可以发送数据,直到它自身同样发出FIN之后,才停止发送数据。
一文彻底搞懂TCP三次握手、四次挥手过程及原理
⼀⽂彻底搞懂TCP三次握⼿、四次挥⼿过程及原理TCP 协议简述TCP 提供⾯向有连接的通信传输,⾯向有连接是指在传送数据之前必须先建⽴连接,数据传送完成后要释放连接。
⽆论哪⼀⽅向另⼀⽅发送数据之前,都必须先在双⽅之间建⽴⼀条连接。
在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握⼿进⾏初始化的。
同时由于TCP协议是⼀种⾯向连接的、可靠的、基于字节流的运输层通信协议,TCP是全双⼯模式,所以需要四次挥⼿关闭连接。
TCP包⾸部⽹络中传输的数据包由两部分组成:⼀部分是协议所要⽤到的⾸部,另⼀部分是上⼀层传过来的数据。
⾸部的结构由协议的具体规范详细定义。
在数据包的⾸部,明确标明了协议应该如何读取数据。
反过来说,看到⾸部,也就能够了解该协议必要的信息以及所要处理的数据。
包⾸部就像协议的脸。
所以我们在学习TCP协议之前,⾸先要知道TCP在⽹络传输中处于哪个位置,以及它的协议的规范,下⾯我们就看看TCP⾸部的⽹络传输起到的作⽤:下⾯的图是TCP头部的规范定义,它定义了TCP协议如何读取和解析数据:TCP⾸部承载这TCP协议需要的各项信息,下⾯我们来分析⼀下:TCP端⼝号TCP的连接是需要四个要素确定唯⼀⼀个连接:(源IP,源端⼝号)+ (⽬地IP,⽬的端⼝号)所以TCP⾸部预留了两个16位作为端⼝号的存储,⽽IP地址由上⼀层IP协议负责传递源端⼝号和⽬地端⼝各占16位两个字节,也就是端⼝的范围是2^16=65535另外1024以下是系统保留的,从1024-65535是⽤户使⽤的端⼝范围TCP的序号和确认号:32位序号 seq:Sequence number 缩写seq ,TCP通信过程中某⼀个传输⽅向上的字节流的每个字节的序号,通过这个来确认发送的数据有序,⽐如现在序列号为1000,发送了1000,下⼀个序列号就是2000。
32位确认号 ack:Acknowledge number 缩写ack,TCP对上⼀次seq序号做出的确认号,⽤来响应TCP报⽂段,给收到的TCP报⽂段的序号seq 加1。
第12章-TCP协议
比特 0
8
源 端 口
16
24
目 的 端 口
31
TCP 首部
MSS (Maximum Segment Size) 序 号 是 TCP 报文段中的数据字段的最大长度。 20 字节 数据字段加上 TCP 首部 确 认 号 固定 首部 才等于整个的 TCP 报文段。 U A P R S F 数据
偏移 保 留
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部
检 验 和
选
项
(长 度 可 变)
填
充
源端口和目的端口字段——各占 2 字节。端口是传输 层与应用层的服务接口。传输层的复用和分用功能都 要通过端口才能实现。
位0
8
源 端 口
16
24
目 的 端 口
31
序 号 TCP 首部 确 数据 偏移 保 留 认 号 窗 口 紧 急 指 针
第12章 传输控制协议(TCP)
课程目标 TCP协议概述
TCP的报文格式
TCP连接的管理
TCP的流量控制机制
TCP的差错控制机制
TCP的拥塞控制机制
第12章 传输控制协议
1.1 UDP协议回顾
第12章 传输控制协议(TCP)
1.2 TCP协议概述
为应用进程提供可靠的、端到端的、面向连接的字 节流通信的协议,由RFC793正式定义。 特点:
位0
8
源 端 口
16
24
目 的 端 口
31
序 号 TCP 首部 确 数据 偏移 保 留 认 号 窗 口 紧 急 指 针
U A P R S F R C S S Y I G K H T N N
传输层报文格式大全
file:///C:/Users/ly/AppData/Local/Temp/~hh2ABC.htm
2016/1/13
传输层
Page 2 of 35
ACK
1比特
PSH
1比特
RST
1比特
SYN
1比特
FIN
1比特
Window
16比特
Checksum
16比特
Urgent Pointer 16比特
Options
SCTP可以看作OSI层次结构中的传输层,它的上层作为SCTP用户应用,下层为分组网络IP 层。
图1 SCTP所处的协议栈结构
SCTP报文格式
一个SCTP分组含了一个公共的分组头(Common Header)和若干数据块(Chunk),每个数 据块中既可以包含控制信息,也可以包含用户数据。
除了INIT、INIT ACK和SHUTDOWN COMPLETE数据块外,其他类型的多个数据块可以捆绑在一 个SCTP分组中,以满足对MTU大小的要求。当然,这些数据块也可以不与其他数据块捆绑在 一个分组中。如果一个用户消息不能放在一个SCTP分组中,这个消息可以被分成若干个数 据块。
图2 SCTP报文格式
file:///C:/Users/ly/AppData/Local/Temp/~hh2ABC.htm
2016/1/13
传输层
Page 12 of 35
字段
长度 描述
Source Port Number
16比 特的 无符 号整 数
源端口号,识别SCTP发送端点的SCTP端口号。接收方可以使用源 端口号、源IP地址、目的端口号和目的IP地址标识该SCTP分组所 属的偶联。
l 包含INIT数据块的分组中验证标签必须为0。 l 在包含SHUTDOWN-COMPLETE数据块且设置了T比特的分组中,
tcp首部格式
tcp首部格式
TCP首部是TCP报文的第一个部分,它包括以下字段:
1. 源端口 (16 位):发送端口号,用于标识发送方。
2. 目的端口 (16 位):接收端口号,用于标识接收方。
3. 序列号 (32 位):发送方发送的字节流的第一个字节的序号。
用于保证数据的有序传输。
4. 确认号 (32 位):期望收到的下一个字节的序号,用于确认收到数据。
5. 数据偏移 (4 位):指定 TCP 首部的长度。
因为 TCP 首部的长度是可变的,所以需要这个字段来指示实际的长度。
6. 保留 (6 位):保留字段,暂时没有使用。
7. 控制位 (6 位):TCP 报文的控制位,包括 URG、ACK、PSH、RST、SYN 和 FIN 六种标志位。
8. 窗口大小 (16 位):接收方能够接收的数据量的最大值,用于流量控制。
9. 校验和 (16 位):用于检测传输过程中是否有错误发生。
10. 紧急指针 (16 位):只有在 URG 标志位被设置时才有效,用于指示紧急数据在报文中的位置。
11. 选项 (可变长度):用于扩展 TCP 首部,包括最大段大小、时间戳等。
TCP 首部格式的总长度是 20 个字节,如果有选项字段,则长度会变长。
TCP 首部中的各个字段都是比特位的组合,需要按照网络字
节序进行传输和处理。
TCP报文段的首部格式
TCP报⽂段的⾸部格式TCP报⽂段的⾸部格式1.1.⾸部字段详解TCP⾸部包括20字节的固定⾸部部分及长度可变的其他选项,所以TCP⾸部长度可变。
20个字节⼜分为5部分,每部分4个字节32位,如图中的5⾏,每⾏表⽰32位。
在传输层,TCP报⽂段包括:TCP⾸部和TCP数据部分;在⽹络层,TCP报⽂段成为IP数据部分,加上IP⾸部组成IP数据报;在数据链路层,还要在IP数据报前⾯加上数据链路层的⾸部。
源端⼝和⽬的端⼝字段——各占 2 字节(16位)。
端⼝是运输层与应⽤层的服务接⼝。
运输层的复⽤和分⽤功能都要通过端⼝才能实现。
序号字段——占 4 字节。
TCP 连接中传送的数据流中的每⼀个字节都编上⼀个序号。
序号字段的值则指的是本报⽂段所发送的数据的第⼀个字节的序号。
⽐如分组的第⼀个数据包由⽂件的14个字节数据组成,那么该数据包所添加的序号就是1,同理第⼆个数据包由⽂件的59个字节数据组成,那么该数据包所添加的序号就是5;确认号字段——占 4 字节,是期望收到对⽅的下⼀个报⽂段的数据的第⼀个字节的序号。
⽐如接收端收到由⽂件14个字节数据+TCP⾸部组4个字节数据,返回的确认号为5,即告诉发送端下⼀次应该发送⽂件的第5个字节及其之后字节组成的数据包成的数据包后,删除⾸部提取1过来。
数据偏移(即⾸部长度)——占 4 位,它指出 TCP 报⽂段的数据起始处距离 TCP 报⽂段的起始处有多远,也就是TCP⾸部的长度。
“数据偏移”的单位是 32 位字(以 4 字节为计算单位),最⼤1111表⽰15x4=60个字节,即表⽰TCP⾸部最⼤长度为60个字节,因此“选项”部分最多40个字节。
保留字段——占 6 位,保留为今后使⽤,但⽬前应置为 0。
这⾥的六位⼆进制位,分别表⽰不同含义:紧急 URG —— 当 URG = 1 时,表明紧急指针字段有效。
它告诉系统此报⽂段中有紧急数据,应尽快传送(相当于⾼优先级的数据)。
即URG=1的数据包不⽤排队直接优先传输。
tcp首部结构
tcp首部结构
TCP(TransmissionControlProtocol)是一种可靠的传输协议,用于在网络中传输数据。
TCP的数据传输是基于连接的,这意味着在数据传输之前必须先建立连接,数据传输完成后再释放连接。
TCP协议的可靠性和连接性都是通过TCP首部结构来实现的。
TCP首部结构包括以下信息:
源端口号:发送方的端口号。
目的端口号:接收方的端口号。
序列号:在TCP连接中,每个传输的数据都有一个唯一的序列号,用来确定数据的先后顺序。
确认号:在完成数据传输后,接收方会发送一个确认消息,确认号是表示接收方已经成功接收到前面的数据,并期望接收下一段数据的序列号。
首部长度:TCP首部的长度,单位为4字节。
保留:8位保留字段,目前没有用途,必须设置为0。
控制位:用于控制TCP连接的状态,包括SYN(同步)位、ACK (确认)位、FIN(结束)位等。
窗口大小:TCP连接中接收方的缓冲区大小,用来控制数据流量。
校验和:用于验证TCP首部和数据的完整性。
紧急指针:用于指示紧急数据的位置,一般不使用。
选项:TCP选项,包括最大报文段长度、时间戳等。
TCP首部结构的设计非常精简,但却能够确保数据传输的可靠性
和连接性。
了解TCP首部结构可以帮助我们更好地理解TCP协议的工作原理。
TCP首部
TCP是TCP/IP协议族中非常复杂的一个协议。
它具有以下特点:1:面向连接的运输层协议。
在使用TCP协议之前,首先需要建立TCP连接。
传送数据完毕后,必须释放已经建立的TCP连接。
2:一条TCP连接有两个端点,连接是点对点的。
3:提供可靠交付的服务。
通过TCP连接传送的数据,不会出现差错不会丢失并且按序到达。
4:提供全双工通信。
TCP允许通信双方的应用程序进程在任何时候都能发送数据。
TCP连接的两端都设有缓存,分为发送缓存和接收缓存,用来临时存放双向通信的数据。
发送时,应用程序把数据传给TCP 的缓存后,就可以做自己的事情了。
TCP会在合适的时候把数据发送出去。
接收时,TCP把接收到的数据放入缓存,供上层的应用程序读取。
5:面向字节流。
虽然应用程序和TCP的交互是一次一个数据块,但TCP把应用程序交下来的数据看成一串无结构的字节流。
TCP对应用进程一次把多长的报文发送到TCP缓存中是不关心的。
TCP根据对方给出的窗口值和当前网络的拥塞程度决定一个报文段包含多少字节。
如果应用程序传到TCP缓存的数据块太长,TCP就会把它划分短些再传送。
如果应用程序发来的数据太少时,TCP将会等待积累足够多的字节后再构成报文段发送出去。
TCP连接的端点叫做套接字。
它是由IP和端口号构成。
每一条TCP连接唯一的被通信两端的两个端点所确定。
同一个IP地址可以有多个不同的TCP连接,而同一个端口号也可以出现在多个不同的TCP连接中。
TCP发送的报文段是交付给IP层传送的,但IP层只提供尽最大努力的交付。
也就是说TCP下面的网络所提供的是不可靠的服务。
可靠传输必须依靠TCP来实现。
停止等待协议就是一种方式。
停止等待就是每发送完一个分组就停止发送,等待接收方的确认,在收到确认后再传送下一个分组。
如果发送方在一段时间后仍然没有收到确认,就认为刚才发送的分组丢失了,因而重传前面发送过的分组,这被称为超时重传。
要实现超时重传,就要在每发送完一个分组后设置一个超时计时器。
计算数据包大小的方法
计算数据包大小的方法数据包大小是指在数据传输过程中,每个数据包所包含的有效数据的大小。
计算数据包大小对于网络工程师和网络管理员来说非常重要,因为合理地设置数据包大小可以提高网络的传输效率和性能。
下面将介绍几种常见的计算数据包大小的方法。
1. 以太网数据包大小计算方法以太网是一种常用的局域网传输协议,其数据包大小是指以太帧中的数据部分的大小。
以太网数据包大小通常由数据链路层协议规定,默认情况下最大为1500字节。
计算以太网数据包大小时,需要考虑以下几个因素:- 有效数据大小:除去以太帧中的首部和尾部信息,剩余部分即为有效数据。
例如,如果以太帧首部长度为14字节,尾部长度为4字节,那么有效数据大小为1500 - 14 - 4 = 1482字节。
- 协议开销:在数据链路层中,可能会加入一些额外的开销,如CRC校验码和前导码等。
这些开销也需要考虑在内。
例如,如果CRC 校验码长度为4字节,那么实际的数据包大小为1482 - 4 = 1478字节。
2. IP数据包大小计算方法IP数据包是在网络层进行传输的数据单元,其大小是指IP首部和有效数据之和。
计算IP数据包大小时,需要考虑以下几个因素:- IP首部长度:IP首部的长度是可变的,一般为20字节,但也可能包含选项字段,导致首部长度增加。
如果IP首部长度为20字节,那么有效数据大小为总数据包大小 - 20字节。
- 分段和重组:在IP传输过程中,如果数据包超过链路的最大传输单元(MTU),则会进行分段和重组。
在计算数据包大小时,需要考虑分段和重组所引入的额外开销。
3. TCP数据包大小计算方法TCP是一种可靠的传输协议,其数据包大小是指TCP首部和有效数据之和。
计算TCP数据包大小时,需要考虑以下几个因素:- TCP首部长度:TCP首部的长度是可变的,一般为20字节,但也可能包含选项字段,导致首部长度增加。
如果TCP首部长度为20字节,那么有效数据大小为总数据包大小 - 20字节。
tcp协议头
tcp协议头TCP协议头。
TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
在TCP协议中,数据传输是通过TCP报文段进行的,而TCP 报文段的结构中包含了TCP协议头部,本文将详细介绍TCP协议头的结构及其各个字段的含义。
TCP协议头由20个字节的固定长度组成,其中包含了一些必要的字段,用于描述TCP连接的相关信息。
下面将逐一介绍TCP协议头中的各个字段:1. 源端口(16位),用于标识发送端的端口号。
2. 目的端口(16位),用于标识接收端的端口号。
3. 序列号(32位),用于标识本报文段的数据在整个数据流中的位置。
4. 确认号(32位),用于确认收到的数据,同时也表示期望接收的下一个数据的序列号。
5. 数据偏移(4位),指示TCP报文段的数据起始位置相对于报文段起始位置的偏移量,以4个字节为单位。
6. 保留(6位),保留字段,留待将来使用。
7. 控制位(6位),包括URG、ACK、PSH、RST、SYN、FIN六种标志位,用于控制TCP连接的建立、终止和数据传输过程。
8. 窗口大小(16位),用于指示发送端当前可接收的数据量,以字节为单位。
9. 校验和(16位),用于校验TCP报文段的完整性,以及检测报文段在传输过程中是否发生了错误。
10. 紧急指针(16位),仅在URG标志位被设置时才有效,用于指示报文段中的紧急数据的末尾位置。
11. 选项(可变长度),用于扩展TCP协议头,包括最大报文段长度、时间戳、窗口扩大因子等选项。
以上就是TCP协议头的各个字段及其含义。
通过对TCP协议头的分析,我们可以更深入地理解TCP连接的建立、数据传输和连接释放过程。
同时,了解TCP协议头的结构也有助于我们在网络通信中进行故障排除和性能优化。
总结,TCP协议头是TCP报文段的重要组成部分,其中包含了源端口、目的端口、序列号、确认号等字段,用于描述TCP连接的相关信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TCP是TCP/IP协议族中非常复杂的一个协议。
它具有以下特点:1:面向连接的运输层协议。
在使用TCP协议之前,首先需要建立TCP连接。
传送数据完毕后,必须释放已经建立的TCP连接。
2:一条TCP连接有两个端点,连接是点对点的。
3:提供可靠交付的服务。
通过TCP连接传送的数据,不会出现差错不会丢失并且按序到达。
4:提供全双工通信。
TCP允许通信双方的应用程序进程在任何时候都能发送数据。
TCP连接的两端都设有缓存,分为发送缓存和接收缓存,用来临时存放双向通信的数据。
发送时,应用程序把数据传给TCP 的缓存后,就可以做自己的事情了。
TCP会在合适的时候把数据发送出去。
接收时,TCP把接收到的数据放入缓存,供上层的应用程序读取。
5:面向字节流。
虽然应用程序和TCP的交互是一次一个数据块,但TCP把应用程序交下来的数据看成一串无结构的字节流。
TCP对应用进程一次把多长的报文发送到TCP缓存中是不关心的。
TCP根据对方给出的窗口值和当前网络的拥塞程度决定一个报文段包含多少字节。
如果应用程序传到TCP缓存的数据块太长,TCP就会把它划分短些再传送。
如果应用程序发来的数据太少时,TCP将会等待积累足够多的字节后再构成报文段发送出去。
TCP连接的端点叫做套接字。
它是由IP和端口号构成。
每一条TCP连接唯一的被通信两端的两个端点所确定。
同一个IP地址可以有多个不同的TCP连接,而同一个端口号也可以出现在多个不同的TCP连接中。
TCP发送的报文段是交付给IP层传送的,但IP层只提供尽最大努力的交付。
也就是说TCP下面的网络所提供的是不可靠的服务。
可靠传输必须依靠TCP来实现。
停止等待协议就是一种方式。
停止等待就是每发送完一个分组就停止发送,等待接收方的确认,在收到确认后再传送下一个分组。
如果发送方在一段时间后仍然没有收到确认,就认为刚才发送的分组丢失了,因而重传前面发送过的分组,这被称为超时重传。
要实现超时重传,就要在每发送完一个分组后设置一个超时计时器。
如果在超时计时器到期之前收到了对方的确认,就撤销已设置的超时计时器。
因此发送方在发送完一个分组之后,必须暂时保存已发送的分组的副本。
只有在收到响应的确认后才能清除暂时保留的分组的副本。
分组和确认分组都必须进行编号,这样才能知道哪一个发送过的数据已被确认,那些没有收到确认。
超时计时器设置的重传时间应该比数据在分组传输的平均往返时间更长一些。
超时重传时间的设定是非常复杂的,因为已发送的分组到底经过那些网络,以及这些网络会产生多大的延迟都是不确定的。
如果发送方发送了数据后,在超时时间内没有收到接收方的确认,它会重传数据。
如果此时接受方再次接收到了此数据,它会将此数据丢弃,并向发送方发送确认。
发送方没有收到确认,可能是因为接受方的确认出错或丢失。
发送方还可能收到重复的确认,对待重复的确认只需要丢弃即可。
上述可靠的传输协议被称为自动重传请求ARQ (Automatic Repeat Request)。
采用停止等待协议可能会导致信道利用率非常低,为了提高传输效率,需要使用流水线传输。
也就是说发送方可以连续发送多个分组,不必没发完一个分组就停下来等待对方的确认。
这样可以使信道上一直有数据不间断的在传送。
这被称为连续ARQ协议或滑动窗口协议。
它比较复杂但却是TCP协议的精髓。
所谓滑动窗口就是说位于此窗口内的分组可以被连续的发送出去,而不需要等待对方的确认。
发送方每收到一个确认,就会把发送窗口向前滑动一个分组的位置。
假设此时1-5个分组位于发送窗口内,这5个分组就会被连续的发送出去。
当发送方收到第一个分组的确认后,就会向后移动一个分组的位置,此时就可以发送第六个分组了。
接收方一般都采用累积确认的方式。
也就是说,接收方不必对收到的每个分组逐个发送确认,而是可以收到几个分组后,对按序到达的最后一个分组发送确认。
这样就表示到这个分组为止的所有分组都被正确接收。
如果此时发送方发送了前5个分组,而第三个分组丢失了,这是接收方只能对前两个分组发送确认。
发送方不知道后面三个分组的下落。
实际上仅仅第三个分组没有收到,但是发送方仍然会发送后三个分组。
TCP是面向字节流的,但是TCP传送的数据却是报文段。
一个TCP报文段分为首部和数据两部分。
只有真正弄清TCP的首部各字段的作用才能掌握TCP的原理。
TCP的前20个字节是固定的。
后面的40字节是根据需要增加的。
因此TCP首部的最小长度时20。
1:源端口和目的端口:各占两个字节。
2:序号:四个字节。
共2的32次方个序号。
TCP连接中传送的字节流中的每一个字节都按顺序编号。
此处的序号字段指的是本报文段所发送的数据第一个字节的序号。
例如,一报文段的序号字段的值是301,而携带的数据共有100字节。
这就表明:本报文段的数据的最后一个字节的序号应是400。
我们还可以看到,下一个报文段的数据序号应当从401开始,因而下一个报文段的的序号字段值应为401。
3:确认号:4个字节。
表示期望收到对方下一个报文段的第一个数据字节的序号。
如确认号是N,则表明序号N-1之前的数据都正确收到。
确认号也是4个字节,可以对4GB数据进行编号。
4:数据偏移,4位。
它指出TCP报文段的数据起始处距离TCP报文段起始处有多远。
这个字段实际上指出了TCP的首部。
由于首部中有长度不确定的选项字段,因此此数据偏移是必要的。
数据偏移只有4位,但是它的一个单位代表4字节。
因此数据偏移的最大值是60(15*4)。
即TCP首部的最大长度。
5:保留6位。
保留为以后使用。
都是0.6:紧急URG 当此处为1时,表明紧急指针字段有效。
它告诉系统此报文段有紧急数据,需要尽快传送。
系统会把紧急数据插入TCP缓存的最前面。
它和紧急指针字段配合使用。
7:确认ACK:当ACK=1时,确认号字段才有效。
当ACK=0时确认号无效。
当连接建立前ACK=0,建立之后ACK就一直是1了。
8:推送PSH。
当PSH=1时,系统会立即将此报文段发送出去,而不再等待整个缓存都被填满后才向上交付。
9:复位RST。
当其为1,时,表明TCP出现严重错误,必须释放连接然后再重新建立连。
10:同步SYN:在连接建立时用来同步序号。
当其为1而ACK=0时,表明这是一个(同步)连接请求报文段。
当对方同意后,应在响应报文段中使用SYN=1,ACK=1。
因此SYN=1,要么表示连接请求要么表示连接接受报文。
11:终止FIN:用来释放连接。
当其为1时,表明此报文段的发送方的数据已经发送完毕,要求释放连接。
12:窗口:2字节。
窗口指发送方的接收窗口。
它告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量。
之所以有此限制是因为接收方的数据缓存空间是有限的。
它指出现在允许对方发送数据量。
由于接收缓存不断变化,因此窗口值也不断变化。
13:检验和:2字节。
检验和检验的是首部和数据这两部分。
在计算时还应加上12字节的伪首部。
14:紧急指针:2字节,此字段只在紧急URG=1时才有意义。
它指出本报文段中紧急数据的字节数。
由于紧急数据放在了缓冲区最前方,紧急指针指出的是紧急数据的末尾在报文段的位置。
当所有的紧急数据都处理完后,TCP 就告诉应用程序恢复正常操作。
15:选项:长度可变,最长可达40字节。
当没有选项时,首部长度时20.MSS是选项的一种。
它被称为最大报文段长度,是每个TCP报文段中数据字段的最大长度。
它加上TCP首部才是整个TCP报文段。
再加上20字节的IP首部才能组装成一个IP数据报。
当MSS非常小时,网络的利用率就低。
如果发送只含一个字节的数据时,在IP层传输至少需要40字节的开销(IP头20字节,TCP头至少20)。
到链路层还需要开销。
如果MSS非常大,在IP层传输时就可能要分片,到终点后再将各个分片组装成原来的TCP报文段,这也会使开销增大。
因此,MSS 可以尽量大,只要在IP层传输时不分片就行了。
MSS的默认长度时536。
窗口扩大选项是为了扩大窗口,窗口字段长度是16位,因此最大的窗口大小是64字节。
窗口扩大选项占3个字节。
每一个字节表示移位值。
新的窗口值等于原来的16+窗口扩大选项的值。
这相当于把窗口值向左移动移位值位。
时间戳选项占10字节,最主要的两个地段是:时间戳值和时间戳回送回答字段。
时间戳选项具有以下两个功能1:计算往返时间。
2:用于处理TCP序号超过2的32次方的情况。
这又被称为防止序号绕回。
在报文段中加入时间戳就可以区分新的报文段和迟到很久的报文段。
socket的两端分别有两个窗口,发送窗口和接收窗口。
滑动窗口的单位是字节,假设A收到了B的确认报文段,其中窗口时20,而确认号是31,这表明B期望接受的下一个序号是31,到序号30为止的数据已经收到了。
根据这两个数据,A就构造自己的发送窗口。
它的起始值为31,而末尾值为50。
发送窗口表示在没有收到B的确认前,A可以连续把窗口内的数据都发送出去。
凡是已经发送过得数据,在未收到确认之前都必须暂时保留,以便在在超时重传。
发送窗口内的序号表示允许发送的序号。
发送窗口与缓存的关系。
发送窗口存储应用程序将要发送的数据,以及发送但却为收到确认的数据。
发送窗口只是发送缓存的一部分,已经被确认过的数据应当从发送缓存中删除。
因此发送缓存和发送窗口的后沿是重合的。
接收缓存用来暂时存放按需到达的,但还未被应用程序读取的数据以及未按序到达的数据。
如果收到的分组有差错,就要丢弃。
如果接收应用程序来不及读取,接收缓存就会被填满,就会减少接受窗口,直到减为0。
反之就可以增大。
虽然发送方的发送窗口是根据接收方方接收窗口设置但是,但同一时刻,发送窗口并不一定与接收窗口相同。
这是因为通过网络传送窗口值需要经历一定的延迟。
TCP要求接收方必须有累计确认的功能,这样可以减小传输开销。
接收方可以在合适的时候发送确认,也可以在自己有数据发送时把确认信息捎上。
但应该注意的是接收方不应过分推迟发送确认,否则会导致发送方不必要的重传,这反而会浪费网络资源。
TCP利用滑动窗口来实现流量控制。
所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接受。
在连接建立时,发送方告诉接收方我的接受窗口是x,接收方收到后会设置自己的发送窗口。
发送方的发送窗口不能超过接收方给出的接收窗口的数值。
TCP窗口的单位是字节,而不是报文段。
在每次发送数据是报文段内会将此时接受窗口告诉发送者。
发送者会根据收到的报文段接收窗口的值调整自己的发送窗口。
当接收方接收缓存满时就发送给发送方零窗口,告诉发送方停止发送。
假设过一段时间接收方调整接收窗口为100,而此报文段在传送过程中丢失,这就导致发送方等待接收方的非零窗口通知,而接收方在等待发送方的数据。
这样就导致了死锁。
为了防止这种情况,TCP为每个连接设置一个持续计时器。