TCP的协议特点(对于《Linux高性能服务器编程》的部分摘录以及自己的部分见解)

TCP协议是互联网通信的重要基石,其主要特点包括面向连接、字节流和可靠传输。在连接建立后,双方通过全双工的连接进行数据交换,并通过发送应答机制和超时重传来确保数据的可靠性。字节流特性允许数据无边界地发送和接收。当遇到粘包问题时,可能因数据包合并或不完整接收导致。解决粘包通常需要通过设置包头、固定报文长度或添加额外标识来明确数据边界。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.TCP协议特点为面向连接、字节流和可靠传输

面向连接:使用TCP协议通信的双方必须先建立连接,然后才能开始数据的读写。双方都必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP连接是全双工的,即双方的数据读写可以通过一个连接进行。完成数据交换之后,通信双方都必须断开连接以释放系统资源。

字节流:发送端执行的写操作次数和接收端执行的读操作次数之间没有任何数量关系,这就是字节流的概念﹔应用程序对数据的发送和接收是没有边界限制的。TCP先将数据存放于发送缓冲区中,等待,等待发送数据的时候,发送缓冲区中等待发送的数据

TCP为可靠传输机制:

1.TCP采用了发送应答机制,即发送端每个TCP报文都必须收到收方的应答报文,才会认为TCP报文传输完成.

2. TCP协议采用了超时重传机制,在发送发发送完TCP报文段之后 启动定时器,如果在规定时间内未收到应答的话,将会重新发送报文段

3.TCP报文段最终是以IP数据报发送的,而IP数据报到达接收端可能会乱序,,重复,所以TCP协议还会对TCP报文段进行乱序重排,去重的操作

TCP粘包

什么是tcp粘包?拆包? 答:c向s发送2个数据包,那么可能会出现3种情况:1 正常,2 两个包一同发送,3 s接收到不完整的或多出一部分的数据包。

原因是什么?答:1 c一次发送的数据大于套接字缓冲区,拆包,2 c一次发送数据小于套接字缓冲区大小,网卡将多次发送的数据一次发送到s, 3 c不及时读取 4 tcp报文长度大于分段长度。

如何解决?答:c添加包首部,长度 !固定每次发送的报文长度,不够补0.! 约定好包的边界,添加首部尾部标识,或者每次发送完数据之后在接收端对发送端发送一个标志信息来代表发送成功,有这么一步之后再进行下一步的发送!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值