• TCP协议------简介部分


    TCP是一个巨复杂的协议,因为它要解决很多问题,而这些问题又带出了很多子问题和阴暗面。

    首先,我们需要知道TCP在网络OSI的七层模型中的第四层——Transport层,IP在第三层——Network层,ARP在第二层——Data Link层。在第二层上的数据,我们叫Frame,在第三层上的数据叫Packet,第四层的数据叫Segment。

        首先,我们需要知道,我们程序的数据首先会打到TCP的Segment中,然后TCP的Segment会打到IP的Packet中,然后再打到以太网Ethernet的Frame中,传到对端后,各个层解析自己的协议,然后把数据交给更高层的协议处理。

    TCP头格式

    注意几点:

    • TCP的包是没有IP地址的,那是IP层上的事,但是有源端口和目标端口。
    • 一个TCP连接需要四个元组来表示是同一个连接(src_ip, src_port, dst_ip, dst_port)准确说是五元组,还有一个是协议。但因为这里只是说TCP协议,所以,这里我只说四元组。
    • 注意上图中的四个非常重要的东西:
      • Sequence Number是包的序号,用来解决网络包乱序(reordering)问题。
      • Acknowledgement Number就是ACK——用于确认收到,用来解决不丢包的问题
      • Window又叫Advertised-Window,也就是著名的滑动窗口(Sliding Window),用于解决流控的
      • TCP Flag ,也就是包的类型,主要是用于操控TCP的状态机的

        TCP的状态机

            其实,网络上的传输是没有连接的,包括TCP也是一样的。而TCP所谓的“连接”,其实只不过是在通讯的双方维护一个“连接状态”,让它看上去好像有连接一样。所以,TCP的状态变换是非常重要的。

            下面是:“TCP协议的状态机” 和 “TCP建立链接”、“TCP断开链接”、“传输数据” 的对照图,我把两个图并排放在一起,这样方便在你对照着看。另外,下面这两个图非常非常的重要,你一定要记牢。

  • 相关阅读:
    cocos2dx A* + tiledMap
    cocos2dx A*算法
    A*算法
    在VS2012中使用GitHub
    史上最全设计模式导学目录(完整版)
    IT之家
    各种与视频编解码以及视频图像处理的应用相关的新技术,新方法,各种软件开发相关的算法,思想。
    linux下vim命令详解
    两篇很牛的vim使用技巧
    (转)linux下导入、导出mysql数据库命令
  • 原文地址:https://www.cnblogs.com/cgdblog/p/7441734.html
Copyright © 2020-2023  润新知