TCP协议入门

TCP位于TCP/IP模型的传输层,它是一种面向连接的端到端协议。TCP作为传输控制协议,可以为主机提供可靠的数据传输。

1.TCP的主要特点

TCP是TCP/IP体系中非常复杂的一个协议,下面介绍TCP最主要的几个特点。
(1)支持面向连接的传输服务
应用程序在使用TCP提供的服务传送数据之前,必须先建立TCP连接。类似于日常生活中的电话通信,在进行通话之前需要先建立连接,双方知道电话已接通,开始语音对话,电话结束之后还要挂机释放连接。TCP提供服务之前建立连接的目的是通信双方为接下来的数据传送做好准备,初始化各种状态变量,分配缓存等资源。

(2)支持全双工通信
TCP允许通信双方的应用进程在任何时候都能发出数据。由于通信双方都设置有发送和接收缓冲区,应用程序将要发送的数据字节提交给发送缓冲区,就可以去进行别的进程,而TCP会在合适的时候把数据发送出去。在接收方,TCP把数据放入缓存,上层的应用程序在合适的时候读取缓存中的数据。

(3)支持同时建立多个并发的TCP连接
TCP协议支持同时建立多个连接,特别是服务器端,一般会用套接字来唯一标识端点,所以一条TCP连接由两个套接字地址标识。

(4)支持可靠的传输服务

TCP协议是一种可靠的传输服务协议,它使用了确认重传的机制,保证通过TCP连接传送的数据无差错、不丢失、不重复,并且按序到达。

(5)支持字节流的传输

面向字节流的含义是:虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序传输的数据看成是一连串无结构的字节流,TCP不保证接收方应用程序所收到的数据块和发送方发出的数据块具有对应大小的关系,

例如,发送方应用程序交给接收方的TCP共12个数据块,而接收方的应用程序是分5次,即5个数据块从TCP接收方缓存中将数据读取完毕。但发送方和接收方应用程序发送和接收的字节流是完全一样的。

流(Stream)相当于一个管道,从一端放入内容,从另一端可以照原样取出内容,它描述了一个不出现丢失、重复和乱序的数据传输过程。

综上所述,TCP协议的特点是:面向连接、面向字节流、支持全双工、支持并发连接、提供确认重传机制和拥塞流量控制。

2.TCP的数据报格式

TCP虽然是面向字节流的,但TCP传送的数据单元却是报文段
TCP报文段由TCPHeader(头部)和TCP Data(数据)组成。

TCP最多可以有60个字节的头部,前20个字节是固定的。后面的Options为可选项字段,长度为4*N字节(N必须是整数),最多为40字节。

如图4-24所示为TCP报文段及其首部的结构。
在这里插入图片描述
(1)Source Port(源端口号)和Destination Port(目的端口号)
源端口和目的端口字段各占2字节,分别表示发送与接收该报文段的应用进程的TCP端口号。每个TCP头部都包含源端和目的端的端口号,这两个值加上IP头部中的源IP地址和目的IP地址就可以唯一确定一个TCP连接。

(2)Sequence Number(序号)
序号字段占4字节。TCP是面向数据流的,TCP传送的报文段可看成连续的数据流,在一个TCP连接中传送的数据流中的每一个字节都按顺序编号。首部中序号字段的值则指的是本报文段所发送的数据的第一个字节的序号,用于标识从发送端发出的不同的TCP数据段的序号。数据段在网络中传输时,它们的顺序可能会发生变化;接收端依据此序列号,便可按照正确的顺序重组数据

(3)Acknowledge Number(确认号)
确认号字段占4字节,用于标识接收端确认收到的数据段。确认序列号为成功收到的数据序列号加1,也就是期望收到发送方的下一个报文段的第一个数据字节的序号,这就是网络协议中典型的捎带确认方法。

(4)Header length(首部长度)
首部长度占4位,又称数据偏移,它指出TCP报文段的数据起始处距离TCP文段的起始处的偏移量。数据偏移的单位是32位字(以4字节为计算单位),实际报头长度是20~60字节,故该字段值是在5~15之间。

(5)Resv(保留)
保留字段占6位,保留为今后使用,但目前应置为0。
(6)URG(紧急)
当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快交付给应用程序(相当于高优先级的数据),而不需按序从接收缓存中读取。URG位与紧急指针一起使用。

(7)ACK(确认)
只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。按照TCP的规定,在TCP连接建立之后发送的所有报文段的ACK位都置为1。
(8)PSH(推送)
当两个进程进行交互式通信时,一端应用进程希望在输入一个命令之后,能够立即得到对方的响应时,就将PSH置1,并立即创建一个报文段发送到对方;接收TCP收到PSH=1的报文段,就尽快地交付接收到的应用进程,而不再等到整个缓存都填满之后再向上交付,请求尽快应答。

(9)RST(复位)
当RST=1时,有两种含义:一是表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接;二是拒绝一个非法TCP报文或拒绝释放一个连接。
(10)SYN(同步)
同步SYN=1表示这是一个连接请求或连接接收报文。SYN=1,ACK=0表示是一个连接建立请求报文;同意建立连接的响应报文为SYN=1,ACK=1。
(11)FIN(终止)
终止FIN位用来释放一个连接。FIN=1表明此报文段发送端的数据已发送完毕,并要求释放运输连接

(12)Window(窗口)
窗口字段长度占2字节,窗口值指示发送该报文段一方的接收窗口大小,单位为字节。由于该字段为16位,所以窗口的最大值为65535B。窗口字段用来控制对方发送的数据量(从确认号开始,允许对方发送的数据量),反映了接收方接收缓存的可用空间大小。该机制通常用来进行流量控制。发送端将根据接收端通知的窗口值

例如:结点A发送给结点B的TCP报文的报头中确认号的值是450,窗口字段的值为1000,这表明,下一次结点B要向结点A发送的TCP报文段时,字段第一个字节号应该是450,字段的最大长度为1000,最后一个字节号最大为1449。

(13)Checksum(校验和)
校验和字段占2字节,检检验和字段校验整个TCP报文段,包括TCP头部和TCP数据。在计算校验和时,要在TCP报文段的前面加上12字节的伪首部,而且该字段是必需的。该值由发送端计算和记录并由接收端进行验证。

(14)Urgent Pointer(紧急指针)
紧急指针字段占16位,只有当紧急标志位URG=1时,该字段才有效,指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。

(15)Options(可选项)
该字段长度可变,最大40B,也就是在TCP报头中有多达40B的选项字段。这里只介绍一个选项,即MSS,该选项TCP对报文数据部分最大长度有一个规定,称为最大段长度(Maximum Segment Size,MSS)。MSS告诉对方TCP:“我的缓存所能接收的报文段的数据字段最大长度是MSS个字节。”如果确定MSS值是100B,则整个TCP报文段长度可能是120~160B,具体值取决于报头的实际长度。

MSS值的选择并不简单,若太小,会导致网络的利用率降低,因为报头会占用大部分开销。反过来,若TCP报文段非常长,那么交付给IP层传输时就有可能被分解成多个短数据报片,目的站将收到的各个短数据报片装配成原来的TCP报文段,如果传输出错还要重传,这些也会使开销增大。一般情况下,MSS值选取时应尽可能大些,在IP层传输时不需要再分片就行。在TCP连接建立的过程中,双方可以将自己能够支持的MSS写入可选项字段,在进行数据传输时,MSS会取双方提出的较小的那个数值。若未设置,则MSS的默认值为536B,再加上20B的报头长度,则默认的报文段长度为556B。

(16)Padding(填充)
填充字段是为了使整个首部长度是4B的整数倍。

总结

  • TCP是可靠的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值