[Linux] 传输层---TCP传输控制协议(下)

本文围绕TCP展开,介绍其面向字节流的特性,即数据读写通过缓冲区,读写无需一一匹配。还阐述了粘包问题的定义与解决办法,分析了TCP的异常情况及处理方式。同时说明了TCP保证可靠性和提高性能的机制,如检验和、滑动窗口等。

面向字节流

  • TCP的一个连接,既有发送缓冲区,也有接收缓冲区,对于这个连接,既可以读数据,也可以写数据:
    调用write时,数据会先写入发送缓冲区中;如果发送的字节数太长,会被拆分成多个TCP的数据包发出;如果发送的字节数太短,就会先在缓冲区里等待,等到缓冲区长度差不多了,或者其他合适的时机发送出去;
    接收数据的时候,数据也是从网卡驱动程序到达内核的接收缓冲区;然后应用程序可以调用read接收缓冲区拿数据
  • 由于缓冲区的存在,TCP程序的读和写不需要一一匹配

粘包问题

  • 什么是? 应用层多读或者少读数据,导致其它数据包无法被使用的情况;
  • 如何解决? 要明确两个包之间的界限:定长报文、特殊字符、自描述+定长报文、自描述+特殊字符;
  • 基于tcp的应用层协议可能会存在粘包问题,因为tcp是面向字节流的;udp不存在粘包问题,其使用定长报头+自描述的形式,把数据报一个一个的交付给应用层。

TCP异常情况

  1. 进程终止:进程终止会释放文件描述符,仍然可以发送FIN,和正常关闭没有什么区别;
  2. 机器重启:和进程终止的情况相同;
  3. 机器掉电/网线断开:接收端认为连接还在, 一旦接收端有写入操作,接收端发现连接已经不在了,就会进行reset; 即使没有写入操作,TCP自己也内置了一个保活定时器,会定期询问对方是否还在, 如果对方不在, 也会把连接释放。

TCP既要保证可靠性、又要提高性能

  • 保证可靠性:检验和、序列号确认应答机制超时重传机制、连接管理机制、流量控制、拥塞控制;
  • 提高性能:滑动窗口、快重传、延迟应答、捎带应答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值