• 安排
    2019-09-13
    MSL的值怎么和TTL对应的啊?比如MSL设置为30秒,那怎么计算出TTL的值呢?怎么保证一个报文在网络中真的存活不超过30秒?

    作者回复: TTL与MSL是有关系的但不是简单的相等的关系,MSL要大于等于TTL。

    设备在处理TTL的时候,是需要处理时间的,每次处理TTL时这个字段就都应该被减少,来反应花在处理报文上的时间。比如说处理了1秒减1,处理了2秒减2。这样就可以保证TTL为30的肯定活不过30秒。

     3
     8
  • godtrue
    2019-11-23
    MSL 是任何 IP 数据报能够在因特网中存活的最长时间。其实它的实现不是靠计时器来完成的,在每个数据报里都包含有一个被称为 TTL(time to live)的 8 位字段,它的最大值为 255。TTL 可译为“生存时间”,这个生存时间由源主机设置初始值,它表示的是一个 IP 数据报可以经过的最大跳跃数,每经过一个路由器,就相当于经过了一跳,它的值就减 1,当此值减为 0 时,则所在的路由器会将其丢弃,同时发送 ICMP 报文通知源主机

    这是否意味着一个IP数据报不可能经过255个路由器?
    请问一个IP数据报经过多少路由器,这个由谁决定?怎么决定?和网络距离距离有什么关系?

    😅感觉老师的回答和问题,没有完全的对上?
    展开

    作者回复: IP数据报经过多少路由器这个是无法确定的。

    
     1
  • 风羽星泉
    2019-09-17
    老师,我找到我提交的问题答案了。 使用 man listen 命令,可以找到下面这一句话:
    If the backlog argument is greater than the value in /proc/sys/net/core/somaxconn, then it is silently truncated to that value; 也就是说backlog 设置的值大于somaxconn,会被截断为somaxconn 的值。

    作者回复: 是的。

    
     1
  • 风羽星泉
    2019-09-17
    老师,我修改了程序中的backlog为10,/proc/sys/net/core/somaxconn没有变还是默认值128。测试程序同时发起800个连接请求,用netstat观察每次大概能建立10个连接,最后有大量连接报错“A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.”;
    当我修改程序中的backlog为1000时,最大可连接数并没有突破128,最后也是报上面那个错误。
    是不是backlog设置的值只能小于内核somaxconn的值,如果比它大,则取内核设置的值。

    作者回复: 因为你设置太大也没有,系统有个默认值。

     1
     1
  • 安排
    2019-09-13
    对于udp那里,connect的作用应该是记录服务端ip,端口号和socket的对应关系吧

    作者回复: 是的。

    
     1
  • Douglas
    2020-01-09
    老师好像并没有讲为啥是4次挥手

    作者回复: 理解挥手的目的就自然理解为啥是4此了,因为每个方向都需要一个 FIN 和一个 ACK,通常被称为四次挥手。

    
    
  • skye
    2020-01-06
    请问老师,我看一些开源代码中shutdown之后再调用close,这是为什么?

    作者回复: 释放掉其他和套接字相关的系统资源?

     1
    
  • fl260919784
    2019-10-13
    应用程序如何模拟三次挥手关闭一条tcp连接(一般情况下是fin,ack,fin,ack,但也存在fin,ack+fin,ack)

    作者回复: 还真不好模拟,这个直接通过程序来实现比较方便,比如shutdown、close。

    
    
  • 码农Kevin亮
    2019-09-23
    请问老师,为什么四次挥手中,被动关闭方不能把ack与fin合并呢

    作者回复: 好问题,我好想看过有类似的优化手段,实际上是不是这样做的,我不敢保证,可能要去读源码了。

     3
    
  • kabuka
    2019-09-19
    “这个 EOF 会被放在已排队等候的其他已接收的数据之后,这就意味着接收端应用程序需要处理这种异常情况“ 這種情況不屬於正常嗎? EOF按照順序排在隊列最後面,在處理完隊列前面的消息后,在處理EOF,正常結束。老師說的需要處理異常情況是指什麼?
     

    作者回复: 哦,我的意思是EOF作为一个异常情况,需要加以处理,也就是读到返回值为0的情况。确实如你所言,程序的逻辑是正常处理的。

    
    
  • 灰色
    2019-09-15
    即使经过了2MSL也不一定保证一个tcp分组的TTL为0吧,也就是这个分组变得无效,那么TIME_WAIT如何避免连接“化身”的问题呢?

    作者回复: 要保证的,一般来说MSL不等于TTL,MSL要比TTL大,保证2MSL的时间时候对应的分组一定变得无效。

    
    
  • 传说中的成大大
    2019-09-15
    今天又回头讲udp的connect突然想起来 那udp的send是个广播操作?

    作者回复: 不是啊,如果对着一个广播地址发送,才是一个广播操作。

    
    
  • 沉淀的梦想
    2019-09-14
    实验了一下往半关闭(本端shutdown)状态的连接里写东西,发现不会返回任何错误信息,,感觉就像正常的连接write一样(然它写多少字节,它就返回多少),这个是为什么呢?

    作者回复: 程序贴上来,大家一起研究下。

    
    
  • 小蛋壳
    2019-09-13
    高性能的网络通信框架,是不是类似netty做的事?。那比如spring mvc或者其他任何应用程序框架其实底层都需要处理网络通讯这块。可以说知名的框架这块其实处理的都很好? java应用,是tomcat处理网络请求还是spring来处理的?还有nginx

    作者回复: netty是Java的网络通信框架,其底层实现还是依赖类似epoll的事件分发机制的。

    spring mvc这类的使用的Java网络编程框架来做的,tomcat也是类似的。

    Nginx是使用类似epoll的机制来自己实现的。

    
    
我们在线,来聊聊吧