1.TCP服务
TCP协议提供面向连接的可靠的传输服务,适用于各种可靠的或不可靠的网络。TCP用户送来的是字节流形式的数据,这些数据缓存在TCP实体的发送缓冲区中。一般情况下,TCP实体自主地决定如何把字节流分段,组成TPDU发送出去。在接收端,也是由TCP实体决定何时把积累在接收缓冲区中的字节流提交给用户。分段的大小和提交的频度是由具体的实现根据性能和开销权衡决定的,TCP规范中没有定义。显然,即使两个TCP实体的实现不同,也可以互操作。
另外,TCP也允许用户把字节流分成报文,用推进(PUSH)命令指出报文的界限。发送端TCP实体把PUSH标志之前的所有未发数据组成TPDU立即发送出去,接收端TCP实体同样根据PUSH标志决定提交的界限。
2.TCP段头格式
TCP只有一种类型的PDU,叫做TCP段,段头(也叫TCP头或传输头)的格式如下图
所示,其中的字段如下。
源端口(16位):说明源服务访问点。
目标端口(16位);表示目标服务访问点。
发送顺序号(32 位):本段中第- -个数据字节的顺序号。
应答顺序号(32); 捎带应答的顺序号,指明接收方期望接收的下一个数据字节的顺序号。
偏置值(4位):传输头中32位字的个数。因为传输头有任选部分,长度不固定,所以需要偏置值。
保留字段(6位):未用,所有实现必须把这个字段置全0。
标志字段(6位):表示各种控制信息,其中
URG:紧急指针有效。
ACK:应答顺序号有效。
PSH:推进功能有效。
RST:连接复位为初始状态,通常用于连接故障后的恢复。
SYN:对顺序号同步,用于连接的建立。
FIN:数据发送完,连接可以释放。
窗口(!6 位):为流控分配的信贷数。
检查和(16 位):段中所有16位字按模2l6-1相加的和,然后取1的补码。
紧急指针(16位):从发送顺序号开始的偏置值,指向字节流中的一个位置,此位置之前的数据是紧急数据。
任选项(长度可变):目前只有一个任选项,即建立连接时指定的最大段长。
补丁:补齐32位字边界。
源端口 | 目的端口 | |||||||
发送顺序号 | ||||||||
接收顺序号 |
偏置量 | 保留 | URG | ACK | PSH | RST | SYN | FIN | 窗口 |
检查和 | 紧急指针 |
任选项+补丁 | ||||||||
用户数据 |
下面对某些字段作进- - -步的解释。端口编号用于标识TCP用户,即上层协议,一些经常
使用的上层协议,例如Telnet(远程终端协议)、FTP(文件传输协议)或SMTP(简单邮件传输协议)等都有固定的端口号,这些公用端口号可以在RFC (Request For Comment)中查到,任何实现都应该按规定保留这些公用端口编号,除此之外的其他端口编号由具体实现分配。
前面提到,TCP是对字节流进行传送,因而发送顺序号和应答顺序号都是指字节流中的某
个字节的顺序号,而不是指整个段的顺序号。例如,某个段的发送顺序号为1000, 其中包含
500个数据字节,则段中第一个字节的顺序号为1000,按照逻辑顺序,下-一个段必然从第1500
个数据字节处开始,其发送顺序号应为1500。为了提高带宽的利用率,TCP采用积累应答的机
制。例如从A到B传送了4个段,每段包含20个字节数据,这4个段的发送顺序号分别为30,
50,70 和90。在第4次传送结束后,B向A发回一个ACK标志置位的段,其中的应答顺序号
为110 (即90+20),一次应答了4次发送的所有字节,表示从起始字节到109 字节都已正确
接收。
同步标志SYN用于连接建立阶段。TCP用三次握手过程建立连接,首先是发起方发送一
个SYN标志置位的段,其中的发送顺序号为某个值X,称为初始顺序号ISN ( Initial Sequence
Number),接收方以SYN和ACK标志置位的段响应,其中的应答顺序号应为X+1 (表示期望
从第X+1个字节处开始接收数据),发送顺序号为某个值Y (接收端指定的ISN)。这个段到达
发起端后,发起端以ACK标志置位,应答顺序号为Y+1的段回答,连接就正式建立了。可见,
所谓初始顺序号是收发双方对连接的标识,也与字节流的位置有关。因而对发送顺序号更准确
的解释应该是:当SYN未置位时,表示本段中第-一个数据字节的顺序号:当SYN置位时,它
是初始顺序号ISN,而段中第一一个数据字节的顺序号应为ISN+ 1,正好与接收方期望接收的数
据字节的位置对应,如上图所示。
所谓紧急数据,是指TCP用户认为很重要的数据,例如键盘中断等控制信号。当TCP段中的URG标志置位时,紧急指针表示距离发送顺序号的偏置值,在这个字节之前的数据都是紧急数据。紧急数据由上层用户使用,TCP只是尽快地把它提交给上层协议。
窗口字段表示从应答顺序号开始的数据字节数,即接收端期望接收的字节数,发送端根据
这个数字扩大自己的窗口。窗口字段、发送顺序号和应答顺序号共同实现信贷滑动窗口协议。检查和的检查范围包括整个TCP段和伪段头(Pseudo ——header)。伪段头是IP头的一部分,如上图所示。伪段头和TCP段-起处理有-一个好处,如果IP把TCP段提交给错误的主机,TCP实体可根据伪段头中的源地址和目标地址字段检查出错误。
源地址 | ||
目标地址 | ||
0 | 协议 | 段长 |
传输头 | ||
用户数据 |
3.用户数据报协议
UDP也是常用的传输层协议,它对应用层提供无连接的传输服务,虽然这种服务是不可靠
的、不保证顺序的提交,但这并没有减少它的使用价值。相反,由于协议开销少而在很多场合
相当实用,特别是网络管理方面,大都使用UDP协议。
TCP连接状态图
UDP运行在IP协议层之.上,由于它不提供连接,所以只是在IP协议之上加上端口寻址能力,这个功能表现在UDP头上,如下图所示。
UDP报头
UDP头包含源端口号和目标端口号。段长指整个UDP段的长度,包括头部和数据部分。检查和与TCP相同,但是任选的,如果不使用检查和,则这个字段置0。由于IP的检查和只作用于IP头,并不包括数据部分,所以当UDP的检查和字段为0时,实际上对用户数据不进行校验。