计算机网络&操作系统答疑.docx
《计算机网络&操作系统答疑.docx》由会员分享,可在线阅读,更多相关《计算机网络&操作系统答疑.docx(11页珍藏版)》请在第一文库网上搜索。
1、计算机网络&操作系统答疑大家好,我是小林。最近每天都挺多人问一些问题,基本上都是看图解网络和图解系统文章时的提出的问题。我也会在每天忙完后,抽1个时间去回答大家的问题,但是不一定每个人我都能回答的到,因为有时候信息太多,可能没有看到你的问题。有些读者问的问题也很有代表性的,也是值得分享出来的,所以我打算不定期收集一波问题,在公众号分享一下。可能有些问题,也是你们的疑惑点。这次,我就收集了几个最近大家问的问题。 TCP头部中长度字段的长度只有4字节,为什么可以包含TCP option的长度? TCP时间戳回绕了怎么办? 为什么重复的ACK无法判断要重传哪些数据? 为什么10多路复用要搭配非阻塞1
2、0? 自旋锁为什么是悲观锁,而不是乐观锁? 关于 HTTP cookie sessionid token 的问题 HTTP/1.0可以开启长连接吗?TCP头部中长度字段的长度只有4位,为什么可以包含TCP option的长度?先给大家看看TCP包头结构:数据之前有位读者的疑惑,说TCP的首部长度字段只有4位,这样算最大值就是15,而首部长度字段是定义TCP包头的长度的,按道理TCP最大的包头的长度是:固定包头20字节+选项最长40字节=60字节。为什么可以用4位的首部长度字段来定义TCP包头的长度?我的回答:首先,首部长度字段确是定义TCP包头的长度的,但是不是你这样计算的。首部长度字段的意思
3、是有多少个4字节,比如如果首部长度为1111(最大值),十进制就是15,所以首部长度字段的意思是有15个4字节,也就是15*4 = 60 oTCP时间回绕了怎么办?在这篇文章中:TCP是如何避免历史报文的?。提到因为TCP序列号会有回绕的问题,所以需要用时间戳的机制来判断历史报文(简称PAWS),然后有读者问了这么一个问题: 如果时间戳也回绕了怎么办时间戳的大小是32 bit,所以理论上也是有回绕的可能性的。时间戳回绕的速度只与对端主机时钟频率有关。Linux以本地时钟计数(jiffies)作为时间戳的值,不同的增长时间会有不同的问题:如果时钟计数加1需要1ms,则需要约24.8天才能回绕一半
4、,只要报文的生存时间小于这个值的话判断新旧数据就不会出错。如果时钟计数提高到lus力口 1,则回绕需要约71.58分钟才能同绕,这时问题也不大,因为网络中旧报文几乎不可能生存超过70分钟,只是如果70分钟没有报文收发则会有一个包越过PAWS (这种情况会比较多见,相比之下24天没有数据传输的TCP连接少之又少),但除非这个包碰巧是序列号同绕的旧数据包而被放入接收队列(太巧了吧),否则也不会有问题;如果时钟计数提高到0.1 us加1回绕需要7分钟多一点,这时就可能会有问题了,连接如果7分钟没有数据收发就会有一个报文越过PAWS,对于TCP连接而言这么短的时间内没有数据交互太常见了吧!这样的话会频
5、繁有包越过PAWS检查,从而使得旧包混入数据中的概率大大增加;Linux在PAWS检查做了一个特殊处理,如果一个TCP连接连续24天不收发数据则在接收第一个包时基于时间戳的PAWS会失效,也就是可以PAWS函数会放过这个特殊的情况,认为是合法的,可以接收该数据包。static ini ine bool tcp paws check (const struct tcp options received*rx_opt, int paws_win)我的回答:如果seq2和seq3都丢了 ,接收方收到scq4会回ack2,收到scq5会回ack2,seq6会回ack2o三个ack都是一样的,你怎么知道
6、是要重传seq2,还是seq2、seq3 呢?这三个都是重复的ACK报文,scq和ack都是一样的,如下图抓包图:Source Port: 38760Destination Port: 80(Stream index: 0TCP Segment Len: 0Sequence number: 1 (relative sequence number)Sequence number (raw): 764338729TCP重复确认和快速重传的一个案例,用Wireshark分析,显示如下:j (Hext sequence number: 1 (rwlativ sequent numberH编号 1 数据
7、包期望的下一个 Sq 是 1Acknowledgment number: 1 (relative ack nuter)Acknowledgment number (raw): 13109731861011 Header Length: 44 bytes (11)数据包1期望的下一个数据包Seq是1,但是数据包2发送的Seq却是10945,说明收到的是乱序数据包,于是回了数据包3 ,还是同样的Seq = 1, Ack = 1.这表明是重复的ACK;数据包4和6依然是乱序的数据包,于是依然回了重复的ACK;当对方收到三次重复的ACK后,于是就快速重传了 Seq = 1、Len = 1368的数据包
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机网络 操作系统 答疑