美文网首页
TCP滑动窗口

TCP滑动窗口

作者: StevenHD | 来源:发表于2020-12-10 21:39 被阅读0次

    一、复习review

    1.1 多进程和多线程的对比

    • 多线程模型需要处理SIGPIPE信号,因为多次去写就会触发SIGPIPE信号

    • 多进程的优缺点:一个进程挂掉不会影响其他的进程,稳定;进程之间通信麻烦,需要分配更多的内存

    • 多线程的优缺点:一个线程发生致命错误,整个进程都会退出;线程间通信方便,分配的内存少

    • 资源上限:ulimit -a

    1.2 状态

    二、TCP流量控制(滑动窗口)

    • MSS:Max Segment Size

    三、IO复用Select

    • 对比多线程多进程,活跃的就只是少数的几个
    • N核CPU就开N个进程

    多进程和多线程的缺点是大量执行单位之间的频繁切换
    轮询的缺点是CPU常常会处于空转占用的状态

    • 反应堆就是IO复用——多个套接字Socket放在一起
    • 反应堆使用FD_SET来表示
    select大纲

    select是从头开始轮询,时间复杂度是O(n)

    四、poll(举手)

    • select中的反应堆和结果反应堆是同一个,所以每次要重新初始化
    • poll中的反应堆和结果反应堆分开了,是2个,所以不用初始化

    读事件触发
    时间复杂度是O(n)
    可以处理的事件个数,基于可以打开的fd的个数:65535(ulimit - a);能同时上万个就很牛逼了

    五、epoll

    • 调用一次epoll_ctl()只能处理一个文件描述符,如果想处理2个文件描述符,就需要调用2次epoll_ctl()
    • ET的优点:如果从0变成1,是可以及时反馈的,但是LT就不一定
    • ET的缺点:如果错过了时间点,没有检测到触发,那么就再也检测不到了
    • ONESHOT是只监听一次,触发完就会从那棵树上直接摘下该节点
    • epoll树是平衡二叉树
    • epoll时间复杂度是O(logn),因为本质上就是就绪队列,就像在一个平衡二叉树中查找某个节点
    • epoll的缺点是还要维护一棵树,树中节点的删除,添加都是需要时间的

    六、setsockopt

    • 要在bind()之前,socket之后,设置端口复用
    图示代码
    • 设置套接字属性就放在socket()刚创建出来的后面

    先关闭服务器,再重新用相同的端口是可以的,服务器这个时候属于TIME_WAIT状态

    七、域名转换

    相关文章

      网友评论

          本文标题:TCP滑动窗口

          本文链接:https://www.haomeiwen.com/subject/eyttgktx.html