一、非可靠传输的协议——UDP
1.1 UDP的报文格式
(1)UDP长度:表示整个UDP数据包的长度(报头+载荷);
(2)校验和:用于验证UDP数据包在传输过程中有没发生比特翻转(由于各种原因导致的比特位变化,如0变为1,接收方在收到数据包后会重新进行校验和的计算,如果与UDP数据包中的校验和不同,就会丢弃这个数据包),前面所学的HTTPS中证书的数字签名本质上就是一段被加密的校验和。
1.2 UDP的特点
(1)无连接:知道对方的IP和端口号就能进行传输,不用建立连接
(2)不可靠:没有确认和重传机制,如果发送的数据报没有到达对方,UDP不会做出任何处理,对方也不知道发送方向自己发送了数据
(3)面向数据报:不能灵活控制数据读写的次数和数量
!!!但是除此之外,UDP在大部分情况下为TCP所取代的原因还有:由于UDP报头中UDP长度的大小仅有16位,只能够表示64kb的大小,对于现在来说是不够的(可能随便发送一个图片就要几个mb ),如果非要用UDP来传输的话,就需要拆分和组合数据报,非常麻烦
二、可靠传输的协议——TCP
2.1 TCP的报文格式
目前只讨论部分字段,其余字段将在后面了解到:
(1)16位源端口号/16位目的端口号:传输层的核心内容
(2)4位首部长度:4位,表示整个数据包的大小,使用4字节为单位(如4个比特位最多表示15,15x4=60字节)
(3)保留(6位):为未来可能的协议扩展或新功能预留的,目前保留位通常被设为0
(4)6位标志位:包含URG等6个字段,是TCP最核心的6个标志位
2.2 TCP的核心机制
2.2.1 保证传输可靠性的机制
这里所说的可靠性并不是说A给B发送一组数据,B一定能收到,而是尽可能的让B收到,就算B收不到,A也能知道
2.2.1.1 核心机制一——确认应答
如A给B发送一组数据,B接收到以后,会向A发送一个应答报文。
什么是应答报文?
答:应答报文也是一个TCP数据报,但是它的载荷不携带任何信息,在发送应答报文时,只需要将6位标志位中的ACK设置为1即可。
确认应答的过程是怎么样的?(图示)
但是,对于上述确认应答的过程,有没有可能A给B发了不止一个数据报,而B的应答报文发错对象了呢?如图: