您的位置:首页 > 理论基础 > 计算机网络

TCP协议和UDP协议的首部格式与连接过程

2017-08-21 10:30 330 查看
TCP/IP协议族的传输层协议主要有两个:TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议)。

TCP协议 TCP是面向连接的、可靠的进程到进程通信的协议。TCP提供全双工服务,即数据可在同一时间双向传输,每一个TCP都有发送缓存和接收缓存,用来临时存储数据。1. TCP报文段 TCP将若干个字节构成一个分组,叫做报文段(Segment)。TCP报文段封装在IP数据段中。 IP数据段=IP首部+TCP报文段 TCP报文段的首部格式,如下图所示

首部长度为20-60字节,以下是各个字段的含义:源端口:它是16位字段,为发送方进程对应的端口号目标端口号:它是16位字段,对应的是接收端的进程,接收端收到数据段后,根据这个端口号来确定把数据送给哪个应用程序的进程。序号:当TCP从进程接收数据字节时,就把它们存储在发送缓存中,并对每一个字节进行编号。编号的特点如下所述:* 编号不一定从0开始,一般会产尘一个随机数作为第1个字节的编号,称为初始序号(ISN),范围是0…232-1。* TCP每一个方向的编号是互相独立的。* 当字节都被编上号后,TCP就给每一个报文段指派一个序号,序号就是该报文段中第1个字节的编号。 当数据到达目的地后,接收端会按照这个序号把数据重新排列,保证数据的正确性。确认号:确认号是对发送端的确认信息,用它来告诉发送端这个序号之前的数据段都已经收到,比如确认号是X,就是表示前X-1个数据段都已经收到。首部长度:用它可以确定首部数据结构的字节长度。一般情况下TCP首部是20字节,但首部长度最大可以扩展为60字节。保留:这部分保留位作为今后扩展功能用,现在还没有使用到。控制位:这六位有很重要的作用,TCP的连接、传输和断开都是受六个控制为的指挥。各位含义如下:* URG:紧急指针有效位。(指定一个包快速传送(重要数据优先传送))* ACK:只有当ACK=1时,确认序列号字段才有效。当ACK=0时,确认号字段无效。(同意连接)* PSH :标志位为1时要求接收方尽快将数据段送达应用层。(不进入缓存)* RST:当RST值为1时通知重新建立TCP连接。* SYN:同步序列号。TCP需要建立连接时将这个值设为1。* FIN:发送端完成发送任务,当TCP完成数据传输需要断开连接时,提出断开连接的一方将这个值设为1。窗口值:它说明本地可接收数据段的数目,这个值的大小是可变的,当网络通畅时将这个窗口值变大以加快传输速度,当网络不稳定时减小这个值可保证网络数据的可靠传输,TCP协议中的流量控制机制就是依靠变化窗口的大小实现的。校验和:它是用来做差错控制的,与IP的校验和不同,TCP校验和的计算包括TCP首部、数据和其他填充字节。在发送TCP数据段时,由发送端计算校验和,当到达目的地时又进行一次校验和计算。若这两次的校验和一致,则说明数据基本是正确的。否则将认为该数据已被破坏,接收端将丢弃该数据。紧急指针:和URG配置使用,当URG=1时有效。选项:在TCP首部可以有多达40字节的可选信息。
2. TCP连接 TCP是面向连接的协议,它在源点和终点之间建立一条虚连接。 在数据通信之前,发送端与接收端要先建立连接。等数据发送结束后,双方再断开连接。TCP连接的每一方都是由一个IP地址和一个端口号组成的。(1) 连接建立 TCP建立连接的过程称为三次握手

