一名学生A希望访问网站www.google.com。学生A在其浏览器中输入http://www.google.com并按回车.....

一名学生A希望访问网站www.google.com。学生A在其浏览器中输入http://www.google.com并按回车,直到Google的网站首页显示在其浏览器中,请问:

(1) 在此过程中,按照TCP/IP参考模型,从应用层(包括应用层)到网络接口层(包括网络接口层)都用到了哪些协议,每个协议起到的作用是什么?

(2) 简要描述该过程。

协议及其功能如下:

1.应用层: HTTP , WWW 访问协议, DNS , 域名解析。
2.传输层: TCP ( HTTP 协议使用), UDP ( DNS 协议使用)。
3.网络层: IP , IP 包传输和路由选择; ICMP ,提供网络传输中的差错检测; ARP ,将本 机的缺省网关 IP 地址映射成物理 MAC 地址。
4.网络接口层: MAC ,提供数据链路层的功能,实现无差错的数据传输。

过程描述如下:

1 利用 DNS ,查询到 WWW.GOOGLE.COM 对应的 IP 地址。
2 浏览器与 GOOGLE 的服务器利用 TCP 协议 建立连接。
3 浏览器利用 HTTP 的 GET 方法向 GOOGLE 服务器发送资源请求。
4 GOOGLE 发送回应信息。
5 浏览器解释回应信息,并以图形化的方式显 示

  • 17
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是使用gopacket构建HTTP重定向头的示例代码: ```go package main import ( "fmt" "github.com/google/gopacket" "github.com/google/gopacket/layers" "net" ) func main() { // 创建IP头 ip := &layers.IPv4{ SrcIP: net.IPv4(192, 168, 0, 1), DstIP: net.IPv4(192, 168, 0, 2), Protocol: layers.IPProtocolTCP, Version: 4, Id: 1, TTL: 64, } // 创建TCP头 tcp := &layers.TCP{ SrcPort: layers.TCPPort(80), DstPort: layers.TCPPort(12345), Seq: 1000, Ack: 0, SYN: true, Window: 14600, } // 创建HTTPhttp := &layers.HTTP{ Response: false, Method: "GET", Host: "192.168.0.1", URI: "/", Proto: "HTTP/1.1", UserAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36", AcceptEncoding: "gzip, deflate, sdch", AcceptLanguage: "en-US,en;q=0.8", UpgradeInsecureReq: true, Connection: "keep-alive", } // 计算HTTP头长度 httpLen := http.Len() // 设置TCP数据长度 tcp.SetNetworkLayerForChecksum(ip) tcp.DataOffset = uint8(5 + httpLen/4) // 计算IP数据长度 ipLen := ip.Len() + tcp.Len() + httpLen // 设置IP数据长度 ip.Length = uint16(ipLen) // 计算TCP校验和 tcp.Checksum = 0 tcp.SetNetworkLayerForChecksum(ip) tcp.Checksum = tcp.ComputeChecksum() // 将IP、TCP、HTTP头序列化为字节流 buf := gopacket.NewSerializeBuffer() opts := gopacket.SerializeOptions{} gopacket.SerializeLayers(buf, opts, ip, tcp, http) // 输出字节流 fmt.Println(buf.Bytes()) } ``` 在上面的代码,我们先创建了一个IPv4头,将源IP地址设置为192.168.0.1,目的IP地址设置为192.168.0.2,协议类型设置为TCP。 接着,我们创建了一个TCP头,将源端口设置为80,目的端口设置为12345,序列号设置为1000,确认号设置为0,SYN标志设置为true,窗口大小设置为14600。 然后,我们创建了一个HTTP头,将响应标志设置为false,请求方法设置为GET,主机名设置为192.168.0.1,URI设置为/,协议版本设置为HTTP/1.1,用户代理设置为Chrome浏览器的UA字符串,接受编码设置为gzip, deflate, sdch,接受语言设置为en-US,en;q=0.8,请求升级设置为true,连接设置为keep-alive。 接着,我们计算了HTTP头的长度,并设置了TCP数据长度,然后计算了IP数据长度,并设置了IP数据长度。接着,我们计算了TCP校验和,并将IP、TCP、HTTP头序列化为字节流。 最后,我们输出了字节流。将生成的字节流写入网络数据包即可实现HTTP重定向。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值