Open Kiprey opened 2 years ago
题目的性能要求是1.5s, 但我在本地WSL(i7 9750)运行与服务器(64核心)的结果性能差距甚远? ....
因为 webget 会向国外服务器发送请求,所以这一步取决于网速。网速快一点就一秒以内,慢一点就要好几秒了。
@Kiprey 因为 webget 会向国外服务器发送请求,所以这一步取决于网速。网速快一点就一秒以内,慢一点就要好几秒了。
噢噢确实 感谢回复
大佬,同样的代码,跑不过check_webget是怎么回事啊
大佬,同样的代码,跑不过check_webget是怎么回事啊
我有点忘记 check_webget 是跑什么逻辑了,如果没记错的话这个会向国外服务器发送一个请求,这个请求的成功与否取决于你的网络能否顺利连接国外网站。
@Kiprey
大佬,同样的代码,跑不过check_webget是怎么回事啊
我有点忘记 check_webget 是跑什么逻辑了,如果没记错的话这个会向国外服务器发送一个请求,这个请求的成功与否取决于你的网络能否顺利连接国外网站。
能连接,报的是recipe for target 'CMakeFiles/check_webget' failed,不是答案错误那个“ebget returned output that did not match the test's expectations” 那个Error,可能是cmake有问题?
@Kiprey
大佬,同样的代码,跑不过check_webget是怎么回事啊
我有点忘记 check_webget 是跑什么逻辑了,如果没记错的话这个会向国外服务器发送一个请求,这个请求的成功与否取决于你的网络能否顺利连接国外网站。
能连接,报的是recipe for target 'CMakeFiles/check_webget' failed,不是答案错误那个“ebget returned output that did not match the test's expectations” 那个Error,可能是cmake有问题?
重新 cmake 一下看看,太久没碰这个了(捂脸)
@Kiprey
@Kiprey
大佬,同样的代码,跑不过check_webget是怎么回事啊
我有点忘记 check_webget 是跑什么逻辑了,如果没记错的话这个会向国外服务器发送一个请求,这个请求的成功与否取决于你的网络能否顺利连接国外网站。
能连接,报的是recipe for target 'CMakeFiles/check_webget' failed,不是答案错误那个“ebget returned output that did not match the test's expectations” 那个Error,可能是cmake有问题?
重新 cmake 一下看看,太久没碰这个了(捂脸)
啊remake了哈哈,但是没有用,我再看看。
能问一下我为什么make check lab0的时候报错../tap.sh not found,我看官方的仓库也没有这个文件啊,一开始是../tun.sh not found,然后我去官网找到了一份tun.sh的代码,然后就../tap.sh not found 了
@Arashimu 能问一下我为什么make check lab0的时候报错../tap.sh not found,我看官方的仓库也没有这个文件啊,一开始是../tun.sh not found,然后我去官网找到了一份tun.sh的代码,然后就../tap.sh not found 了
lab0不需要使用tun.sh好像,你的报错有更多信息吗
@derecknowayback
@Arashimu 能问一下我为什么make check lab0的时候报错../tap.sh not found,我看官方的仓库也没有这个文件啊,一开始是../tun.sh not found,然后我去官网找到了一份tun.sh的代码,然后就../tap.sh not found 了
lab0不需要使用tun.sh好像,你的报错有更多信息吗
没有,就一直缺少这个文件
@Arashimu 能问一下我为什么make check lab0的时候报错../tap.sh not found,我看官方的仓库也没有这个文件啊,一开始是../tun.sh not found,然后我去官网找到了一份tun.sh的代码,然后就../tap.sh not found 了
因为你的命令中多了一个空格,是 make check_lab0
而非 make check lab0
。前者对应的测试指令是 tests.cmake#L218,而后者对应的是 tests.cmake#L235
所以超出buffer上限的数据直接抛弃了吗?我以为测试是多进程,和OS的输入输出buffer一样涉及sleep/wakeup😂
所以超出buffer上限的数据直接抛弃了吗?我以为测试是多进程,和OS的输入输出buffer一样涉及sleep/wakeup😂
其实原理是差不多的:
顺便问问这个 CS144 系列的博客是被哪里引用了,感觉最近问 CS144 的同学不少 😂
@Kiprey 顺博问问这个 CS144 系列的博客是被哪里引用了,感觉最近问 CS144 的同学不少 😂
CS自学指南捏 https://csdiy.wiki/(谢谢k大一把shit一把尿把我拉扯到lab4,今天终于写完了lab4了hhh
@Kiprey 顺博问问这个 CS144 系列的博客是被哪里引用了,感觉最近问 CS144 的同学不少 😂
CS自学指南捏 https://csdiy.wiki/(谢谢k大一把shit一把尿把我拉扯到lab4,今天终于写完了lab4了hhh
嘿嘿,牛啊 QwQ
想问一下输入
GET /hello HTTP/1.1
@liyishui2003 想问一下输入 GET /hello HTTP/1.1
Host: cs144.keithw.org Connection: close 之后直接跳Connection closed by foreign host.如何解决? 虚拟机能翻墙,应该不是梯子的问题
来张图片? 我刚刚重新试了一下是可以正常连的,可以对照一下上面 telnet 那张图来看看少了哪些输出信息。
图来了!输出信息倒是没有少,我无论复制粘贴还是手打,一输完都会被立马关掉。。谢谢指点!
@liyishui2003 一输完都会被立马关掉
从你的图上看,网络方面是没有问题。 我做了多次测试,排除了连接超时的可能性:
408 Request Timeout
你可以试着控制一下变量,不用 telnet 试试,比如用 nc 看看:
$ printf "GET /hello HTTP/1.1\r\nHost: cs144.keithw.org\r\nConnection: close\r\n\r\n" | nc cs144.keithw.org 80
HTTP/1.1 200 OK
Date: Sat, 06 Jan 2024 11:01:05 GMT
Server: Apache
Last-Modified: Thu, 13 Dec 2018 15:45:29 GMT
ETag: "e-57ce93446cb64"
Accept-Ranges: bytes
Content-Length: 14
Connection: close
Content-Type: text/plain
Hello, CS144!
顺带注意一下在 telnet 里输入完成最后一行并回车后,还需要在 空行位置 再按一次回车,这个空行的回车标志着 HTTP 头的终止,按完这个空行处的回车后会立即有返回结果,而不会卡住继续等待输入。
@Kiprey
@liyishui2003 一输完都会被立马关掉
从你的图上看,网络方面是没有问题。 我做了多次测试,排除了连接超时的可能性:
- 如果什么输入都没有的话,超时时间是 50s 并静默断开连接。
- 如果已经输入了单行或多行内容,则超时时间是 20s 并会显著返回
408 Request Timeout
你可以试着控制一下变量,不用 telnet 试试,比如用 nc 看看:
$ printf "GET /hello HTTP/1.1\r\nHost: cs144.keithw.org\r\nConnection: close\r\n\r\n" | nc cs144.keithw.org 80 HTTP/1.1 200 OK Date: Sat, 06 Jan 2024 11:01:05 GMT Server: Apache Last-Modified: Thu, 13 Dec 2018 15:45:29 GMT ETag: "e-57ce93446cb64" Accept-Ranges: bytes Content-Length: 14 Connection: close Content-Type: text/plain Hello, CS144!
顺带注意一下在 telnet 里输入完成最后一行并回车后,还需要在 空行位置 再按一次回车,这个空行的回车标志着 HTTP 头的终止,按完这个空行处的回车后会立即有返回结果,而不会卡住继续等待输入。
感谢答复!我输入这条命令“printf "GET /hello HTTP/1.1\r\nHost: cs144.keithw.org\r\nConnection: close\r\n\r\n" | nc cs144.keithw.org 80”没有任何输出,直接跳到要输出新命令;输入"netcat cs144.keithw.org http"的话等待非常久也没有任何响应。我用的是NAT模式共享主机代理,在虚拟机终端输入"curl https://www.youtube.com "或者其他外网ip是能得到正确响应的。此外,我确认自己的防火墙有开放23端口,xinetd服务是打开的(也就是telnet是真有下),所以我感到非常不解。
@liyishui2003
感谢答复!我输入这条命令“printf "GET /hello HTTP/1.1\r\nHost: cs144.keithw.org\r\nConnection: close\r\n\r\n" | nc cs144.keithw.org 80”没有任何输出,直接跳到要输出新命令;输入"netcat cs144.keithw.org http"的话等待非常久也没有任何响应。我用的是NAT模式共享主机代理,在虚拟机终端输入"curl https://www.youtube.com "或者其他外网ip是能得到正确响应的。此外,我确认自己的防火墙有开放23端口,xinetd服务是打开的(也就是telnet是真有下),所以我感到非常不解。
从所描述的 nc 效果来看,应该还是网络问题。控制变量使用 curl 直接访问 cs144.keithw.org/hello
试试,如果一切正常则会输出下列内容。注意:cs144 网站应该可以在无代理下访问,我已尝试在关闭代理后成功用 curl 访问。网络问题比较复杂,只能多尝试多切换代理开关等多试试了。
➜ ~ curl google.com -v
* Trying 46.82.174.69:80...
^C
# 已关闭代理,因此无法访问 google
➜ ~ curl cs144.keithw.org/hello -v
* Trying 104.196.238.229:80...
* Connected to cs144.keithw.org (104.196.238.229) port 80 (#0)
> GET /hello HTTP/1.1
> Host: cs144.keithw.org
> User-Agent: curl/8.1.2
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Sat, 06 Jan 2024 16:51:27 GMT
< Server: Apache
< Last-Modified: Thu, 13 Dec 2018 15:45:29 GMT
< ETag: "e-57ce93446cb64"
< Accept-Ranges: bytes
< Content-Length: 14
< Content-Type: text/plain
<
Hello, CS144!
* Connection #0 to host cs144.keithw.org left intact
https://kiprey.github.io/2021/11/cs144-lab0/