文章目录
一. 在浏览器地址栏键入URL,按下回车之后经历的流程?
(1)DNS解析 (2)TCP连接 (3)发送HTTP请求 (4)服务器处理请求并返回HTTP报文 (5)浏览器解析渲染页面 (6)连接结束
首先,浏览器会根据URL的组成,查询DNS服务器缓存,解析URL中域名所对应的IP地址;然后经历三次握手,建立TCP连接;浏览器发送读取文件请求(HTTP);服务器处理请求并返回HTTP报文;浏览器解析渲染页面;最后,浏览器释放TCP连接,经过4次挥手,连接结束。
-
DNS解析?
-
TCP连接?
-
三次握手,四次挥手及其原因
-
time-wait状态,时长(2TSL?),数据帧存活时间
1.DNS域名解析:通过域名找到IP地址,本地域名缓存;域名服务器查询IP地址
2.发出http请求(get,post)
3.通过TCP建立连接
…
time-wait(2MSL):数据帧存活时间,2个的原因,1.确认ACK能回传到服务器2.(没收到ACK)避免新旧连接混淆(没收到ACK,再来一个连接请求,序列号错乱)或确保数据传送到客户端
-
二.TCP三次握手&四次挥手
-
三次握手:
- 客户端发送SYN(syn=j)包到服务器,并进入SYN-SEND状态,等待服务器确认;
- 服务器收到SYN包,确认客户端的SYN(ack=j+1),同时发送一个SYN(syn=k)包,即SYN+ACK包,服务器进入SYN-RECV状态;
- 客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端服务端进入ESTABLISHED状态,完成三次握手。
为什么需要三次握手?
答:首次握手隐患,SYN超时:Server收到Client的SYN,回复SYN-ACK的时候,未收到ACK确认,Server不断重试直至超时。(SYN-Flood防护:SYN Cookie) -
四次挥手:
- 客户端发送一个FIN,用来关闭客户端到服务器的数据传送,客户端进入FIN-WAIT-1状态;
- 服务器收到FIN后,发送一个ACK给客户端(确认序号为收到序号加1),服务器进入CLOSE-WAIT状态;
- 服务器发送一个FIN,用来关闭服务器到客户端的数据传送,服务器进入LAST-ACK状态;
- 客户端收到FIN后,客户端进入TIME-WAIT状态,接着发送一个ACK给服务器(确认序号为收到的序号加1),服务器进入CLOSED状态,完成四次挥手。
为什么会有TIME-WAIT状态?
- 确保有足够的时间让对方(服务器)收到ACK包
- 避免新旧连接混淆
为什么需要四次挥手才能断开连接?
- 因为全双工,发送方和接收方都需要FIN报文和ACK报文
服务器出现大量CLOSED-WAIT状态的原因?
- 对方关闭socket连接,我方忙于读或写,没有及时关闭连接。(检查释放资源代码;检查处理请求的配置。netstat)
三. IP&TCP&UDP
-
IP协议非常简单,仅仅提供不可靠、无连接的传输服务。IP协议的主要功能有:无连接数据报传输、数据报路由选择和差错控制。
-
TCP协议(传输层:第一个点到点)
- 面向连接的、可靠的、基于字节流的传输层通信协议
- 将应用层的数据流分割成报文段,并发送给目标节点的TCP层
- 数据包都有序号,对方收到则发送ACK确认,未收到则重传
- 使用(奇偶)校验和来检验数据在传输中是否有误
TCP报文:
TCP报文是TCP层传输的数据单元,也叫报文段。
- TCP Flags: URG 紧急指针标志、ACK确认序号标号、PSH push标志、RST 重置连接标志、SYN 同步序号,用于连接过程、FIN finish标志,用于释放连接。
全双工通信 A到B亦可B到A
-
TCP & UDP
TCP面向连接;可靠性高;有序;速度慢;量级重(数据报报头20字节)
UDP面向非连接;可靠性低;无序;速度快;量级轻(数据报报头8字节)可靠的,不可靠的:面向连接(拥塞控制,序号机制,校验等)
三. 网络协议
(七层/五层网络模型)
| 网络模型 | 数据传输格式 | 作用 | 相关设备 | 网络协议 |
|---|---|---|---|---|
| 应用层 | 消息(message) | / | / | HTTP、FTP、DNS |
| 传输层 | 报文段(segment,TCP)/ 用户数据报(datagram,UDP) | 添加端口 | TCP、UDP | |
| 网络层 | 数据包(package)/ 数据报(datagram) | 添加IP地址 | 路由器 | IP、ARP |
| 链路层 | 帧(fram) | 添加mac地址 | 网桥、网卡、交换机 | Ethernet |
| 物理层 | 比特(b) | / | 集线器 | IEEE 802.2 |
详见链接
四. Socket
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。TCP/IP协议族包括运输层、网络层、链路层。
先从服务器端说起。服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。
应用层和传输层之间
客户端:connector,write,
服务端:bind,listen,accept
网络中唯一的进程:IP+TCP+端口号。(IP唯一标识一个主机,TCP协议和端口号唯一标识主机的一个进程)
Http请求get和post的区别
从三个层面来解答:
-
Http请求报文层面:
get将请求信息放在URL中,长度有限(URL有限);post放在报文体(body)中,长度无限。
get将请求信息放在URL中,请求信息和URL用?隔开,请求信息的格式为键值对;post将请求信息放在报文体中,想获得请求信息必须解析报文,因此安全性比get要高些,事实上要获取报文体中信息也容易(解决方案https),故安全性差不多。 -
数据库层面:
get符合幂等性和安全性;post不符合。
get是一种查询操作;post需要提交数据,获取结果不同、作用于上一结果。
幂等性:对数据库的一次操作和多次操作获取的结果是一致的,则认为符合幂等性
安全性:对数据库的操作没有改变数据库。
-
其他层面:
get可以被缓存,被存储;而post不行。
CDN处理,减轻服务器负担。
Http响应状态码
五种可能取值:
- 1xx: 指示信息,表示请求已被接收,继续处理
- 2xx: 成功,表示请求已被成功接收、理解、接受
- 3xx: 重定向,要完成请求必须进行更进一步的操作
- 4xx: 客户端错误,请求有语法错误或者请求无法实现(404)
- 5xx: 服务器端错误,服务器未能实现合法的请求
常见的状态码:
- 200:OK,正常返回信息
- 400:Bad Request,客户端请求有语法错误,不能被服务器所理解
- 401:Unauthorized,请求未经授权,这个状态码必须和www-Authenticate 报头域一起使用
- 403:Forbidden,服务器收到请求,但是拒绝提供服务
- 404:Not Found,请求资源不存在,eg,输入了错误的URL
- 500: Internal Server Error,服务器发生不可预期的错误
- 503:Server Unavailable,服务器当前不能处理客户端的请求,一段时间后可能恢复正常
Http & Https
端口号
一个主机可以提供多种服务,但是这个主机只有一个IP地址,区分不同的服务就需要端口来区分. 例如,web服务器提供80端口来建立HTTP连接(443HTTPS连接).
五.HTTP发展历史-http0.9/http1.0/http1.1/http2.0
1.简介
HTTP(hyper text transfer protocol,超文本传输协议),从万维网(WWW)服务器传输超文本到本地浏览器的传送协议.
属于应用层的协议,基于TCP/IP通信协议传递数据(HTML文件,图片等)
2.发展
HTTP版本:http0.9,http1.0,http1.1,http2.0
-
http0.9
GET/index.html- 只有一个GET命令,表示建立TCP连接后,请求获取服务器html资源.
-
http1.0
-
改进
发送内容:任何格式的内容都可以发送,不仅可传输文字,亦可传输图像,视频,二进制文件
请求命令:除了GET命令,引入POST,HEAD命令
请求响应格式:加入头信息(header)
其它:新增状态码,权限,缓存等 -
问题
短连接,每个TCP连接只能发送一个请求.发送数据完毕,连接就关闭,如果还要请求其它资源,就必须再新建一个连接
-
-
http1.1
-
改进
- 长连接: HTTP 1.1 支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个 TCP 连接上可以传送多个 HTTP 请求和响应,减少了建立和关闭连接的消耗和延迟,在 HTTP1.1 中默认开启 Connection: keep-alive,一定程度上弥补了 HTTP1.0 每次请求都要创建连接的缺点。
- **缓存处理:**在 HTTP1.0 中主要使用 header 里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1 则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
- 带宽优化及网络连接的使用,HTTP1.0 中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1 则在请求头引入了range 头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
- 错误通知的管理,在 HTTP1.1 中新增了24 个错误状态响应码,如 409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
- Host 头处理,在 HTTP1.0 中认为每台服务器都绑定一个唯一的 IP 地址,因此,请求消息中的 URL 并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个 IP 地址。HTTP1.1 的请求消息和响应消息都应支持 Host 头域,且请求消息中如果没有 Host 头域会报告一个错误(400 Bad Request)。
-
问题
- 队头阻塞:虽然 1.1 版允许复用 TCP 连接,但是同一个 TCP 连接里面,所有的数据通信是按次序进行的。服务器只有处理完一个回应,才会进行下一个回应。要是前面的回应特别慢,后面就会有许多请求排队等着。这称为"队头堵塞"(Head-of-line blocking)。
-
-
明文传输不安全:HTTP1.x 在传输数据时,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份,这在一定程度上无法保证数据的安全性。
- **无状态特性–带来巨大HTTP头部:**HTTP1.x 在使用时,header 里携带的内容过大,在一定程度上增加了传输的成本,并且每次请求 header 基本不怎么变化,尤其在移动端增加用户流量。
-
不支持服务器推送消息
-
虽然 HTTP1.x 支持了 keep-alive,来弥补多次创建连接产生的延迟,但是 keep-alive 使用多了同样会给服务端带来大量的性能压力,并且对于单个文件被不断请求的服务(例如图片存放网站),keep-alive 可能会极大的影响性能,因为它在文件被请求之后还保持了不必要的连接很长时间。
-
SPDY协议
谷歌研发SPDY协议,降低延迟、压缩header等HTTP-SPDY-SSL-TCP
-
Http2.0
- 改进
- 二进制分帧
- 多路复用
- 请求优先级
- header压缩
- 服务端推送
- 问题
- 延迟问题,两个握手TCP三次握手和TLS安全层握手
- 并未真正解决队头阻塞问题,如果丢包,需要重传
- 改进
-
HTTP3
基于UDP协议的“QUIC”协议,真正完美解决了“队头阻塞”问题。
- 基于UDP,实现快速握手功能
- 实现了类似TCP的流量控制,可靠传输
- 继承TLS加密功能
- 多路复用,彻底解决TCP中队头阻塞问题(同一个物理连接上可以有多个独立的逻辑数据流)
-
总结:
- HTTP/1.1有两个主要的缺点:安全不足和性能不高。
- HTTP/2完全兼容HTTP/1,是“更安全的HTTP、更快的HTTPS",头部压缩、多路复用等技术可以充分利用带宽,降低延迟,从而大幅度提高上网体验;
- QUIC 基于 UDP 实现,是 HTTP/3 中的底层支撑协议,该协议基于 UDP,又取了 TCP 中的精华,实现了即快又可靠的协议.
六.IT楠老师-知识点补充
DNS域名解析:在浏览器输入域名,先从本地缓存(host文件)查找域名,若没有通过DNS域名解析,将域名解析为IP地址,这样就可以找到服务器.
计算机有65536个端口,网络端口默认80
码出高效(孤尽)
第一章 计算机基础
-
32位计算机,CPU能处理32位电路信号
-
正数补码反码原码一样;负数补码是符号位不变,其余位取反加一
-
规定数字类型?类型是有范围的(电路条数),防止溢出
-
8位(b)=1字节(B),1024B= 1KB; 1024 = 2^11
-
科学计数法:符号,有效数字,指数
单精度浮点数格式:符号位,阶码位(存指数),尾数位(有效数字)
禁止通过判断两个浮点数是否相等来控制某些业务流程,可使用decimal类型,float和double存在精度损失问题. -
CPU:控制器,运算器,内部寄存器组成
-
数据的丰装及发送:端口--IP地址–MAC地址
-
UDP仅是在IP数据包上增加端口等部分信息,是面向无连接的,不可靠的传输,多用于视频通信,电话会议等(即少一帧数据也无妨);TCP是面向连接的,是一种端到端间通过失败重传机制建立的可靠数据传输方式,有拥塞控制,序号机制,校验等.
-
IP是面向无连接,无状态的,没有额外机制保证发送的包是否有序的到达.
IP地址属于网络层,主要功能在WLAN内进行路由寻址,选择最佳路由 -
数据包存活时间,TTL(time to live)
ICMP(internet control message protocol),检测网络是否通畅,主机是否可达,路由是否可用等网络运行状态的协议. -
为什么需要三次握手?
信息对等和防止超时.信息对等:客户端和服务端都需要确定:自己和对方有收发信息的能力;防止超时,如果两次就可以建立连接,之前超时的请求到达服务端,会导致脏连接 -
2MSL
本文深入讲解网络通信原理,涵盖DNS解析、TCP/IP协议、HTTP/HTTPS工作流程,以及HTTP协议的发展历程,从HTTP0.9至HTTP2.0。解析三次握手与四次挥手过程,探讨Socket的工作机制,对比GET与POST请求的区别,详解HTTP响应状态码。
1976

被折叠的 条评论
为什么被折叠?



