http协议

一、理解TCP/IP, HTTP, socket, Nginx, chrome

HTTP 协议是基于 TCP/IP 协议的应用层协议。HTTP 协议的网络层基于 IP 协议,传输层基于 TCP 协议。

TCP/IP 协议需要向程序员提供可编程的 API,该 API 就是 Socket,它是对 TCP/IP 协议的一个重要的实现。

提供服务端能力的称作ServerSocket,提供客户端能力的称作Socket。

Nginx:基于 Socket 实现的HTTP服务器;OkHttp、URLCollection 等都是基于 Socket 实现的 HTTP 客户端,而浏览器就是这些 HTTP 客户端的具象。

二、数据报结构

 

IP数据报结构:

 

不过 32 位可以表示的 IP 地址是有限的,中国拥有近 3 亿左右个 IP 地址,无奈中国的网民实在太多了,于是使用了 IP 地址转换技术 NAT。例如 ABC 三个小区的所有设备可能公用了一个公网 IP,通过 NAT 技术分给每一户一个私有 IP 地址,大家在小区内交流时可能使用的是私有 IP 地址,但是向外交流时就用公网 IP。

 如果让多个域名都解析到同一个 IP 地址,那么这么这个主机就拥有了多个别名,当外部应用通过不同的域名来连接该主机时,在该主机内部就可以通过不同的别名(端口),把该连接指向不同的应用。

当客户端使用域名连接服务端的时候,需要通过 IP 寻址来确定服务器在网络中的位置,主要是以下两步;

  • 通过 hosts 或者 DNS 查找主机名对应的 IP 地址

  • 通过 ARP 寻址查找主机对应的 MAC 地址

通过 DNS 缓存来查找域名对应的 IP 地址,一般情况下有这么几级:

  • 查找系统的 hosts 中配置的 DNS 映射

  • 查找系统自身的 DNS 缓存

  • 查找路由器中的 DNS 缓存

  • 查找 IPS 的 DNS 缓存

三、TCP数据报结构

  • SYN:建立连接标识

  • ACK:响应标识

  • FIN:断开连接标识

  • seq:seq number,发送序号

  • ack:ack number,响应序号

建立 TCP 连接,3 次握手
  • 客户端发送SYN, seq=x,进入 SYN_SEND 状态

  • 服务端回应SYN, ACK, seq=y, ack=x+1,进入 SYN_RCVD 状态

  • 客户端回应ACK, seq=x+1, ack=y+1,进入 ESTABLISHED 状态,服务端收到后进入 ESTABLISHED 状态

进行数据传输
  • 客户端发送ACK, seq=x+1, ack=y+1, len=m

  • 服务端回应ACK, seq=y+1, ack=x+m+1, len=n

  • 客户端回应ACK, seq=x+m+1, ack=y+n+1

断开 TCP 连接, 4 次挥手
  • 主机 A 发送FIN, ACK, seq=x+m+1, ack=y+n+1,进入 FNIWAIT1 状态

  • 主机 B 回应ACK, seq=y+n+1, ack=x+m+1,进入 CLOSEWAIT 状态,主机 A 收到后 进入 FINWAIT_2 状态

  • 主机 B 发送FIN, ACK, seq=y+n+1, ack=x+m+1,进入 LAST_ACK 状态

  • 主机 A 回应ACk, seq=x+m+1, ack=y+n+1,进入 TIME_WAIT 状态,等待主机 B 可能要求重传 ACK 包,主机 B 收到后关闭连接,进入 CLOSED 状态或者要求主机 A 重传 ACK,客户端在一定的时间内没收到主机 B 重传 ACK 包的要求后,断开连接进入 CLOSED 状态

四、HTTP报文结构

 

posted @ 2019-08-30 10:28  cecelia  阅读(151)  评论(0编辑  收藏  举报