HTTP-应用层协议:
1.0与1.1最大的区别在于,HTTP1.1可以支持长连接,头部加入:Connection:keep-alive,即可保持长连接,那么HTTP是如何实现保持长连接的呢?
TCP-UDP-传输层协议:
UDP:面向无连接的协议,数据封装成数据包,发送出去,不保证数据是否送达
TCP:面向连接的协议,所谓面向连接,就是在数据传输之前A和B之间保持一条”连接“,通过这条“连接”,所有的数据被可靠,有序的在两者之间传输
“连接”:这个连接并不是真正意义上的连接,称之为“虚电路”,其实也并不是说A和B之间震荡建立了一条连接,或者说保证了路由路径是一致的,因为路由选择并不是传输层控制的,传输层负责流量控制和差错控制,因此所有的拥塞控制和路由选择其实是IP协议的工作,所以说,TCP怎能保证路由路径是一样的呢,如果出现网络拥堵,必然会重新选择路径。那么这个连接究竟是什么呢?
答案是:状态和序列号,以及错误校验(可以查看TCP和UDP的请求头,就会发现两者之间的差距了),其实所谓的TCP三次握手请求连接,无非就是初始化一个序列号,保证后面的数据有序到达,同时TCP还支持重传,错误校验,保证数据的可靠性,当然UDP也提供校验。
状态:TCP与UDP的区别还在于TCP有很多状态,这个状态保证了A和B如何处理自己收到的数据包,因为如果状态是连接状态,大家可以愉快的通信,但是当一方断开连接,那么之后收到的数据包就该丢弃掉才是正确的选择,所以状态也是保证TCP可靠性的重要因素,具体了解TCP有哪些状态可以网络上搜索一下,这不是这篇的重点。
IP:网络层协议:
IP属于网络层协议,众所周知它是不可靠的,(PS:当初考试背的时候TCP/IP,可靠不可靠,哈哈),因为IP协议是不可靠的,所以不能保证数据有序无误的到达,这就需要TCP/UDP进一步完善。这里要说的不是IP的可靠不可靠,而是说IP进行路由选择,提供拥塞控制,在A和B之间传输IP数据包时,会根据网络状况调整合适的路由路径,把数据包一步一步传到目的IP地址,如果IP包超时或者丢弃,传输层的TCP会因为超时重新封装数据交给IP协议重新发送,而UDP就不会,这就是TCP的面向连接所做到的可靠性的本质。