zoukankan      html  css  js  c++  java
  • TCP总结

     
    TCP协议
     
    《计算机网络》谢希仁 及笔记
    TCP 的那些事儿(上):http://coolshell.cn/articles/11564.html
    TCP 的那些事儿(下):http://coolshell.cn/articles/11609.html
     
    TCP报文结构

    一、TCP报文结构如下: 
     
     固定首部长度为20字节,可变部分0~40字节,各字段解释:

    1. source port number:源端口,16bits,范围0~65525。
    2. target port number:目的端口,16bits,范围同上。
    3. sequence number:数据序号,32bits,TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
    4. acknoledgement number:确认号,32bits,期望收到对方的下一个报文段的数据的第一个字节的序号。
    5. header length:数据偏移,4bits,单位为4字节,它指出报文数据距TCP 报头的起始处有多远(TCP报文头长度?)。
    6. reserved:保留字段(图中,包含CWR,ECE),6bits,保留今后使用,目前置0处理。
    7. URG:紧急比特,1bit,当 URG=1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。
    8. ACK:确认比特,1bit,只有当 ACK=1 时确认号字段才有效。当 ACK=0 时,确认号无效。
    9. PSH:推送比特,1bit,接收方 TCP 收到推送比特置1的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。
    10. RST:复位比特,1bit,当 RST=1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
    11. SYN:同步比特,1bit,同步比特 SYN 置为 1,就表示这是一个连接请求或连接接受报文。
    12. FIN:终止比特,1bit,用来释放一个连接。当FIN=1 时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
    13. window size:窗口大小,16bits,窗口字段用来控制对方发送的数据量,单位为字节。TCP 连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。
    14. checksum:检验和,16bits,检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。
    15. urgent pointer:紧急指针字段,16bits,紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。
    16. options:选项字段,长度可变。TCP 首部可以有多达40字节的可选信息,用于把附加信息传递给终点,或用来对齐其它选项。

    二、抓取TCP报文,如下图:

     
     

     

    TCP与UDP
     
    TCP
    (Transmission Control Protocol) 
    UDP
    (User Datagram Protocol)
    面向连接、端到端和可靠的数据包(先为所发送的数据开辟出连接好的通道,然后再进行数据发送)。
    提供IP环境下的数据可靠传输:提供的服务包括数据流传送、可靠性(连续ARQ、超时重传)、有效流控(滑动窗口流量控制)、全双工操作和多路复用、拥塞控制等
    不面向连接
    不为IP提供可靠性、 流控或差错恢复功能
    可靠性要求高的应用 可靠性要求低、传输经济的应用
    Http、Telnet、FTP、SMTP等 NFS(网络文件系统)、SNMP(简单网络管理协议)、DNS(主域名称系 统)、TFTP(通用文件传输协议)
     
     

     
    三次握手、四次挥手
     
     TCP三次握手及其背后的缺陷:http://blog.csdn.net/xsf50717/article/details/47280825
    seq数据序号:本报文段所发送的数据的第一个字节的序号
    ack确认号期望收到对方的下一个报文段的数据的第一个字节的序号
    ACK确认比特:当 ACK=1 时确认号字段才有效
    SYN同步比特SYN 置为 1表示这是一个连接请求或连接接受报文
    FIN终止比特当FIN=1 时表明此报文段的发送端的数据已发送完毕,并要求释放运输连接
     
     
    因为client端要把已经准备好在缓冲区的数据发送完。
     
    1、防止网络拥塞导致客户端的ACK丢失而使得服务端无法关闭连接>>在2MSL内等待接收服务端的超时重传报文段
    2、使得本连接持续时间内所产生的报文段全部从网路中消失,不影响下一次
     
     
     
     
     
     
     
     
     
     
     





  • 相关阅读:
    RSS Reader in PC & iPhone
    Implementation Notes: Runtime Environment Map Filtering for Image Based Lighting
    A implementaion for 2D blue noise
    Specular Aliasing与Specular Leaking
    PBR Metallic/Roughness工作流中Albedo与F0的计算方法
    Mathematica .nb程序运行不下去的原因
    关于ddx/ddy重建法线在edge边沿上的artifacts问题
    make: 警告:检测到时钟错误。您的创建可能是不完整的。
    C++ 变长模板参数
    CMake set 语法
  • 原文地址:https://www.cnblogs.com/Doing-what-I-love/p/5535150.html
Copyright © 2011-2022 走看看