首页 资讯 应用 高压 设计 行业 低压 电路图 关于

通信网络

旗下栏目: 电力电子 通信网络 RFID LED

TCP协议详解

通信网络 | 发布时间:2018-06-14 | 人气: | #评论# | 本文关键字:TCP,协议,TCP协议,UDP,TCP/IP
摘要:TCP和UDP是TCP/IP中传输层中两个最具代表性的协议,TCP提供可靠的通信传输,UDP则是常被应用于广播和细节控制(相比而言,不太可靠) 可是,TCP的可靠性表现在哪里??它的报文格式又是咋样

TCP和UDP是TCP/IP中传输层中两个最具代表性的协议,TCP提供可靠的通信传输,UDP则是常被应用于广播和细节控制(相比而言,不太可靠)可是,TCP的可靠性表现在哪里??它的报文格式又是咋样的呢??

TCP(虽然是面向字节流的,但TCP传送的数据单元却是报文段)

1.是面向字节流,TCP中的“流”(stream)指的是流入到进程或从进程流出的字节序列。“面向字节流的含义是”:虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据看成仅仅是一连串的无结构的字节流。TCP并不知道所传送的字节流的含义。TCP不保证接受方应用程序所收到的数据块和发送方应用程序所发出的数据块具有对应大小的关系(例如:发送方应用程序交给发送方的TCP共10个数据块,但是接受方的TCP可能只用了5个数据块就把收到的字节流交付给了上层应用程序)。但是:接受方应用程序收到的字节流和发送方应用程序发出的字节流完全一样。接受方的应用程序必须有能力识别接受到的字节流,然后把它还原成有意义的应用层数据

2.面向连接,也就是说tcp在传输之前,首先有一个建立连接的过程

3.tcp的可靠性传输,也就是说它能在逻辑上保证传输是可靠的,顺序控制(不失序),重发机制(数据丢失),端到端校验和(传输错误),拥塞控制等功能

4.缓冲传输,就是说TCP可能不会立即发送这个段,它可能会把这些段放入缓冲区,等到一定的时机然后再发送出去

5.   全双工,(TCP允许通信双方的应用进程在任何时候都能发送数据,TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据,在发送时,应用程序在把数据传送给TCP的缓存后,就可以做自己的事情了,而TCP在合适的时候把数据发送出去,在接受时,TCP把收到的数据放入缓存,上层的应用进程在合适的时候读取缓存中的数据),而半双工(只能发送或只能接收,例如收音机就是只能接收的)

6.流量控制,通过窗口控制达到流量控制的目的

报文(message )  

   报文是网络中交换与传输的数据单元,也是网络传输的单位。报文包含了将要发送的完整的数据信息,其长短很不一致。报文在传输过程中会不断的封装成分组、包、帧来传输,封装的方式就是添加一些信息段,那些就是报文头。

分组:

就是TCP发送的保温的,tcp虽然是面向字节流的,但是TCP传送的数据单元却是报文段。

数据报(datagram)

  面向无连接(UDP)的数据传输,工作过程类似于报文交换。采用数据报方式传输时,被传输的分组称为数据报。

帧(Frame)

   Frame,数据链路层的协议数据单元(protocol dataunit)。数据链路层的主要职责是控制相邻系统之间的物理链路,它在传送“比特”信息的基础上,在相邻节点间保证可靠的数据通信。为了保证数据的可靠传输,把用户数据封装成帧。

   TCP和UDP在发送报文时所采用的方式完全不同,TCP对应用进程一次把多长的报文发送到TCP的缓存中是不关心的。TCP根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应该包含多少个字节,如果应用进程传送到TCP缓存的数据块太长,TCP就可以把它划分短一些再传送,如果应用程序一次只发送来一个字节,TCP也可以等待积累有足够多的字节后再构成报文段发送出去。

由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,没有检验机制,也是为了加快传输速度的情况,故udp本就不需要缓存机制,及时的将数据直接发送过去了.

TCP的连接:

TCP把连接作为最基本的抽象。每一条TCP连接有两个端口。那么,TCP连接的端口是什么呢??不是主机,不是主机的IP地址,不是应用进程,也不是运输层的协议端口。TCP连接的端点叫做套接字(socket)或者插口。根据RFC793的定义:端口号拼接到(contatenated with)IP地址即构成了套接字。因此:套接字的表示方法是在点分十进制的IP地址后面写上端口号,中间用冒号或者逗号隔开。例如:IP地址是:192.168.1.100,而端口号是80,那么得到的套接字就是(192.168.1.100:80)

套接字:socket = (IP地址:端口号)

每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定。

