赵工的个人空间


专业技术部分转网页计算转业余爱好部分


 基础资料

首页 > 专业技术 > 基础资料 > TCP和UDP协议
TCP和UDP协议

UDP(User Datagram Protocal)用户数据报协议和TCP(Transport Control Protocol)传输控制协议是常用的传输层协议。无连接的UDP提供快速、不可靠的远程进程间的报文传输,而面向连接的TCP则提供有序的数据以保证主机间数据的可靠传输。
无论面向连接的TCP,还是无连接的UDP,都是传输层通过主机地址和端口号标识运行于主机上的进程。如果连接到主机或者服务器,就会与一个常用端口相连接:

端口类型

范围和说明

常用服务器端口

取值1~255,对官方标准的、工业界的常用程序进行标识

不常用服务器端口

取值为256~1023,为开发商在必要时开发出的程序预留的端口

客户端口

取值1024~5000,自由端口,当客户进程开始运行并申请时随机产生的新端口

预留端口

取值5001~65535,为其他服务预留的端口号

套接字对描述了两个主机之间,即包含各自的IP地址和端口的信源主机和信宿主机之间的连接。其中的端口标识了运行于主机内的进程或者程序,使用16bit表示。
对于传输层中的TCP或UDP通信,需要使用协议、信源机IP地址、信源应用程序端口、信宿机IP地址、信宿应用程序端口来描述。

一、传输控制协议TCP:

TCP是TCP/IP协议栈中传输层唯一的面向连接的协议,包括会话建立、确认、顺序化、流量控制、会话终止等过程。一旦建立一个会话,TCP会建立一个虚连接,通信应用程序之间就可以在此连接上传输数据。为了保证传输过程中主机不会丢失数据,面向连接的协议交换序号和确认信息,如果检测到丢失的数据或帧,则采用重传数据的方式。
当主机空闲时,即没有数据交换,两个主机间要发送保持活跃小报文以维持虚连接。面向连接的接收方的主机,通过使用流量控制机制,通知发送方是增加或减少发送的数据量,从而调整通信量。TCP通过滑动窗口机制实现流量控制。

1.TCP头:

TCP报文中,报头部分20字节,是固定的,后面选项部分的长度必须是4字节的整数倍,并且最大到40字节,即TCP报文的报头大小范围为20~60字节。由RFC793定义。


端口

目的端口

序号

确认号


预留

UAPRSF

窗口

校验和

紧急
指针

选项
填充

数据

2

2

4

4

4bit

6bit

6bit

2

2

4

4

16

·源端口:2字节,标识了发送主机的通信进程端口号。
·目的端口:2字节,标识了接收主机的通信进程端口号。
·序号:4字节,在TCP上发送的数据有一个序号,标识了每一个发送数据报中的第一个字节。初始值一般不为0,是使用某种算法计算初始序号。
·确认号:4字节,等于对方前一次发送的序号加上长度的值,暗示已收到了到该点的所有数据,指示主机期望从对方接收的下一个序号值。
·数据偏移量:4bit,指出TCP头后的高层数据从哪里开始。因为TCP头的大小可变,TCP利用数据偏移量精确地指示此帧中高层数据的第一个字节在什么位置,也就是报头的长度。
·保留:6bit,被保留以备将来使用,总为0。
·控制标记:6bit,有UAPRSF6种标记。
U:Urgent,紧急位,由发送主机置位,用以表示包含在此帧中的数据有高优先权
A:Acknowledgement,确认位,置此位表示此帧包含一个对前面收到数据的确认
P:Push,急迫位,当发送主机置此位,接收者就必须立即发送数据给高层进程
R:Reset,当用户中止某一会话或者某一连接发送错误时,置此位表示应复位此会话
S:Synchronization,同步位,通过同步序号在端口/套接字之间建立一个会话
F:Finish,终止位,关闭一个已建立的会话并表示发送者已经完成了数据发送
·窗口:2字节,以字节为单位定义了一个TCP主机能够接收的数据的最大数,可以用此字段进行流量控制。窗口为0表示此主机现在不能接收数据,通常表示拥塞或者缺乏资源。
·校验和:2字节,用来校验整个TCP报文段的所有数据的正确性,包括TCP报头和数据。计算校验和使用了伪报头的概念,包括信源机IP地址和信宿机IP地址:

