面向字节流
创建 TCP连接时,会同时在内核中创建 发送缓冲区 和 接受缓冲区 。
调用 write() 方法发送数据时,数据首先会被保存在缓冲区中 。如果数据本身很大,则分多个数据包分别发送,如果数据很小,则先保存在缓冲区中,后续等待数据稍微多一点时再重新发送 。
调用 read() 方法读取数据时,直接从缓冲区读取 。
由于每个 TCP 连接都有独立的发送缓冲区和接受缓冲区,因此这个概念也叫全双工 。
TCP 常见问题
上面我们总结了 TCP 如果保证效率以及安全性,下面我们来看看关于 TCP 常见的问题及解决方案:
黏包问题
顾名思义,黏包问题是指数据传输到接收端时,接收端缓冲区看到的是一连串字节数据,无法区分哪一段属于一个完整的数据包 。
黏包问题产生的原因:
发送端发送数据时没有在数据包之间做区分接收端收到数据后不会提交到应用层处理,而是由应用层主动从缓冲区读取,当读取的速率小于写入的速率时,就可能造成黏包
由此可以看出,处理黏包问题的关键在于找到数据包之间的间隔,一般情况有有以下几种解决方案:
格式化数据:在数据包之间通过标识符来做分割,但需要特别注意数据中不能包含分割符 。发送长度:每次发送数据包是,在数据报头添加标识记录数据包的长度固定数据包的长度,每次读取固定长度的字节符号作为一个完整数据包断开问题总结
最后我们来回顾一下本篇都整理了哪些内容:
【TCP 协议如何保证性能】参考
- 如何水培薄荷?
- 石狮为什么那么富,为什么石狮的人都那么凶?如何跟他们相处?
- 石英钟机芯结构,石英钟机芯怎么保养?
- 下半年生的如何算虚岁,下半年出生的人,上半年怎么算虚岁
- 网络知识 二 基础——OSI七层与TCP/IP四/五层网络架构
- 揭秘:三国中关云长如何试探刘备还荆州的底线?
- 武则天是如何让李世民临幸她的
- 常山之战是平定安史之乱的关键战役吗?是如何以少胜多的
- 【宇麦科技】苹果全家桶如何联动群晖NAS,让你的“苹果”更香
- 上班族养柯基白天怎么办,如何度过养柯基犬的新手期?