虽然有时为了方便,我们也可以说,在一个应用进程和另一个应用进程之间建立了一条tcp连接,但一定要注意的是:TCP连接的端点是套接字,即(IP地址:端口号),也应注意的是:同一个IP地址可以有多个不同的Tcp连接,而同一个端口号也可以出现在多个不同的TCP连接中。

1.png

我们可以看到IP报文里面封装了很多的东西,有IP头部(占用20字节),TCP头部(占用20字节),接下来就是TCP数据了,同时,称TCP头部和TCP数据为IP的数据,这也就是不断封装的过程,同理当传过去之后,就有了解封的过程

TCP报文:

TCP报文

我们可以看到:TCP报文 = TCP头部  +  数据

TCP头部是20个字节:

1.先是源端口号和目的端口号各占2个字节(结合IP头部的源IP地址,目的IP地址,就已经构成了简单地TCP连接)

2.然后是序列号(这个报文段的第一个数据字节序号),确定号各占4个字节(仅当ACK为1时有效,表示期望收到  的下一个字节的序号,三次握手,四次挥手中会提到),序号范围是:0-2^32-1(4个字节,32位,即就     是:4294967296)个序号。序号增加到2^32-1后,下一个序号又回到0。也就是说:序号使用mod运算。TCP是面向字节流的,在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。整个要传送的字节流的起始序号必须在连接建立时设置。即本报文段所发送的数据的第一个字节的序号,例如:一报文段的序号字段值是301,而携带的数据共有100字节,这就说明:本报文段的数据的第一个字节的序号是301,最后一个字节的序号是400。显然,下一个报文段(有的话)的数据序号应当从401开始,即下一个序号字段值应为401,这个字段也叫做:报文段序号。

3,确认号(4个字节):是期望收到对方下一个报文段的第一个数据字节的序号。例如:B正确收到了A发送过来的一个报文段,A的序号字段值是501,而数据长度是200字节(501-700),这表明B正确收到了A发送的到序号700为止的数据。因此,B期望收到A的下一个数据序号是701,于是B在发送给A的确认报文段中把确认号置为701

总之:若确认号 = N,则表明:到序号N-1为止的所有数据都已正确收到

3.再就是头部长度(也称为:数据偏移),由于首部中还有长度不确定的选项字段,因此数据偏移是必要的,因为单位是32位字(即就是4字节),占4位(最大是15,也就是15*4 = 60个字节),接下来就是6位的保留,必须全部为0

4.6个标志位

  URG为1是,紧急指针有效,告诉系统此报文段中有紧急数据,应当尽快传送(高优先级数据),而不要按原来的排队顺序来传送,例如:我们运行了一个程序,但是里面是死循环,程序一直都不退出,我们要让程序退出,键入中断命令(Control + C),如果不使用紧急数据,那么这两个字符将在接受TCP缓存的末尾,也就是只有等所有的数据都被处理完毕后这两个字符才被交付到接受方的应用进程,也就是说:我们的程序一直在死循环着,但:如果我们使用紧急指针,发送方就把紧急数据插入到本报文段数据的最前面,仅接着执行。window下的任务管理系统也是这个原理。

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

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

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

 SYN为1时, 用来发起一个连接,在连接建立时用来同步序号。当SYN = 1而ACK = 0时,表明这是一个请求报文段。对方若同意建立连接,则应在响应的报文段中使用SYN = 1和ACK = 1。因此:SYN置为1就表示一个连接请求或连接接受报文。

  FIN为1时,   表示此报文段的发送方的数据已发送完毕。

5.窗口尺寸(2字节),是[0, 2^16 - 1]之间的整数。窗口指的是发送本报文段的一方的接受窗口(并不是自己的发送窗口),窗口值告诉对方:从本报文段首部中的确认号算起,接受方目前允许发送的数据量。之所以要有这个限制,是因为接受方的数据缓存空间是有限的。接受方的数据缓存空间直接影响了发送发TCP报文段窗口数值的大小,如:设接受方发送的确认号是701,窗口字段是1000。这就说明:下一次,从701开始,发送方发送此报文段可以发送的范围是701-1700(1700最大,不一定发送这么多)

6.检验和 占2字节。检验和字段检验的范围包括首部和数据这两部分。

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

8,选项:(长度可变,最长可达40字节,上图不太对!!!),当没有使用选项时,TCP的首部长度是20字节

   

责任编辑:TCP协议
首页 | 电气资讯 | 应用技术 | 高压电器 | 电气设计 | 行业应用 | 低压电器 | 电路图 | 关于我们 | 版权声明

Copyright 2017-2018 电气自动化网 版权所有 辽ICP备17010593号-1

电脑版 | 移动版 原创声明:本站大部分内容为原创,转载请注明电气自动化网转载;部分内容来源网络,如侵犯您的权益请发送邮件到[email protected]联系我们删除。