关于TCP那些小事儿

本文深入探讨了TCP的安全与性能机制,包括确认应答、超时重传、连接管理、流量控制和拥塞控制。滑动窗口、延迟应答和捎带应答策略提升了网络效率。此外,介绍了数据链路层的以太网标准,如MAC地址和MTU。同时,讨论了TCP异常情况及处理方法,以及数据包在网络中的分片与重组过程。
摘要由CSDN通过智能技术生成

TCP安全机制:

  • 确认应答机制
  • 超时重传机制
  • 连接管理机制
  • 流量控制
  • 拥塞控制

TCP性能机制:

  • 滑动窗口
  • 延迟应答
  • 捎带应答

滑动窗口(处于发送端):提高性能

  • 窗口大小是指无需等待确认应答而可以继续发送数据的最大值,例如窗口大小是4000个字节(4个段)
  • ACK响应报文中,携带的下一个序号表示在此序号之前所有数据都以接收到
  • 发送前4个段时,不需要等待任何ACK,直接发送
  • 收到第一个ACK后,滑动窗口向后移动,继续发送第五个数据,以此类推
  • 操作系统内核为维护这个滑动窗口,需要开辟发送缓冲区来记录当前还有那些没有应答,只有确认应答过的数据,才能从缓冲区删掉
  • 窗口越大,网络的吞吐率越高

窗口滑动:依赖ACK响应报文中的下一个序号进行滑动,而下一个序号又依赖于接收到的连续报文的最大序号相对来说,就是在这种情况之下

如果发生丢包,如何进行重传,有以下两种情况:

情况1: 数据包已抵达,ACK丢了。情况不严重,通过后续的ACK响应进行确认即可
情况2: 数据包直接丢了
1.当一段报文丢失时,发送端会一直收到1001这样的ACK响应
2.如果发送端主机连续三次收到“1001”的应答,那么就会重新发送对应数据1001-2000
3.这时候接收端收到1001之后,再次返回的ACK就是7001(因为2001-7000)接收端之前已经收到了,被放到接收端操作系统内核的接收缓冲区
也被称为"高速重发控制"(快重传)

流量控制:

流量控制:接收端处理数据的速度有限,如果发送端发送太快,导致接收端的缓冲区占满,这时候发送端如果继续发送,会造成丢包,会引起丢包重传等一系列连锁反应。因此TCP支持根据接收端的处理能力,来决定发送端的发送速度

  • 接收端将自己可以接受的缓冲区大小放入TCP首部中的“窗口大小”字段,通过ACK通知发送端
  • 窗口大小字段越大,说明网络的吞吐量越大
  • 接收端一旦发现自己的缓冲区快满了,就会将窗口大小设置成一个更小的值通知给发送端
  • 接收端一旦接受到这个窗口之后,就会减慢自己的发送速度
  • 如果接收端缓冲区快满了,就会将窗口置为0,这时发送方不再发送数据,但是需要定期发送一个窗口探测数据段,使接收端把窗口大小告诉发送端
  • 接收端将窗口大小告诉发送端:TCP首部中有一个16位窗口字段,存放了窗口大小的信息(TCP首部40字节选项中还包含了一个窗口扩大因子M,实际窗口大小是窗口字段的值左移M位)

堵塞控制:

原理: 拥塞窗口设置为1,以慢启动指数级增长的方式,达到一定阈值转变为线性增长的方式
可能出现问题的原因:
1.虽然滑动窗口能高效可靠发送大量数据,但如果在刚开始阶段就发送大量数据,仍然会出现问题
2.因为网络上有很多计算机,可能当前网络状态就比较拥堵,在不清除当前网络情况下,就发送大量数据,仍然会出现问题
3.TCP引入慢启动 机制,先发送少量数据,探探当前网络的拥堵状况,再按需使用多大速度传输数据

  • “慢启动”: 发送开始时,定义阻塞窗口大小为1,每次收到一个ACK应答,拥塞窗口加1;每次发送数据包时,将拥塞窗口和接收端主机反馈的窗口带线啊哦作比较,取较小的值作为实际发送的窗口。拥塞窗口增长呈指数级增长。初始时慢,但增长速度极快。
  • 慢启动的阈值: 为了不增长那么快,因此不能简单地窗口加倍.当拥塞窗口超过这个阈值时,不再按照指数方式增长,按照线性方式增长。当TCP开始启动时,慢启动阈值等于窗口最大值;
  • 在每次超时重发时,慢启动阈值会变成原来的一半,同时拥塞窗口置回1
    少量丢包,仅仅触发超时重传;当大量丢包时,就会是网络拥塞。
  • 当TCP通信开始后,网络吞吐量逐渐上升,随着网络发生拥堵,吞吐量会立即下降。
  • 拥塞控制是TCP协议想尽可能快的将数据传输给对方,但又避免给网络造成过大压力的折中方案

