计算机网络(HTTP TCP/IP)

网络基础

局域网(LAN)、城域网(MAN)、广域网(WAN)
拓扑结构:星型网络、总线型网络、环型网络、树型网络、星型环型网络等;
传输介质:双绞线网、同轴电缆网、光纤网和卫星网等;
通信协议三部分组成:语义部分、语法部分、变换规则;

IP(Internet Protocol)又称互联网协议,是支持网间互联的数据报协议。
IP 地址分为A、B、C、D、E,每个类别的网络标识和主机标识各有规则。
IP 地址用于唯一地标识网络上的一个通信实体,但一个通信实体可以有多个通信程序同时提供网络服务,此时还需要使用端口

端口 是一个16位的整数。0~65535

  • 公认端口:0~1023,紧密绑定一些特定的服务。
  • 注册端口:1024~49151,松散地绑定一些服务。
  • 动态和/或私有端口:49152~65535

OSI(Open System Interconnect)开放系统互联参考模型
在这里插入图片描述

HTTP & HTTPS

HTTP(HyperText Transfer Protocol,超文本传输协议) 协议是基于TCP的应用层协议,不关心数据传输的细节,主要是用来规定客户端和服务端的数据传输格式。

HTTPS——HTTP协议的数据传输是明文的,是不安全的,HTTPS 使用了 SSL/TLS 协议进行了加密处理。
HTTPS 协议的主要作用分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种是确认网站的真实性。

HTTP 与 HTTPS 区别

  • https 协议需要到 CA 申请证书。
  • HTTP 协议运行在 TCP 之上,所有传输的内容都是明文,HTTPS 运行在 SSL/TLS 之上,SSL/TLS 运行在 TCP 之上,所有传输的内容都经过加密的。
  • 使用不同的连接方式,端口不一样,http 是 80,https 是 443。
  • HTTPS 可以有效的防止运营商劫持,解决了防劫持的一个大问题。

TCP/IP

TCP/IP协议族里重要的一点就是分层。

IP
IP 间的通信依赖 MAC 地址。在网络上,通信的双方在同一局域网 (LAN)内的情况是很少的,通常是经过多台计算机和网络设备中转 才能连接到对方。而在进行中转时,会利用下一站中转设备的 MAC 地址来搜索下一个中转目标。这时,会采用 ARP 协议(Address Resolution Protocol)。ARP 是一种用以解析地址的协议,根据通信方的 IP 地址就可以反查出对应的 MAC 地址。

TCP
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。按层次分,TCP 位于传输层,提供可靠的字节流服务。
为了准确无误地将数据送达目标处,TCP 协议采用了三次握手 (three-way handshaking)策略。握手过程中使用了 TCP 的标志(flag) —— SYN(synchronize) 和 ACK(acknowledgement)。

TCP 连接 (三次握手)

  1. 客户端发送 SYN(SYN=j) 标志的数据包到服务端,并进入 SYN_SEND 状态,等待服务端确认。
  2. 服务端收到 SYN 包,必须确认客户端的 SYN(ACK=j+1),同时自己也发送一个 SYN 包(SYN=k),即 SYN + ACK 包,此时服务器B进入 SYN_RECV 状态。
  3. 客户端收到服务端的 SYN+ACK 包,向服务端发送确认包 ACK(ACK=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED 状态,完成三次握手。

TCP 断开 (四次握手)

  1. Client 发送 FIN 消息,seq = u (u 为当前消息序列号,因为 FIN 消息也必须消耗一次序列号), 状态:FIN-WAIT-1
  2. Server 收到 FIN 消息回复 ACK 消息并带上当前消息序列号,并等待其他消息发送完毕,状态:CLOSE-WAIT。Client 收到 ACK 消息,状态:FIN-WAIT-2
  3. Server 其他消息发送完毕,发送 FIN 消息并带上当前序列号 (因为不确定服务器到底还发送了多少消息,假定 w), 状态:LAST-ACK。
  4. Client 收到 FIN 消息回复 ACK 消息,并进入 TIME-WAIT 状态。Server 收到 ACK 消息,状态:CLOSED

DNS

DNS(Domain Name System)服务是和 HTTP 协议一样位于应用层的协议。它提供域名到 IP 地址之间的解析服务。

URI 和 URL

URI(Uniform Resource Identifier,统一资源标识符)
URL(Uniform Resource Locator,统一资源定位符)

HTTP 响应状态码

3 位数字加原因短语。3 位数字中的第一位用来指定状态的类别,共5种。

  • 1xx——信息性状态码——接收的请求正在处理
  • 2xx——成功状态码——请求正常处理完毕
  • 3xx——重定向状态码——需要进行附加操作以完成请求
  • 4xx——客户端错误状态码——服务器无法处理请求
  • 5xx——服务器错误状态码——服务器处理请求出错

200:OK
204:No Content
400:Bad Request
404:Not Found

常见问题

影响一个 HTTP 网络请求的因素主要有两个:带宽延迟

为什么连接的时候是三次握手,关闭的时候却是四次握手?
因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

如果已经建立了连接,但是客户端突然出现故障了怎么办?
TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

HTTP 发展历程

HTTP/2.0
2015
二进制传输
多路复用
多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。
Header压缩
HTTP1.0 中,我们使用文本的形式传输 header,在 header 中携带 cookie 的话,每次都需要重复传输几百到几千的字节,这着实是一笔不小的开销。HTTP2.0 中,我们使用了 HPACK(HTTP2头部压缩算法)压缩格式对传输的 header 进行编码,减少了 header 的大小。并在两端维护了索引表,用于记录出现过的 header,后面在传输过程中就可以传输已经记录过的 header 的键名,对端收到数据后就可以通过键名找到对应的值。

HTTP/1.1
1997年1月公布HTTP/1.1。无状态协议,但为了实现期望的保持状态功能,于是引入了 Cookie 技术。

  • 缓存处理
  • 带宽优化及网络连接的使用
  • 错误通知的管理
  • Host头处理
  • 长连接,HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。

HTTP/1.0
HTTP 正式作为标准被公布是在 1996年5月,版本命名为 HTTP/1.0。

猜你喜欢

转载自blog.csdn.net/u010019244/article/details/106305040