源端IP地址32bit

目的端IP地址32bit

填充域8bit

协议8bit

TCP数据报长度16bit

其中的填充域为0,协议值为6。伪头信息存储于称为TCB(传输控制块)的TCP内存缓存中。TCP计算校验和的算法是把若干个16bit的字相加,附加的填充字节为0,只是为了校验计算而使用。校验和在信源端计算,在信宿端验证。
·紧急指针:2字节,只有当设置了紧急比特位后才存在,标识此帧中紧跟在紧急数据之后的字节,把此值和报头中的序列号相加就得到报文段数据部分中最后一个紧急字节的序列号,即该序列号之前的数据都是紧急数据。
·TCP选项:可变长度,发送主机可以选择标识此TCP主机将要接收的最大报文段长度。每个选项由选项类型、选项总长度和选项值组成。

选项类型8bit

总长度8bit

选项值(变长)

不同的选项类型,选项值所占的字节数不同,因此选项的长度可变。下面是常见选项:

选项名称

选项类型

总长度

选项值

选项表结束

0

1字节

无操作

1

1字节

最大报文段长度

2

4字节

用于指明本端所能接收的TCP报文段里数据的最大长度

窗口扩大因子

3

3字节

移位寄存器,设定窗口扩大因子

时间戳

8

10字节

时间戳+时间戳应答,利用它来计算链路往返时间

TCP是传输层协议,其实现依赖于物理层。在传输中,TCP报文被封装在IP数据报中。
TCP伪头提供了对IP头错误控制,可以检测误导帧,保证正确的目的主机接收发送数据报。

IP源地址

IP目的地址

0

IP协议

TCP长度

4

4

2

2

 

2.TCP操作:

TCP是一种面向连接的传输层协议,即利用TCP进行数据传输前,通信双方首先要建立连接,在数据传输完成后释放该连接。通信双方的连接也被称为虚路径。在TCP中数据传输包括3个过程:建立连接、数据传输和释放连接。
①建立连接:
TCP连接的建立和释放都是采用客户机/服务器模式来实现的。服务器进程准备好后首先进入等待连接状态,并将其IP地址和端口号公开给客户进程。任何客户机进程在需要与服务器进程进行数据传输之前,首先向服务器进程发起建立连接的请求;在等待连接的服务器进程接收到请求后,如果同意请求就向客户机进程发送同意客户机建立连接的应答;最后由客户机进程确认服务器进程的应答,同时也就确认了通信双方连接的建立。这个过程常称为3次握手过程。
TCP通过对TCP头中的S置位而开始一个会话,此位表示向目的TCP进程请求同步。接收主机的TCP会话进程必须对收到的S请求作确认,并且发送它自己的S请求,此S请求同样也被以前的主机确认。
②释放连接:
数据传输结束后,通信双方的任何一方都可以发出释放连接的请求。原则上,当一方没有数据发送时,就可以发送一个终止位F为1的报文段来请求终止这个方向的连接。当对方接收到该请求报文段并确认后,那么这个方向的连接就被关闭。而另一个方向的连接如果没有关闭,还可以进行数据传输。只有两个方向的连接都关闭后,TCP连接才被完全释放。TCP释放连接需要4次握手来实现。
③数据传输:
当TCP收到一个数据流报文时,将报文分成段,并给数据报的每一个字节分配一个序号,这些序号需要从目的返回相应的确认以保证接收者已经收到了从发送者发来的数据报中的每一段。TCP保持包含在主机缓存(TCB传输控制块)中的这些段的拷贝,如果没有得到确认,就认为此数据报丢失,并且重传此数据报。
为了维护逻辑电路,即使没有数据需要发送,TCP也要发送一个不包含任何高层协议数据的保留数据报,此帧不包含任何数据,长度字段值为0。
TCP为了保证数据的传输,还建立了流量控制、拥塞控制和差错控制机制,其中包括相应的算法和控制方式。

3.多路复用:

