1.什么是TCP协议?TCP协议与UDP协议的区别
TCP协议提供全双工的可靠交付服务。TCP与UDP最大的区别就是:TCP是面向连接的,而UDP是无连接的。TCP除了具有面向连接和可靠传输的特性外,还在传输层使用了流量控制和拥塞控制机制。
2.TCP的主要特点:
1)面向连接的传输层协议
2)每条TCP连接智能又两个端点,是点对点的传输。
3)TCP提供可靠交付服务,提供的数据无差错、不丢失、不重复并且按序到达。
4)TCP提供全双工通信,两端分别设有发送缓存和接受缓存,用来临时存放双向通信的数据。
5)面向字节流。TCP中的“流”指的是流入到进程或从进程流出的字节序列。“面向字节流”的含义是:虽然应用程序和TCP的交互式一次一个数据块,但TCP把应用程序交下来的数据看成是一连串的五结构字节流。TCP不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块具有对应关系。
3.TCP的报文结构
TCP报文段首部的前20个字节是固定的,后面有4N字节是按需增加的选项。
固定长度部分意义如下:
1)源端口和目的端口各2字节。
2)4字节序号,从0开始,在一个TCP连接中传送的数据流中的每一个字节都按顺序编号。首部中的序号字段的值则指的是本报文段所发送的数据的
第一个字节的序号。
3)4字节确认号,是期望收到对方的下一个报文段的第一个数据字节的序号。
4)数据偏移占
4bit,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远,实际上就是
TCP报文段首部长度。注意:“数据偏移”的单位不是字节而是
32位字(共4字节),因此数据偏移的最大值是60字节,意味着
TCP首部最大长度为60字节。
5)TCP有6个标志位:
-
紧急URG:当URG=1时,表明紧急指针字段有效。它告诉接收方TCP此报文段中有紧急数据,应尽快交付给应用程序,而不要按序从接收缓存中读取。当URG置1时,需与首部中的紧急指针字段配合使用。紧急指针指出在本报文段中的紧急数据共有多少字节。即使窗口为0时也可以发送紧急数据。
-
确认ACK
-
推送PSH:发送方TCP把PSH置为1,并立即创建一个报文段发送出去,而不需要积累到足够多的数据再发送。
-
复位RST:当RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立传输层连接。RST置1还用来拒绝一个非法的报文段或拒绝打开一个连接。
-
同步SYN:用来建立一个连接。
-
终止FIN:应来释放一个连接。
6)2字节窗口:窗口值指示发送该报文段一方的接收窗口大小,在0到2的16次方–1之间。窗口字段用来控制对方发送的数据