延迟应答:

原理: 接收到多个数据报时,不针对每条数据报响应ACK,而是延迟一定时间,接收缓冲区数据很快被处理,可用空间更大,返回的窗口大小字段就可以设置更大,使得网络吞吐量更大,传输效率更高

延迟依据: 数量.时间 都是由系统决定
数量限制:每隔N个包就应答一次
时间限制:超过最大延迟时间就应答一次

如果接收数据的主机立刻返回ACK应答,这时返回的的窗口可能较小

  • 假设接收端缓冲区为1M,一次收到了500k的数据,返回的窗口就是500k
  • 但处理端处理数据时间极短,10ms之内就把500k数据从缓冲区消费掉了
  • 在这种情况下,接收端处理还远没有达到自己极限,即使窗口再放大一些也能完成数据处理
  • 如果接收端等一会再应答,那么这是返回的窗口大小就是1M。窗口越大,吞吐率越大,数据传输效率就越高

捎带应答:

在延迟应答基础上,客户端服务器在应用层一发一收,此时ACK响应可以与服务器回应的数据一起发回给客户端

面向字节流:

创建一个TCP的socket,同时在内核创建一个发送缓冲区和一个接收缓冲区

  • 调用write时,数据回先写入发送缓冲区中
  • 如果发送的字节数太长,会被拆成多个TCP数据包发出
  • 如果发送字节数太短,就会先在缓冲区等待,等到缓冲区中的长度差不多,或寻找其他合适时机发送
  • 接受数据时,数据也是从网卡驱动程序到达内核的接收缓冲区,然后应用程序调用read从接收缓冲区取数据
  • 但TCP中存在一种连接,既有发送缓冲区,又有接收缓冲区,因此该连接既可以写数据也可以读取数据全双工

粘包问题

解决方法: 明确两个包之间的边界(实现应用层中用户程序使用协议对数据进行解析/格式化)
UDP不存在粘包问题

心跳检测机制:分布式项目,集群

(类似再应用层中实现类似TCP超时重传机制的功能,目的是判断双方连接是否还存活)客户端与服务端,服务端于服务端也可以建立连接,并使用心跳检测机制
定时发送心跳包(内容自定)

TCP异常情况:

  • 进程终止:进程终止会释放文件描述符,仍可以发送FIN,与正常关闭无区别
  • 机器重启:与进程终止情况相同
  • 机器掉电/网线断开:接收端认为连接还在,一旦接收端有数据写入,接收端发现链接已经断开,就会进行reset,即使没有写入操作,TCP也内置了一个保活定时器,会定期询问对方是都存在,如果不存在,就会将连接释放

数据链路层:

  • "以太网"不是具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容(规定网络拓扑结构,访问控制方式,传输速率等)
  • 以太网中的网线必须使用双绞线,传输速率有10M,100M等
  • 以太网是当前应用最广泛的局域网技术,和以太网并列的还有令牌环网,无线LAN等
    以太网帧格式:
  • 源地址和目的地址是指网卡的硬件地址(MAC地址),长度是48位,在网卡出厂时固化的

MAC地址

  • MAC地址用来识别数据链路层中相连的节点
  • 长度为48位,6个字节.一般用16进制以及冒号来表示
  • 在网卡出厂时确定,不能修改,MAC地址通常是唯一的(虚拟机中的MAC地址不是真正的MAC地址,可能会产生冲突;也有些网卡支持用户配置MAC地址)

MTU

MTU相当于发快递时对包裹大小的限制,这个限制是不同的数据链路对应的物理层产生的限制

  • 以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位
  • 最大值1500称为以太网的最大传输单元(MTU),不同网络类型有不同的MTU
  • 如果一个数据包,从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU,则需要对数据包进行分片
  • 不同的数据链路层标准的MTU是不同的
    数据封装,到数据链路层时,会根据MTU协议进行分片/拆包发送
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值