一文读懂——TCP&UDP原理

       传输层定义了主机应用程序之间端到端的连通性。传输层中最为常见的两个协议分别是传输控制协议TCP(Transmission Control Protocol)和用户数据包协议UDP(User Datagram Protocal)。

 

一、TCP协议

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

 

1.TCP头部格式

一文读懂——TCP&UDP原理

 

主要字段:

源端口(Source Port):16位的源端口字段(16bit)包含初始化通信的端口号。源端口和源IP地址的作用是标识报文的返回地址。端口:2^16=65536,端口范围:0~65535

目的端口(Destination Port):16位的目的端口字段定义传输的目的。这个端口指明接收方计算机上的应用程序接口。

***(Sequence Number):该字段用来标识TCP源端设备向目的端设备发送的字节流,它表示在这个报文段中的第一个数据字节。如果将字节流看作在两个应用程序间的单向流动,则TCP用***对每个字节进行计数。***是一个32位的数。

确认号(Acknowledgement Number):TCP使用32位的确认号字段标识期望收到的下一个段的第一个字节,并声明此前的所有数据都已经正确无误地收到,因此,确认号应该是上次已成功收到的数据字节***加1.收到确认号的源计算机会知道特定的段已经被收到。确认号的字段只在ACK标志被设置时才有效。

保留(Reserved):6位置0的字段。为将来定义新的用途保留。

控制位(Control Bits):共6位,每1位标志可以打开一个控制功能,者六个标志从左至右是URG(Urgent Pointer field signficant 紧急指针字段标志)、ACK(Acknowledgement field significant 确认字段标识)、PSH(Push Function 推功能)、RST(Reset the connection 重置连接)、SYN(Synchronize sequence numbers 同步***)、FIN(No more data from sender 数据传送完毕)。

窗口(Window):目的主机使用16位的窗口字段告诉源主机它期望每次收到的数据的字节数。窗口字段是一个16位字段。

校验和(Checksum):TCP头包括16位的校验和字段用于错误检查。源主机基于部分IP头信息、TCP头和数据内容计算一个校验和,目的主机也要进行相同的计算,如果收到的内容没有错误过,两个计算结果应该完全一样,从而证明数据的有效性。

紧急指针(Urgent Pointer):紧急指针字段是一个可选的16位指针,指向段内的最后一个字节位置,这个字段只在URG标志被设置时才有效。

选项(Option):至少1字节的可变长字段,标识哪个选项(如果有的话)有效。如果没有选项,这个字节等于0,说明选项字段的结束。这个字节等于1表示无需再有操作;等于2表示下四个字节包括源机器的最大段长度(Maximum Segment Size,MSS),MSS是数据字段中可包含的最大数据量,源和目的机器对此达成一致。当一个TCP连接建立时,连接的双方都要通告各自的MSS,协商可以传输的最大段长度。常见的MSS有1024字节,以太网可达1460字节。

填充(Padding):这个字段中加入额外的零,以保证TCP头是32位的整数倍。

 

2.TCP连接的建立(三次握手)

一文读懂——TCP&UDP原理

 

三次握手过程:

(1)主机A (通常也称为客户端)发送一个标识了SYN的数据段,表示期望与服务器A建立连接,此数据段的***(seq) 为a。

(2)服务器A回复标识了SYN+ACK的数据段,此数据段的***(seq)为b,确认***为主机A的***加1 (a+1) , 以此作为对主机A的SYN报文的确认。

(3)主机A发送一个标识了ACK的数据段,此数据段的***(seq)为a+1,确认***为服务器A的***加1 (b+1) ,以此作为对服务器A的SYN报文的确认。

 

三次握手的核心确认每一次包的***。

seq***范围:2^32-1,达到最大值时,从零开始。

 

3.TCP关闭连接(四次挥手)

一文读懂——TCP&UDP原理

 

四次挥手过程:

(1)主机A想终止连接,于是发送一个标识了FIN,ACK的数据段,***为a,确认***为b。

(2)服务器A回应一个标识了ACK的数据段,***为b,确认序号为a+1,作为对主机A的FIN报文的确认。

(3)服务器A想终止连接,于是向主机A发送一个标识了FIN的数据段,***为b+1,确认***为a+1。

(4)主机A回应一个标识了ACK的数据段,***为a+1,确认序号为b+1,作为对服务器A的FIN报文的确认。

总的来说:就是服务器A想要断开连接时,ACK确认字段和FIN终止字段不能同时发送。

 

二、UDP协议

       UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去。UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。

      当应用程序对传输的可靠性要求不高,但是对传输速度和延迟要求较高时,可以用UDP协议来替代TCP协议在传输层控制数据的转发。UDP将数据从源端发送到目的端时,无需事先建立连接。UDP采用了简单、易操作的机制在应用程序间传输数据,没有使用TCP中的确认技术或滑动窗口机制,因此UDP不能保证数据传输的可靠性,也无法避免接收到重复数据的情况。

 

1. UDP头部格式

一文读懂——TCP&UDP原理

 

       UDP报文分为UDP报文头和UDP数据区域两部分。UDP头部仅占8字节,传输数据时没有确认机制。报头由源端口、目的端口、报文长度以及校验和组成。UDP适合于实时数据传输,如语音和视频通信。相比于TCP,UDP的传输效率更高、开销更小,但是无法保障数据传输的可靠性。

UDP头部的标识:

      16位源端口号:源主机的应用程序使用的端口号。

      16位目的端口号:目的主机的应用程序使用的端口号。

      16位UDP长度:是指UDP头部和UDP数据的字节长度。因为UDP头部长度为8字节,所以该字段的最小值为8。

      16位UDP校验和:该字段提供了与TCP校验字段同样的功能;该字段是可选的。

 

三、TCP/UDP协议的差别

差别

TCP

UDP

是否面向连接

面向连接

面向非连接

传输可靠性

可靠

不可靠

是否流量控制

流量控制

不提供流量控制

应用场合

传输大量数据

传输少量数据

速度

协议开销