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发送返馈信息,表示数据是否收到。

面向字节流

  • 什么是面向字节流?

image-20210105164912155

过程说明:

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

原文地址:https://www.cnblogs.com/mercurytan/p/14239821.html