2010-07-06 58 views
0

当我在unix shell上键入wget http://yahoo.com:80时。有人可以解释我输入命令到达雅虎服务器到底发生了什么。非常感谢你提前。有关wget的问题

+1

你想要解释HTTP协议吗?还是网络堆栈? – 2010-07-06 04:47:20

+0

@Felix我对网络堆栈更感兴趣,但我也对http协议感兴趣。 – mousey 2010-07-06 04:49:57

回答

1

RFC为您提供了所有您需要的细节,而且不会绑定到工具或操作系统。

Wget的使用你的情况HTTP,它立足于TCP,又使用IP,那就要看你用什么,大部分的时间你会遇到Ethernet帧。

为了了解发生了什么,我建议您安装Wireshark并查看解剖的帧,您将获得有关哪些数据属于哪个网络层的概述。这是可视化和了解发生的最简单的方法。除此之外,如果您真的喜欢(讽刺)有趣的文档(/反讽),请查看相应的RFC HTTP: 2616,因为其他人可以查看维基百科文章底部的外部链接。

0
  1. 该程序使用DNS将主机名解析为IP。传统的API调用是gethostbyname,虽然较新的程序应该使用getaddrinfo来兼容IPv6。
  2. 由于您指定了端口,程序可以跳过查找http的默认端口。但是,如果你没有,它会尝试getservbyname查找默认端口(然后再次,wget可能只是嵌入端口80)。
  3. 程序使用网络API连接到远程主机。这与socketconnect
  4. 完成的程序写入一个HTTP请求通过调用write
  5. 程序读取与一个或多个呼叫read HTTP响应的连接。