zoukankan      html  css  js  c++  java
  • 三次握手+四次挥手

    建立连接的三次握手:

    SYN:创新连接

    ACK:确认序号,确认网络包没有丢包。

    FIN:释放一个连接,表示接受连接。

    ack:序号,ack = seq+1

    整个的连接过程如下:

    用通俗的话说就是:1、客户端向服务器询问:你听得到我吗?

    2、服务器向客户端回答:我听得到你,你能听到我吗?

    3、客户端回复服务器:我听到了,开始通话吧。

    连接过程的第一步就是在TCP模块处创建表示连接控制信息的头部,头部包括很多字段,重要的是接收方和发送方的端口号和IP地址。

    当TCP头部创建好后,TCP模块就会将控制信息传递给IP模块并委托它进行发送;IP模块执行网络包发送操作后,网络包会通过网络到达服务器,然后服务器上的IP模块会将接收到的数据传递给TCP模块,服务器的TCP模块根据控制信息中的端口号找到对应的套接字即可。(P74)

    滑动窗口相关:

    滑动窗口来管理数据发送和ACK号的操作,怎么处理数据溢出问题呢?

    服务器端会把缓冲区的内存剩余放在窗口字段告诉发送方,这个能够接受的最大数据量被称为窗口的大小,它是TCP调优参数中非常有名的一个。

    通常将ACK号与窗口更新的包合并在一起进行发送,避免网络传输效率下降。

    确认断开的四次挥手(断开连接,删除套接字)

     

    为什么挥手要四次而不是三次呢?

    因为一个方向的断开,仅代表这个方向的传输结束了,而另一方可能还有数据,所以需要等另一方数据也全部传输完毕完成后,才能执行挥手。

    关于连接操作、收发操作和最后的断开操作,合并图可以看书p94页。

  • 相关阅读:
    Java反射中Class.forName与classLoader的区别
    Java各种成员初始化顺序
    crontab python脚本不执行
    Java mybatis缓存(转)
    Java Synchronized及实现原理
    JVM类加载器
    SSH掉线问题
    SSH登陆远程卡、慢的解决的办法
    shell脚本执行python脚本时,python如何将返回值传给shell脚本
    使用scrapy进行数据爬取
  • 原文地址:https://www.cnblogs.com/fish-101/p/10423291.html
Copyright © 2011-2022 走看看