zoukankan      html  css  js  c++  java
  • 传输层之TCP

    ---恢复内容开始---

                                                     

    坞无尘水槛清,相思迢递隔重城。 

    秋阴不散霜飞晚,留得枯荷听雨声。    --李商隐

       

    上一篇中我们了解了socket编程是基于TCP或者UDP,所以我们有必要对TCP,和UDP先进行学习。本篇主要学TCP.

    1.TCP属于那一层?

    传输层

    2.TCP的定义

    TCP是 可靠的(如何可靠),  面向连接(三次握手和四次释放)  字节流(每个TCP报文都带着若干个字节) 服务;

    a.先说面向连接

      (1)三次握手和四次握手(看图说清楚)

    http://blog.csdn.net/fw0124/article/details/7452695

    (2)连接3次,释放4次。

        为什么连接不是4次? ack和syn 一块发来了。

     为什么不是2次?防止过期syn到服务器端。两次就会建立一个不应该存在的连接

    3次还有什么漏洞? syn flood,说白了,利用3次握手漏洞,故意不发送最后的ack,这样服务器会有短暂的几分钟的资源浪费,大量的请求,服务器就不能用了。

     2msl干啥的? msl最大段生存时间,防止最后的ACK,服务器没收到,所以留下这个时间可以利用tcp的超时重传机制。

    b.可靠的

    1.分割,我们从应用程序得到的数据会被分割成若干个合适的TCP报文,TCP报文的大小是有上限的(MSS http://support.huawei.com/ecommunity/bbs/10156527.html).

    2.分割后,传到IP层加上IP头,成为IP报文,我们知道IP协议是不可靠地,不保证到达顺序,不保证不会出错,不保证不会重复,不保证一定会受到。

    3.所以

    TCP 可靠体现在: 1.保证报文的有序性,自行组装。 2.使用校验码就行校验。3.重复数据去掉,4,如果到达服务器段,则使用ack,规定时间没到则超时重传。

    最后TCP会根据当前的网络的拥塞情况选择一定的流量控制方法。关于流量控制,此处不提了,有空再说。(这也就是TCP与UDP的区别);

    c字节流

    知道一点足矣,TCP是中的数据段是若干个自己就行。其实从java的socket中看到getInputStream就能感受到了。

  • 相关阅读:
    python 根据数组生成图片
    c++ 字符串转数字
    python 迷宫问题
    JavaScript 判断是否为空
    JavaScript 字符串转数字(整数,浮点数,进制转换)
    c++ 珊格迷宫问题
    python eval的用法
    python pillow 处理图片
    c 结构体
    python pillow 绘制图片
  • 原文地址:https://www.cnblogs.com/hansongjiang/p/3824676.html
Copyright © 2011-2022 走看看