多路复用功能,使得TCP可以在两个主机间同时建立和维护多条通信路径,因为通常运行多个应用和服务,如Telnet、FTP、HTTP等,TCP必须对这些进程进行区分并且管理和维护这些进程的通信。多路复用同样也允许一个主机同时区分和维护与多个主机间的会话。
为了实现这一点,TCP采用端口来区分和管理通信,有两种主要的端口类型:服务器端口和客户端口。每当一个主机启动一个进程时,就打开一个端口,并给此进程分配资源。当此进程不再需要该端口时,就释放于此端口相关联的资源以便重新分配。TCP使用这些端口来标识发送主机上的某一进程应该与接收主机上的哪个进程相连接。主机上的端口与网络层逻辑IP地址一起标识了主机上的一个唯一进程,也称为套接字。一旦建立起主机间的TCP连接,这两个套接字,也称为套接字对,就形成一个连接。套接字对使得一个主机可以将同一主机上的多个连接与不同主机上的连接区分开来。

4.TCP端口:

TCP常用端口建立客户/服务器的关系。下表给出常用的TCP端口号:

十进制值

关键字

协议

描述

20

FTP--数据

TCP

文件传输协议(数据)

21

FTP

TCP

文件传输协议(控制)

23

Telnet

TCP

Telnet

25

SMTP

TCP

简单邮件传输协议

49

LOGIN

TCP

注册主机协议

53

DNS

TCP

域名服务

63

VIA-FTP

TCP

VIA-服务-FTP

70

Gopher

TCP

Gopher文件服务

80

WWW

TCP

Web服务

二、用户数据报协议UDP:

UDP是一种无连接的非常简单的协议。无连接协议只发送数据,而不检查接收方主机是否真正收到了该数据。无连接协议依赖于其他协议来保证发送的数据到达接收方及恢复丢失的数据。无连接协议虽然不可靠,但快速、开销小。
RFC768描述了用户数据报协议UDP,提供了远程主机上应用之间的快速但不可靠的报文传输。发送方发出的每一个UDP数据报都是独立的,都携带了完整的目的地址。每个数据报都可以被网络系统独立路由,因此从同一信源发往同一信宿的多个UDP报文可能选择不同的路径到达信宿,到达的先后顺序也可能不同于发送顺序。
UDP不建立会话,也不对发送的数据顺序化,也不对接收的数据确认。UDP只是标识源和目的的端口,只是在通信设备间提供一个双向的管道,依赖于IP进行分段和报文重组。UDP可用于实现一对多数据发送,如广播、多播;更多情况下用于实时性要求较高但可承受一定的数据错误的应用,如实时语音、实时视频等;也可用于只需要简单数据交换的应用,如DNS服务。

1.UDP端口:

公共的UDP端口:

十进制值

关键字

协议

描述

53

DNS

TCP/UDP

域名服务

67

BootPS

UDP

引导协议服务器

68

BootPC

UDP

引导协议客户

69

TFTP

UDP

简单文件传输协议

80

SNMP

UDP

简单网络管理协议

2.UDP头:只有8字节,RFC768中定义

源端口

目的端口

数据报总长度

校验和

数据

2

2

2

2

 

·源端口:2字节,标识源端口
·目的端口:2字节,标识目的端口
·长度字段:2字节,指定数据报中包含多少数据,最小值为8字节
·校验和:UDP没有检测和纠正丢失或重复帧的机制,但有检测被破坏帧的方法
UDP在进行校验时也使用伪头,其中包含了源IP地址和目的IP地址:

源端IP地址32bit

目的端IP地址32bit

填充域8bit

协议8bit

TCP数据报长度16bit

其中的填充域为0,协议值为17。UDP计算校验和的算法是把若干个16bit的字相加,因此需要一个填充字节0,使字节总数为偶数。填充的字节只是为了计算校验和而使用。
UDP伪头信息存储于称为TCB(传输控制块)的UDP内存缓存中,并不会向外传输。

3.UDP数据报的封装:

UDP建立在IP之上,其数据的传输依赖于IP数据报来实现,即需要将UDP数据报封装到相应的IP数据报中通过网络进行传送。传送到信宿机的IP层后,由信宿机的UDP根据目标端口号发送到接收该数据的相应应用程序进程。

Copyright@dwenzhao.cn All Rights Reserved   备案号:粤ICP备15026949号
联系邮箱:dwenzhao@163.com  QQ:1608288659