从以上演示中可以将TCP三次握手总结一下过程:其中Seq表示请求序列号,Ack表示确认序列号,SYN和ACK为控制位。 可以看出,SYN控制位只有在请求建立连接时才被置为1第一次握手: PC1使用一个随机的端口号向PC2的80端口发送建立连接的请求,此过程的典型标志就是TCP的SYN控制位为1,其他五个控制全为0。第二次握手: 实际上是分两部分来完成的。(1)PC2收到了PC1的请求,向PC1回复一个确认信息,此过程的典型标志就是TCP的ACK控制位为1,其他五个控制位全为0,而且确认序列号是PC1的初始序列号加1。(2)PC2也向PC1发送建立连接的请求,此过程的典型标志和第一次握手一样,就是TCP的STN控制为1,其他五个控制全为0。 为了提高效率,一般将这两部分合并在一个数据包里实现。第三次握手: PC1收到了PC2的回复(包含请求和确认),也要向PC2回复一个确认信息,此过程的典型标志就是TCP的ACK控制位为1,其他五个控制位全为0,而且确认序列号是PC2的初始序列号加1。 这样就完成了三次握手,PC1与PC2之间即建立了TCP连接,可在PC2的cmd窗口运行以下命令 # netstat -na netstat命令:可以显示协议统计信息和当前的TCP/IP网络连接。 -a参数:显示所有连接和监听端口 -n参数:以数字形式显示地址和端口号。 使用netstat/? 可查看详细的说明 TCP使用面向连接的通信方式,这大大提高了数据传输的可靠性,使发送端和接受端在数据正式传输之前就有了交互,为数据正式传输打下了可靠的基础。
(2) 连接终止 参加交换数据的双方中的任何一方(客户或服务器)都可以关闭连接。TCP断开连接分四步,也称为四次握手,如图所示:

(1)服务器向客户端发送FIN和ACK位置1的TCP报文段。(2)客户端向服务器返回ACK位置1的TCP报文段。(3)客户端向服务器发送FIN和ACK位置1的TCP报文段。(4)服务器向客户端返回ACK位置1的TCP报文段。 在TCP断开连接过程中,有一个半关闭的概念。TCP一方(通常是客户端)可以终止发送数据,但仍然可以接受数据,这被称做半关闭。具体描述如下:(1)客户端发送FIN报文段,半关闭了这个连接,服务器发送ACK报文段接受半关闭。(2)服务器继续发送数据,而客户端只发送ACK确认,不再发送任何数据。(3)当服务器已经把所有数据发送完毕时,就发送FIN报文段,客户再发送ACK报文段,这样就关闭了TCP连接。 TCP在网络中的应用范围很广,主要用在对于数据传输可靠性要求高的环境,比如大家熟悉的网页浏览,它使用的HTTP协议就是依赖TCP提供可靠性的。在使用TCP协议时,通信方对数据的可靠性要求高,即使因此降低了一点数据传输率也是可以接受的。
TCP端口及应用


UDP协议 UDP是一个无连接、不保证可靠性的传输层协议,也就是说发送端不关心发送的数据是否到达目标主机,数据是否出错等,收到数据的主机也不会告诉发送方是否收到了数据,它的可靠性由上层协议来保障。 UDP的首部结构简单,在数据传输时能实现最小的开销,如果进程想发送很短的报文而不关心可靠性,就可以使用UDP。使用UDP发送很短的报文时,在发送端和接收端之间的交互要比使用TCP时少得多。 UDP的首部格式如下: 源端口号 +[b]目的端口号 +[b]UDP长度 +[b]校验和[/b][/b][/b]各字段的含义如下:源端口号:用来标识数据发送端的进程,和TCP协议的端口号类似。目的端口号:用来标识数据接收端的进程,和TCP协议的端口号类似。UDP长度:用来指出UDP的总长度,为首部加上数据。校验和:用来完成对UDP数据的差错校验,它的计算与TCP的校验和类似。这是UDP协议提供的唯一的可靠机制。 UDP协议在实际工作中应用范围也很广,例如聊天工具QQ在处理发送短消息时就是使用了UDP的方式。不难想象,如果发送十几个字的短消息也使用TCP协议进行一系列的验证,将导致传输率大大下降。有谁愿意用一个“反应迟钝”的软件进行网络聊天呢?在网络飞速发展的今天,网络技术日新月异,对于常用的简单数据传输来说,UDP不失为一个很好的选择。 在网络服务中也有用到UDP协议的,如下所示列出了UDP使用的一些常见端口:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息