TCP概述
一、概述
1、什么是TCP
传输控制协议(英语:Transmission Control Protocol,缩写:TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能。用户数据报协议(UDP)是同一层内另一个重要的传输协议。
当应用层给TCP层传送大数据包时,通常受数据链路层最大传输单元MTU的限制,TCP会将包分片,并编号传送给IP层。等接收方收到数据包后,即会返回确认信息。另外会有校验数据是否准确
2、什么时候用TCP
对通信质量有要求,:整个数据要准确无误的传送给接收方。比如:qq传送文件,POP3等邮件协议时
3、怎么用TCP
案例: http协议底层就是使用的TCP协议
在java中可以通过socket编程(即ServerSocket等)来实现TCP连接
4、TCP的特点
TCP 是面向连接的运输层协议。即传输数据前需先建立连接确保网络通畅。
每一条 TCP 连接只能有两个端点(endpoint),每一条 TCP 连接只能是点对点的(一对一,一个发一个收)。
TCP 提供可靠交付的服务。
TCP 提供全双工通信,A与B通信,A发数据给B,B要给A发送返馈信息,表示数据是否收到。
面向字节流。
- 什么是面向字节流?
过程说明:
1、发送端读取文件内容到TCP缓存中
2、再从缓存中读取要传输的内容 加上 首部传输给接收方
3、接收方先把数据放到缓存中,再从缓存中读取字节
5、TCP存在的问题
1、TCP粘包问题(TCP是基于字节流的,说包可能不太确切)
-
产生原因
1、发送端:发送端的Nagle算法,如果发送数据包太小,会把较小的数据包合并
2、接收端:由于接收端会先把数据包放在缓冲区中,如果数据没有及时被进程取走,那么缓冲区可能同时存在多次发送的数据。然后被一次取走多个数据包。产生粘包现象
值的注意的是: 粘包并不都有问题。如果是不带结构的连续流(比如文件传输),那么就不需要分包
-
解决方法
一、发送端
1、通过编程。数据发送时,强制push,不用等缓冲区满了才发送==》关闭了优化算法,性能会降低
2、在数据包后加分隔符。 之后再通过分隔符进行分包
二、接收端
1、通过优化程序设计、精简接收进程工作量、提高接收进程优先级等措施,使其及时接收数据,从而尽量避免出现粘包现象...
参考链接:
https://zh.wikipedia.org/wiki/传输控制协议
https://www.codenong.com/cs105953441/
如果本篇博客有任何错误和建议,欢迎大佬们批评指正
我是知逆,我们下期见
Peace