• 邵亚方
    置顶
    2020-10-11
    课后作业答案: - 在 TCP 发送过程中使用到了 qdisc,但是在接收过程中没有使用它,请问是为什么?我们可以在接收过程中也使用 qdisc 吗? qdisc的主要目的是流控,流控一般都是在发送端进行控制;对于接收端而言,它已经收到这个包了,再进行流控的话,也就只有选择性的丢包。如果在接收端也使用qdisc之类的流控机制,也需要将它模拟为发送端,也就是增加一个中间设备来做。
    
    16
  • 我来也
    2020-09-15
    终于到TCP篇了. 看了文中的`TCP数据包发送过程`图,有几个疑问: 1. 如果用tcpdump抓包,它是在哪一层抓的包呢?(IP Layer / Link Layer) 最近遇到的问题,就是调用write函数有返回值.但是tcpdump抓包来看,并没有迹象. 只知道在此期间有地方把包给丢了,并不知道具体是哪一层丢的.后来发现是内核把包丢了. 2. `TCP Send Buffer`默认是动态调整的. 这个是按需分配的意思么?如果我调整了内核参数,对之前建立的连接产生影响么? 3. 如果`TCP Send Buffer`满了,调用`write`时是阻塞还是返回错误码呢?(是不是跟TCP的阻塞/非阻塞模式有关?) ------------------- 最近在CentOS 7.6上遇到了一个TCP内核方面的问题. 它的内核版本太低了,还是linux-3.10.0-957.21.3.el7. 具体的分析和解决过程参考了这篇博文: [TCP SACK 补丁导致的发送队列报文积压](https://runsisi.com/2019-12-19/tcp-sack-hang)

    作者回复: 1. 这个tcpdump的原理,我们在后面的课程里会讲到,是在link layer来抓包的。 2. 对的,会按需调整,调整后会影响之前的连接,因为在检查缓冲区大小时会用到这些全局变量。 3. 对的 跟是否设置了阻塞模式有关。 这个blog分享得不错,赞!

    共 3 条评论
    10
  • 唐江
    2021-05-26
    发送和接收端的缓冲区都是针对单个连接的吗

    作者回复: 单个tcp连接有自己的缓冲区控制 tcp协议栈也有针对所有连接的统一的缓冲区控制

    共 2 条评论
    
  • 我能走多远
    2020-11-09
    又一个问题需要帮忙解答一下,就是网络收包一共会又几次内存拷贝的流程。 看到一篇文章中说DMA也算一次的化,会又三次?(https://blog.csdn.net/gengzhikui1992/article/details/103142848) 对1,2 步中内存拷贝没有理解透。 1、DMA操作,网卡寄存器->内核为网卡分配的缓冲区ring buffer ring buffer存储的描述符的索引,索引对应存储存储报文的物理地址吧/ 2、驱动软件从ring buffer中读取,填充内核skbuff结构(第2次拷贝:内核网卡缓冲区ring buffer->内核专用数据结构skbuff) 它是把填充skbuff头部也当作了一次内存拷贝吗? 3、socket系统调用将数据从内核搬移到用户态。(第3次拷贝:内核空间->用户空间) 这个是系统调用,比较好理解。
    共 1 条评论
    3
  • Wade_阿伟
    2021-09-05
    从tcp的发送过程和接受过程,讲解过程中可能影响的配置选项。让我既能很好的理解发送和接受过程,又学习了如何结合生产环境业务场景进行性能优化,真是收货满满。
    
    1
  • 王崧霁
    2020-09-19
    流控应该在上游发送端控制,接收端有个开关net.core.devbudget也是控制发端行为
    共 1 条评论
    1
  • 上杉夏香
    2023-04-03 来自北京
    捉个虫,课堂总结第一行中关于 tcp_wmem 的说明,应该是「如果通过SO_SNDBUF来设置发送发送缓冲区」而是不「SO_RECVBUF」
    
    
  • 小白debug
    2022-11-04 来自上海
    有个疑惑,老师提到qdisc是在ip层里实现的,但在看代码的时候发现,qdisc是在 __dev_queue_xmit (数据链路层)中被使用到,那qdisc是属于哪一层的呢?
    
    
  • 团团-BB
    2022-04-08
    老师这种情况从何处入手: eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9001 inet 10.201.80.130 netmask 255.255.224.0 broadcast 10.201.95.255 ether 02:c6:7a:df:c2:09 txqueuelen 1000 (Ethernet) RX packets 55403028044 bytes 88466263876451 (80.4 TiB) RX errors 0 dropped 1432413 overruns 0 frame 0 TX packets 111313645859 bytes 182202219572067 (165.7 TiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
    
    
  • 威
    2022-02-18
    如果用 sysctl -p 来使得tcp缓冲区配置立刻生效,这样做之后,已建立了的tcp链接缓冲区大小会改变吗
    共 1 条评论
    