• 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报文结构

  • 相关阅读:
    循环播放音乐
    在发板实现24位jpg和bmp图片用手划动显示上一张与下一张图片
    AnsiIO
    PosixIO
    java3
    java2
    java1
    ios音乐播放器demo
    添加文章查看连接
    elementary os变成mac风(笔记)
  • 原文地址:https://www.cnblogs.com/ceceliahappycoding/p/11433564.html
Copyright © 2020-2023  润新知