【TCP/IP】TCP协议

TCP是TCP/IP体系结构中最主要的传输层协议,它只提供面向连接的传输服务。

TCP具备一下特性:

1、面向连接的传输协议。应用程序在使用TCP之前,必须先建立TCP传输连接,在传输数据完毕后,必须释放已建立的TCP传输连接。

2、仅支持单播传输。每条TCP传输连接只能有两个端点(socket),只能进行点对点的数据传输。

3、提供可靠的传输服务。通过TCP连接传送的数据可以无差错。不丢失、不重复。且按时序到达对端。

4、支持全双工服务。TCP允许通信双方的应用程序在任何时候都能发送数据,TCP连接的两端都设有发送和缓存,用于临时存放双向通信的数据。

5、每次发送的TCP数据段大小和数据段数都是可变的。在TCP中,每次发送多少字节的数据是根据对方给出的窗口大小和当前网络的拥塞程度来决定的。


二、TCP数据段格式

TCP通过数据段的交互来建立连接、传输数据、发出确认、进行差错控制、流量控制及关闭连接。整个TCP数据段也分为“数据段头”和“数据”两部分,数据段头即为TCP为了实现端到端可靠传输而加上的TCP控制信息,数据部分则是指高层(TCP/IP体系结构中的“应用层”)来的用户数据。

下面给出TCP数据段格式及各字段说明:

                     

  1. 源端口号和目标端口号,分别代表发送方和接收方的TCP端口号,各占16位,一个端口与其主机的IP地址就可以完整地标识一个端点了,即我们常说的套接字(Socket)
  2. 序列号,即TCP数据段中的数据部分(不含数据段头)的第一个字节的编号,占32位,在一个TCP连接中,传送的数据字节流中每一个数据字节都要按顺序进行编号,在数据段头中标识的只是每个数据段的第一个数据字节的编号,整个要传送的字节流的起始序号必须在连接建立时设置。
  3. 确认号,指期望接收到对方下一个数据段中数据部分的第一个字节序号,占32位,确认号不是代表已经正确接收到的最后一个字节的序号。而是期望接收到的。比如主机B已接收到A机发来的长度为100个字节的序列号为101的数据段,表明主机B已经接收到了主机A的前200个字节,那么下一步期望接收到的数据段的第一个字节序号应为201,于是主机B在给A机发送确认数据段时要把确认号设置为201。序列号和确认号两个字段共同用于TCP服务中的差错控制。
  4. 首部长度,指数据段中的数据部分起始处距离TCP数据段起始处的字节偏移量,占4位。即确定TCP数据段头部分的长度。
  5. 保留
  6. URG(Urgent Pointer),紧急指针控制位,指TCP数据段中确认号字段是否有效,占1位,置位表示有紧急数据,会被优先安排传送
  7. ACK,确认控制位,指示TCP数据段中的确认号字段是否有效,占1位,仅当ACK置位时才表示确认号字段有效,否则无效,应用层实体在读取数据时可以不管确认号字段
  8. PSH,推控制位,指示是否需要立即把收到的该数据段提交给应用进程,占1位,当PSH置位时,要求接收端尽快把该数据段提交给应用进程,置0则没这个要求,可以先缓存起来。
  9. RST,重置控制位,用于重置、释放一个已经混乱的传输连接,然后重建新的传输连接,占1位,置位开始运作
  10. SYN,同步控制位,用来在传输连接建立时同步传输连接序号,占1位,当SYN置位时,表示这是一个连接请求或连接确认报文,关于该字段与ACK字段的配合使用,请参见TCP三次握手和四次挥手
  11. FIN,最后控制位,用于释放一个传输连接,占1位,当置位时,表示数据已全部传输完成,发送端没有数据要传输了,要求释放当前连接,但是接收端仍可以继续接受没有接收完成的数据。
  12. 窗口大小,指示发送此TCP数据段的主机上用来存储传入数据段的窗口大小,即发送者当前还可以接收的最大字节数,占16位
  13. 校验和,是对数据段头、数据和伪头部这三部分进行校验,占16位,伪头部包括源主机和目的主机的32位IP地址、TCP协议号(6),以及TCP数据段长度
  14. 紧急指针,仅当前面的URG控制位置位才有意义,指出本数据段中为紧急数据的字节数,占16位。紧急数据无需缓存,所以即使窗口大小为0,也是可以发送的
  15. 可选项,如果没有使用该字段,那么TCP的头部大小为20字节
  16. 数据,这是由应用层的应用进程提交的数据,作为TCP数据段的数据(有效载荷)部分。

三、套接字(Socket)
在TCP/IP通信中,应用程序把数据传送给Socket,然后由Socket通过传输层向下提交给网络驱动程序并向网络上发送出去。计算机从网络上收到与该Socket绑定的IP地址和端口号相关的数据后,由网络驱动程序通过传输层向上提交给应用层的Socket,最后应用程序从Socket中提取所要接受的数据。通信双方计算机上的网络应用程序就是这样通过Socket进行数据的发送与接收的。

关于Socket的进一步介绍,参见博文:
TCP的建立连接和释放连接过程: TCP三次握手和四次挥手TCP状态转换图详解

四、TCP的可靠传输

在TCP可靠传输方面,主要采用以下4中机制:

  1. 字节编号机制,TCP数据段以字节为单位对数据段中的数据部分进行一一编号,确保每个字节的数据都可以有序传送和接收
  2. 数据段确认机制,TCP要求每接收一个数据段都必须由接收端向发送端返回一个确认数据段(可以用一个确认数据段一次确认前面多个数据段),其中的确认号表明了接收端已正确接收的数据段序号
  3. 超时重传机制,在TCP中有一个重传定时器(RTT),在发送一个数据段的同时也启动了该定时器,如果在定时器过期之前该数据段还没有被对方确认的话,则定时器停止,然后重传对应序号的数据段
  4. 选择性确认机制,仅可以重传缺少部分的数据,而不会重传那些已正确接收的数据
咦,这个选择性确认机制似曾相识啊,没错,在我们前面学习的数据链路层中,传输的差错纠正中的 选择重发策略(差错纠正的第2点)也是这个机制。


五、TCP的流量控制和拥塞控制

流量控制是基于通信双方的数据发送和接收速率匹配方面考虑的,其最终目的就是不要让数据发送的太快,以便接收端能够来得及接收,是一个链路两端的点对点行为。

TCP的流量控制是采用滑动窗口协议来进行的。TCP数据段是以字节为单位进行编号的,但由于一个数据段只有一个TCP头部,所以TCP是以数据段为单位进行传输的,接收端通过TCP头部来识别所接收的数据属于哪个数据段。一个数据段只要没有完全接收(FIN),接收端就不会认为已接收了该数据段。就像我们通过QQ等工具传输文件,只有还有部分没接收玩,则计算机就不会认为该文件已正确接收,即使已有了文件名,也打不开已接收的部分。


网络拥塞就是,网络中各个部分输入的流量大于输出的流量时就会出现网络拥塞,类似于高速公路上的“堵死”。当然,出现网络拥塞也不止上面这种情况,比如TCP链接的整个链路中有结点设备的缓存空间太小、数据转发能力太低,某段链路带宽太小等


关于流量控制策略和拥塞控制策略,这里不介绍了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值