TCP和UDP协议
提到网络不得不说下TCP和UDP,这两个协议都是OSI模型中的四层协议,传输数据的形式是以字节流的形式。下面让我们一起初步了解一下TCP和UDP。
TCP——传输控制协议
TCP协议是面向连接的可靠传输协议。其功能是将应用层发来的8位字节表示的数据流分割成适当长度的数据段发给下层。
注:TCP的主要功能是对数据分段,那么这里就要提到两个名词MSS和MTS。
MSS是最大段长度为1480B。这里的段长度是指数据被TCP协议分段后每段中数据段的最大长度为1480B。
MTS是最大传输单元1500B。这个最大传输单元是指被TCP分段后每段数据包的最大传输单元为1500B。
知道了什么是MSS和MTS后大家就会发现,分段后每段数据部分最大是1480B,然而每段数据包却是1500B,那么相差这20B干嘛去了呢?别急,下面就来大家讲这20B去哪了。
接下来介绍下TCP包的首部,了解了首部就知道了那20B去哪里了。下面就给大家介绍TCP包首部的内容。(注:下图源自网络)
首部内容注释:
16-Bit source port:原端口,指的是发送数据的源进程端口。简单来说就是数据的发出地。大小为16位比特
16-Bit destination port:目的端口,指的是接收数据的进程端口。就是数据的的目的地。大小为16位比特
32-Bit sequence number:序号,代表当前TCP数据段第一个字节占整个字节流的相对位置。简单来说就是标识这是数据被分段发送后的第几个包。大小为32位比特。
32-Bit acknowledgement number:大小为32位比特,确认号,ACK为1时有效,上次成功收到的数据字节序号+1(如接收到的为1024--2048,则返回2049)。
4-Bit header length:大小为4位,比特TCP首部长度,最小为20字节,最大为60字节。相差的40字节为下面的Options选项的最大字节数。
resv:6位比特保留位。后面的URG紧急指针;ACK确认序号有效;PSH接收方应尽快将此报文段交给应用层;RST重建连接;SYN同步序号,用来发起一个新连接;FIN发端完成发送任务。
16 -Bit windows size:窗口大小,TCP流量控制,字节数,标识接受方可接受的数据字节数,最大为65535。大小为16位比特。
16 Bit TCP checksum:校验和,用于验证数据的完整性。大小为16位比特。
16 Bit urgent pointer:紧急指针,当上面的UPG为1时紧急指针才生效。用于发送紧急数据。大小为16位比特。
Options:选项(可没有)就是上面提到最大40字节的部分,此选项用于数据的加密等操作。
Data:数据段。
上述首部大小如果选项部分为空的话,正好是160位比特(8bit=1字节)20字节。这就是那相差的20字节
接下来说下TCP的数据分段过程如下图(注:图片源自网络)
如图数据按前面提到的数据段长度分段后每段数据包都会有一个TCP首部加上数据段。
接下来就是TCP很重要的建立与断开连接的过程(三次握手和四次断开)(注:下两图源自于网络)
建立连接过程(三次握手)
过程描述:
1.左主机向右主机发送SYN请求连接报文,请求与右主机建立连接。
2.右主机接受左主机的请求连接报文,并向左主机发送SYN报文和ACK确认包确认与左主机建立连接。
3.左主机收到有主机的SYN和ACK,并向右主机人发送ACK确认收到右主机发送的确认连接包,两主机连接建立。
注:ACK: TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1
SYN: 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对*同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此, SYN置1就表示这是一个连接请求或连接接受报文。
FIN: 即完,终结的意思, 用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。
断开连接过程(四次断开)
过程描述:
1.当左主机没有数据要发送时就要释放左主机的连接,左主机会发送一个报文(没有数据)其中FIN设置为1。
2.右主机收到FIN为1的报文后会发送一个确认与左主机断开的报文。
3.右主机还会发送一个FIN为1的报文(没有数据)给左主机释放右主机连接。
4.左主机收到确认报文和FLN为1的报文后会向右主机发送一个确认包问,进入到TIME_WAIT状态,等待断开连接。
注:四次断开时右主机发送的两个报文是同时发送的。
UDP——用户数据报协议
UDP协议是面向非连接的不可靠传输协议,功能是将数据流量压缩成数据包形式发送。
注:UDP协议不会将数据包分段,会将整个数据一起发送。
UDP也有一个十分简单的数据包首部,如下图(注:图片源自网络)
首部注释:
16-bit source port:源端口号,数据包发送的源进程端口。大小为16位比特。
16-bit destination port:目标端口号。书记包发送的目的进程端接口。大小为16位比特。
16-bit UDP length:UDP首部长度。大小为16位比特。
16-bit UDP checksum:校验和,检查数据是否损坏,若损坏直接丢弃。
UDP传输就很简单没有连接和断开过程,接受到数据流量之后打包直接发送。
TCP协议和UDP协议特点
首先说TCP协议,其主要特点就是可靠、稳定。主要运用于发送一些需要安全保护的数据,以及一些数据量比较大的文件。
注:
1.TCP可靠性主要体现在其传输机制:需要建立与断开连接的过程,以及在传输中的重传。
2.TCP用于发送数据量大的文件主要因为其会将数据分段,排序发送。与重传机制共同作用减少丢包率。
TCP也是有缺点的,其主要的缺点就是:满,传输效率低,占用资源高。这主要是因为它的连接过程。
下面来讲讲UDP协议,其特点就是速度快,系统消耗低。主要运用于发送对丢包容忍度大,需要速度快的数据传输。
其缺点在于:不可靠,不稳定。它没有TCP那些可靠的机制也不会数据分段,在数据传输时,如果网络质量不好,很容易出现丢包的情况。
推荐阅读
-
iOS实现类似微信和支付宝的密码输入框(UIKeyInput协议)
-
.Net WInform开发笔记(二)Winform程序运行结构图及TCP协议在Winform中的应用
-
python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例
-
Python实现TCP/IP协议下的端口转发及重定向示例
-
Python实现TCP协议下的端口映射功能的脚本程序示例
-
java 网络编程之TCP通信和简单的文件上传功能实例
-
Java编程实现基于TCP协议的Socket聊天室示例
-
php socket通信(tcp/udp)实例分析
-
python网络编程 使用UDP、TCP协议收发信息详解
-
.Net WInform开发笔记(二)Winform程序运行结构图及TCP协议在Winform中的应用