TCP协议概述
- TCP协议全称Transmission Control Protocol(传输控制协议),它是传输层协议。
- TCP协议是一个点对点的协议、每一个TCP连接都有一个发送方和一个接收方,在每次进行数据传输之前都需要建立TCP连接。
- TCP是面向字节流的协议。我们要传输的数据最终都要被转换成字节流,才能完成传输。
- TCP协议具备可靠性传输、拥塞控制、流量控制等功能。
TCP协议的首部格式
TCP协议的首部格式为:固定长度的20字节+选项(长度可变),其大致分配如下:
端口和目的端口源
分别表示发送方端口和接受方端口
序号
表示数据部分的第一个字节的序号
确认号
表示当接受方收到发送方的数据后,希望发送方下一次发送数据的第一个字节的序号
数据偏移
是一个4位的二进制值,表示的是TCP首部的大小,单位是4个字节。四位二进制表示的最大值是1111,也就是TCP首部最大为60字节,出去固定长度的20字节外,长度可变的选项最大为40字节。
保留
保留为今后使用,一般设置为0
控制位
控制位表示的是一个个的状态值。URG如果为1,说明这是一个紧急数据包,那么这个数据包的优先级高,无需排队,直接发送。ACK如果为1表示确认收到,SYN=1表示这是一个建立请求的数据包。如果对方同意,那么恢复的数据包中SYN=1,ACK=1。RST=1表示TCP连接出现了严重错误。FIN=1表示数据传输完毕,断开连接。
窗口
窗口值是作为让对方设置其发送窗口的大小的数值,因为对方的接收缓存是有限的。所以要根据其就收数据的能力来设置发送方窗口的大小。
检验和
检验和检验的区域包括首部和数据部分
紧急指针
选项
填充
三次握手
第一次握手,客户端发送一个SYN=1,ACK=0,seq = x的请求连接数据包给服务器。
第二次握手,当客户端发现这是一个请求连接的数据包,同意连接就像客户端发送一个SYN=1,ACK=1,ack=x+1,seq = y的数据包
第三次握手,客户端收到服务器发送的同意连接的数据包后,发送一个SYN = 0,ACK=1,seq = x+1,ack = y+1的数据包,如此三次握手完成,客户端与服务器成功建立连接,发送数据。
四次挥手
第一次挥手,客户端发送FIN=1,ACK=0,seq = x表示客户端希望断开连接。
第二次挥手,服务器发送FIN=0,ACK=1,ack=x+1,seq=u;表示服务器同意将连接断开,然后服务器继续发送它为发送完的数据。
第三次挥手,服务器发送FIN=1,ACK=1,ack=u+1,seq=w;表示所有的数据已经发送完毕,正式断开连接。
第四次挥手,客户端发送FIN= 0,ACK=1;表示同意服务器断开连接,正式断开。
重传机制
重传超时
发送方在重新发送数据之前,等待接收方发送确认收到之间的时间间隔,如果超过了这个时间间隔,就会进行超时重传。
超时重传
在重传超时的时间间隔内,没有收到接收端确认收到的数据包,就会分为之前的数据包丢失,如此发送端就会重新发送数据包。
快速重传
发送端一次发送多个数据包,如果连续三次收到接收端发送的相同的确认收到数据包,发送端就会就知道那个数据包丢失了,就会对该数据包进行重传,但是缺点是,不知道重传一个,还是之后的多个。
SACK方法
SACK方法在选项里加入一个SACK的东西,把缓存的“地图”(记录着哪些收到,哪些没有收到)发送给对方,这样对方就会根据这个地图把没有收到的数据包进行重传。
拥塞控制的四个算法
慢开始
发送端最开始执行慢开始,一开始只发送一个数据包,收到接受反的确认后,发送两个,再收到对方的确认后,发送4个,依次递增;
避免拥塞
给慢开始设置一个门限值ssthresh,当达到这个门限值是,数据包的数量不在以2倍增加,而是依次加1,如果出现了超时,就另ssthresh=当前数据包数量/2然后进入快开始
快重传
一旦发送方收到接收方发送三个相同的确认数据包,说明有数据包出现了丢失,发送端就会快速对这个数据包进行重传。
快恢复
一旦发送端收到接收端发送三个相同的确认数据包。说明出现了数据包丢失,这是将每次发送的数据包数量减半,同时把ssthresh的值也设置为这个,然后执行避免拥塞算法(加法当大),每次对发送的数据包数量加1。
UDP协议概述
UDP协议全称User Datagram Protocol,它不提供复杂的控制机制,在出现网络拥堵的情况下,UDP协议也不进行流量监控等避免网络拥堵的行为。即使出现了数据丢包,也不进行重传,当数据包的顺序出现了混乱,也没有纠正功能,但它的优点是效率高。性能开销小。
UDP协议的特点
面向报文传输,不具备可靠性,也不使用拥塞控制,适合多媒体通信的要求。
支持一对一,一对多,多对一,多对多。
UDP首部小,占8个字节。
TCP协议与UDP协议的区别
- TCP协议是面向连接的而UDP协议无连接;
- TCP协议安全可靠,UDP协议不可靠;
- TCP以字节流的形式传输,UDP协议按照数据报文段的形式传输;
- TCP的传输效率低,UDP的传输效率高;
- TCP所需要的的资源多;UDP协议需要的资源少;
- TCP的首部大小为20-60字节,UDP的首部为8字节;