zoukankan      html  css  js  c++  java
  • TCP协议

    TCP 是一个可靠的(reliable)、面向连接的(connection-oriented)、基于字节流(byte-stream)、全双工(full-duplex)的协议。发送端在发送数据以后启动一个定时器,如果超时没有收到对端确认会进行重传,接收端利用序列号对收到的包进行排序、丢弃重复数据,TCP 还提供了流量控制、拥塞控制等机制保证了稳定性。

    TCP协议解决:顺序问题、丢包问题、连接维护、流量控制、拥塞控制

    TCP状态位:SYN发起一个连接,ACK回复,RST重新连接,FIN结束连接

    TCP报文首部由源端口、目标端口、序列号、确认号、flags、窗口大小、可选项组成

    SYN:用于发起连接数据包同步双方的而出是序列号

    ACK:确认数据包

    RST:用来强制断开连接,通常是之前建立的连接已经不在了、包不合法或者是在无能为力处理

    FIN:通知对方我发完了所有数据,准备断开连接

    PSH:告知对方这些数据包收到以后应该马上交给上层应用,不能缓存起来

    可选项MSS:是TCP允许的从对方接受的最大报文段

    可选项Window Scale:窗口缩放选项

    MTU:以太网的最大传输单元(1500字节)

    IPv4数据包的最大大小为65535字节,当一个IP数据包大于MTU时,IP会把数据报文切割成多个小的片段

    利用IP包分片的策略,有一种对应的网络攻击方式IP fragment attack,就是一直传More fragments=1的包,导致接收方一直缓存分片,从而可能导致接收方内存耗尽

    MSS:TCP为了避免被发送方分片,会主动把数据分割成小段再交给网络层,MSS是其中最大的分段大小

    MSS = MTU - IP header头大小 - TCP头大小

    在以太网中 TCP 的 MSS = 1500(MTU) - 20(IP 头大小) - 20(TCP 头大小)= 1460

    4个定时器:重传定时器、坚持定时器、保活定时器、2MSL定时器

    客户端建立连接时状态:CLOSED、SYN-SENT、ESTABLISHED

    服务端建立连接时状态:CLOSED、LISTEN、SYN-RCVD、ESTABLISHED

    客户端关闭连接时状态:ESTABLISHED、FIN-WAIT-1、FIN-WAIT-2、TIME-WAIT、CLOSED

    服务端关闭连接时状态:ESTABLISHED、CLOSE-WAIT、LAST-ACK、CLOSED

    为什么TIME-WAIT后要等待2个MSL才关闭连接:

    1 个 MSL 确保四次挥手中主动关闭方最后的 ACK 报文最终能达到对端

    1 个 MSL 确保对端没有收到 ACK 重传的 FIN 报文可以到达

    2MS = 去向 ACK 消息最大存活时间(MSL) + 来向 FIN 消息的最大存活时间(MSL)

  • 相关阅读:
    如何为你的Airtest报告自定义名称
    Go打包构建 生成32位64位应用程序 加入前端项目
    DNS解析与DNS缓存清理
    sharepoint2013安装记录
    C# winform自托管WebApi及身份信息加密、Basic验证、Http Message Handler、跨域配置
    IM扫码登录技术专题(四):你真的了解二维码吗?刨根问底、一文掌握!
    IM开发干货分享:万字长文,详解IM“消息“列表卡顿优化实践
    阿里IM技术分享(五):闲鱼亿级IM消息系统的及时性优化实践
    使用oracle序列+oracle定时任务获取每月从1开始的流水码
    为什么我的数据库查询越来越慢
  • 原文地址:https://www.cnblogs.com/ctxsdhy/p/12101596.html
Copyright © 2011-2022 走看看