linux高性能服务器编程笔记 第4章 TCP/IP通信案例

http通信过程

以访问www.baidu.com为例,请求其首页文件http://www.baidu.com/index.html

  • 应用程序通过访问/etc/resolv.conf文件获得获得DNS服务器IP地址;
  • UDP模块添加源端口号和目的端口号,将DNS查询报文封装为UDP数据报;
  • IP模块添加源IP地址和目的IP地址,将UDP数据报封装为IP数据报,查询路由表,(假设路由表没有缓存)将数据报发送至默认路由,由路由器进行转发;
  • 由于此时ARP缓存中没有路由的MAC地址,所以发送端此时发起一个ARP广播查询路由器的MAC地址;
  • 得到路由器MAC地址后,以太网驱动程序将IP数据报封装为以太网帧发送给路由器,此后发送数据不再需要调用ARP服务,ARP高速缓存中已经记录了路由器的地址映射关系。

IP数据报的源地址和目的地址在转发过程中从未改变,而以太网帧的头部的源地址和目的地址在转发过程一直在改变。

  • 得到目的服务器的IP地址后,应用程序向服务器发送http请求报文;
    在这里插入图片描述

1、2、3、建立TCP链接;
4、发送http请求
23、24、25、33、35、36、服务器返回数据
其余报文段为确认报文或者FIN报文

http请求

在这里插入图片描述

  • 第一行:请求方法、目标资源URL(包含:协议、目标主机、资源文件名称)、协议版本;
  • 第二行:客户端程序;
  • 第三行:主机名;
  • 第四行:链接维持方法。

其中2~4行为http头部字段,一个http请求可以有多个头部字段,可按任意顺序排列。

在这里插入图片描述
其中,HEAD,GET,OPTIONS,TRACE方法不会对服务器产生修改,而POST,PUT,DELETE,PATCH会影响服务器上的资源。
GET,HEAD,OPTIONS,TRACE,PUT,DELETE等方法被视为等幂的。

http应答

在这里插入图片描述

  • 第一行:状态行,包含协议版本、状态码、状态信息;

在这里插入图片描述

  • 第2~7行:http应答头部字段,包含服务器程序名称、目标文档长度、文档的MINE类型、服务器返回的一个cookie、http应答再返回过程中经过的所有代理服务器的地址和名称。
  • cookie是为了维护http协议的状态,因为http协议是无状态的,如果下一次的http请求需要上一次http请求的相关信息,客户端必须重传这些信息。使用cookie之后,cookie是服务器发送给客户端的特殊信息,客户端每次想服务端发送请求时需要带上这些信息,这样服务端就可以识别出不同的客户了。(基于浏览器的自动登录使用cookie实现)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值