TCP面向连接的本质
【TCP建立连接的本质】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有哪些状态可以网络上搜索一下,这不是这篇的重点。
转载自:https://www.jianshu.com/p/78c...
推荐阅读
- CAP原理详解
- 使用CompletableFuture进行多任务并行处理
- 线程池拒绝策略-RejectedExecutionHandler
- 芯片|异构集成 与 异构计算
- mybatis|(附源码)计算机毕业设计ssm电影票购票系统
- mybatis|Mybatis—MappedStatement
- java|卧槽!迅雷的代码竟然被扒了精光!
- java|Java 内存泄漏的排查
- 程序员|29岁vivo员工吐槽(看完阿里P9大牛的“Java成长笔记”我悟了)