首页 > 其他分享 >web基础协议

web基础协议

时间:2024-01-14 21:32:36浏览次数:28  
标签:web 请求 协议 IP 基础 TCP tcp 连接 客户端

一.web通信流程

在开始学web服务器之前,需要先理解web通信协议,才能够更好的吸收其中精华。

我们平时浏览⽹⻚的时候,会打开浏览器,输⼊⽹址后按下回⻋键,然后就会显示出你想要浏览的内容。在这个看似简单的⽤户⾏为背后,到底隐藏了些什么呢?

  • 浏览器本身是⼀个客户端,当你输⼊URL的时候,⾸先浏览器会去请求DNS服务器,通过DNS获取相应的域名对应的IP
  • 然后通过IP地址找到IP对应的服务器后,要求建⽴TCP连接
  • 等浏览器发送完HTTP Request(请求)包后,服务器接收到请求包之后才开始处理请求包
  • 服务器调⽤⾃身服务,返回HTTP Response(响应)包;
  • 客户端收到来⾃服务器的响应后开始渲染这个Response包⾥的主体(body),等收到全部的内容随后断开与该服务器之间的TCP连接。

⼀个Web服务器也被称为HTTP服务器,它通过HTTP协议与客户端通信。

这个客户端通常指的是Web浏览器。

web服务器工作原理

Web服务器的⼯作原理可以简单地归纳为:

  • 客户端通过TCP/IP协议建⽴到服务器的TCP连接
  • 客户端向服务器发送HTTP协议请求包,请求服务器⾥的资源⽂档
  • 服务器向客户端发送HTTP协议应答包,如果请求的资源包含有动态语⾔的内容,那么服务器会调⽤动态语⾔ 的解释引擎负责处理“ 动态内容”,并将处理得到的数据返回给客户端
  • 客户端与服务器断开。由客户端解释HTML⽂档,在客户端屏幕上渲染图形结果

客户端请求到达服务端流程

  • 当客户端拿到服务端域名对应的ip后,浏览器会以一个随机端口(1024<随机端口<65535)向服务器的web程序(nginx、apache)的80端口发起tcp连接请求。
  • 该请求经过复杂的网络环境后到达服务端,进入到服务器的对应的网卡,再进入到linux内核的tcp/ip协议栈,一层一层的解开数据包,甚至经过防火墙,最终到达nginx程序,确认tcp/ip连接。
  • 确认tcp连接之后,客户端继续发起http请求,如常见的get、post请求方法。

小结

因此你会发现,web通信原理中,主要分两块协议的建立

  • tcp/ip
  • http

client工作流程

web基础协议_客户端

TCP/IP协议

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

简单说就是TCP协议就是控制数据包在传过过程中的规范格式。

IP是Internet Protocol(网际互连协议)的缩写,是TCP/IP体系中的网络层协议。

设计IP的目的是提高网络的可扩展性:一是解决互联网问题,实现大规模、异构网络的互联互通;二是分割顶层网络应用和底层网络技术之间的耦合关系,以利于两者的独立发展。

根据端到端的设计原则,IP只为主机提供一种无连接、不可靠的、尽力而为的数据包传输服务。

TCP/IP协议指的不仅仅是tcp、和ip这两个协议。

而是由FTP、SMTP、TCP、UDP、IP等各种协议组成的协议簇,但是TCP/IP最最具有代表性,因此俗称TCP/IP协议。

web基础协议_TCP_02

OSI七层模型

提到tcp/ip协议,就不得不学一下OSI七层模型。

web基础协议_客户端_03

TCP/IP三次握手

web基础协议_IP_04

讲解 TCP 三次握手和四次握手之前,我们先了解一下 TCP 和 UDP 这两个重量级的传输层协议。

用户数据报协议 UDP(User Datagram Protocol):

  • UDP 在传送数据之前不需要先建立连接,远程主机在收到 UDP 报文后,不需要给出任何确认。
  • 虽然 UDP 不提供可靠交付,但在某些情况下 UDP 确是一种最有效的工作方式(一般用于即时通信),比如: QQ 语音、 QQ 视频 、直播等等

传输控制协议 TCP(Transmission Control Protocol):

  • TCP 提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。
  • TCP 不提供广播或多播服务。由于 TCP 要提供可靠的,面向连接的传输服务(TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、流量控制、拥塞控制机制,在数据传完后,还会四次挥手断开连接用来节约系统资源),这不仅使协议数据单元的首部增大很多,还要占用许多处理机资源。
  • TCP 一般用于文件传输、发送和接收邮件、远程登录等场景

抓包工具,查看TCP/IP的三次握手

经典的问题,你了解TCP/IP的三次握手

四次挥手ma

具体数据包的报文格式,暂时不用过多去琢磨;

什么时候需要琢磨数据包的序列号,只有当你在生产环境下,遇见的及其棘手的问题,比如一些数据不同步,交易数据丢失等极端情况,需要去抓取数据包,逐个分析,数据包的完整性,序列号。

目前只需要大致了解数据包的类型,以及作用即可;

web基础协议_客户端_05

1. 抓取ssh登录的数据包,查看 tcp/ip协议基础之上的 SSH应用层协议
登录web-7机器
windows(192.168.xx.xx)  
↓
vmnet8(nat虚拟网卡,10.0.0.1)    
↓
web-7(nat 10.0.0.7)

两个ip:port的数据包交互
10.0.0.1:随机端口      >   10.0.0.7:22

wireshark大鲨鱼抓包工具查看ssh登录数据包收发情况

在window去登录 web-7

ssh远程连接,也是建立的tcp/ip的三次握手之上

2. 查看网站访问的数据包,基于 tcp/ip 基础之上的 HTTP应用层协议
由于捕捉的是 vmnet8的网卡流量,检测http协议,只能给这个网段内的机器,发http请求

这里需要注意,如果你多次访问nginx,你可能会抓不到默认的tcp三次握手
tcp三次握手,是用于首次连接的
访问nginx页面的请求,第一次以及建立好连接,默认会有一个保持连接
你后续的请求,。就不会再继续tcp三次握手,而是直接发送http请求
你和nginx服务器已经建立好tcp连接了。

使用firefox另一个浏览器,重新去建立tcp连接

web基础协议_TCP_06

web基础协议_IP_07

web基础协议_客户端_08

web基础协议_TCP_09

web基础协议_IP_10

抓包工具,查看四次挥手

理论知识,固然确实重要,得先记住理论的流程,然后再去动手实践,得出真知。。

1.先建立ssh连接,然后退出ssh会话,查看是否发出tcp/ip 的四次挥手,四个数据包

web基础协议_客户端_11

二.常见端口号

常用的熟知端口号

应用程序

FTP

TFTP

TELNET

SMTP

DNS

HTTP

SSH

MYSQL

熟知端口

21,20

69

23

25

53

80

22

3306

传输层协议

TCP

UDP

TCP

TCP

UDP

TCP

TCP

TCP

三.什么是socket套接字

任何,两个机器的连接,指的是tcp/ip协议的连接,本质上是两个socket的通信
socket套接字就是 ip+port的具象化
比如部署nginx服务,运行在 10.0.0.7:80 端口,这就是一个socket
通过本地去访问这个socket,浏览器随机指定的端口,发出请求
10.0.0.1:61145   这个也是一个socket

本地套接字

比如单机LNMP,应用程序在机器内部内存之间数据交互

========================================
套接字存在的意义,在于让两端进行数据交互,数据传输

php
10.0.0.7:9000

mysql(10.0.0.7:3306  这是一个ip:port形式的 socket)

mysql -uroot -p -h10.0.0.7

================================================================================
另一个形式是,也就是文件形式的本地socket
(因为本地内存文件socket形式,比网络socket传输效率更高,)
在后面高级部分,我教大家企业常用的python后端部署

socket的都是具象化证明服务的确运行了,可以对外提供访问了,可以交互了
mysql运行在 /tmp/mysql.sock

这个文件存在,则表示mysql运行
你可以通过这个/tmp/mysql.sock去登录mysql数据库

咱们暂时部署形式都是 网络socket形式,将程序部署在 ip:port的形式。。

网络套接字

部署LNMP,这是不同机器之间的远程访问,就是远程socket

比如 http协议的交互
10.0.0.1:61145  >   10.0.0.7:80

nginx反向代理,远程部署
lb-5
10.0.0.5:80      

↓

web-7
10.0.0.7:9000 (php-fpm)

叫做远程的socket通信

简单说就是你部署 10.0.0.5:80   这个服务,还会和远程的另一个服务通过网络通信 
10.0.0.7:9000
两端进行数据交互
专业名词就叫做socket通信

HTTP协议工作原理

这些内容,都是你部署网站,后续的nginx高级知识点,必备的内容

无状态

http默认不会记住每一次连接的状态信息,下一次都会认为是一个新的客户端连接

比如你去找到禁用谷歌浏览器的cookie功能,

1.你去禁用这个功能后

2. 你每次登录淘宝网, 再打开一页面,网站又提示你需要登录

这是网站为了解决无状态实现的技术

web基础协议_TCP_12

cookie

三.后续HTTP知识

请求方法

定义client发给server的请求,是什么类型

  • get获取静态数据(查看一个图片)
  • post 发送提交一些数据 (登录表单,提交账户密码数据)
  • ...一堆方法,看博客即可

请求、响应报文查看

通过F12即可查看,也可以通过抓包工具查看

响应状态码

1.当你client  发出 get请求 获取一个图片信息发出requests
2.server  响应结果,nginx找到这个图片,返回给用户,response
响应信息,是有对应的状态码的。。
学习nginx会遇见的内容
  • 20x系列,表示请求,响应正常解析
  • 30x系列,表示本次请求,被转发到另一个服务器上了。。
  • 40x系列,表示client客户端访问的url有问题,该资源不存在
  • 50x系列,表示网站的服务端出错了(php-fpm)没有运行
  • 。。。

四.总结梳理,面试拿出来背即可

1.dns篇
用户访问域名www.yuchaoit.cn
↓
浏览器跳转
↓
浏览器缓存(disk cache)
↓
Hosts文件
↓
本地DNS服务器(递归查询 > 迭代查询)
↓
client 向 server发起查询(递归查询)
server 向 server发起查询(迭代查询)

2.TCP/IP协议篇(三次握手)
client > SYN报文,请求连接 
server > SYN,ACK报文 响应client
client  > ACK,建立连接 

3.客户端发起http请求
- 请求方法是什么、get、post、delete
- 请求主机是什么、www.yuchaoit.cn
- 请求资源是什么 、 http://yuchaoit.cn:8090/upload/2022/05/Xnip2022-05-01_16-32-30-b82235c9b62c42af8ea25e0313ca42f7.jpg
- 请求端口是什么、默认http是80、https是443
- 请求参数是什么、请求头部信息(资源类型、是否压缩、cookie、浏览器客户端等)
- 请求信息最后的换行

4.服务端响应的内容
- server信息(web服务器软件类型)
- 响应文件类型
- 响应头部信息(是否压缩,语言编码,是否保持连接等)

5.客户端发起TCP四次挥手断开连接。
client > 发起断开请求 FIN=1 
server  > 响应断开   FIN、ACK
server  > 发起断开请求 FIN=1
client > 确认断开连接 ACK


标签:web,请求,协议,IP,基础,TCP,tcp,连接,客户端
From: https://blog.51cto.com/yiyuan/9242389

相关文章

  • HTML5基础之常见文本控制标识
    一、文本控制标记 1.标题标记 标题标记是指在网页文件中,以独立方式显现的标题内容,其后面的文字内容会在显示时会另起一行,在HTML中有6个级别(按从大到小分):  <h1><h2><h3>...<h6> 语法格式: <hn align="文字对齐方式">标题文本</hn>  (n=1,2,3,4,5,6)  a......
  • HTML5基础之结构元素
    结构元素  结构元素是将显示区域通过结构元素方式进行方位上的划分,以方便后续的管理或样式上的设置  提醒:结构划分,仅体现在标记上,在显示或功能上无区别(美化方面由后面的样式实现) 1.header元素 显示区域的头部,即网页显示区域的项部空间。 2.nav元素 用于定义......
  • 洛谷比赛【LGR-171-Div.3】深圳科创学院基础赛 #7 &「RHOI」Round 2 赛后总结
    洛谷比赛【LGR-171-Div.3】深圳科创学院基础赛#7&「RHOI」Round2赛后总结比赛链接:https://www.luogu.com.cn/contest/146495建议先看原题再看文章。A-Water(P10056)有\(n\)个杯子,每个杯子的容积是\(a\),且初始装有\(b\)体积水。你可以进行任意次操作,每次操作选择任......
  • 搜索学习笔记+杂题 (基础二 dfs/bfs的拓展)
    搜索杂题:博客中讲述的题的题单:戳我二、dfs/bfs的各种变式1、深搜深搜以指数级的时间复杂度闻名,稍不注意时间就会爆炸,所以一般会用到剪枝的技巧(这个技巧基本上是因题而异,需要平时的刷题与积累)。深搜同样也是一种可变性极高的算法(其实都可以不叫做一种算法,深搜已经是一种做题的......
  • MacOS安装Stable Diffusion WebUI实战教程
    前言1.电脑配置:m1pro芯片,16+512的内存和SSD空间2.默认开启科学网络代理,在终端也使用网络代理请参考博客3 中第2条 本实践以博客1为主要安装步骤,并根据博客2的方法配置Anaconda环境*此处省略了非必要的细节,重点展示conda虚拟环境和stablediffusion的结合配置 1......
  • 面向对象编程基础
    类和对象的区别和联系类是抽象的,概念的,代表一类事物,比如人类,猫类..,即它是数据类型.对象是具体的,实际的,代表一个具体事物,即是实例.类是对象的模板,对象是类的一个个体,对应一个实例属性,成员变量,字段成员变量=属性=field(字段)(即成员变量是用来表示属性的,统一叫属......
  • k8s教程----零基础快速入门
    k8s详解教程----零基础快速入门前言:Kubernetes(k8s)作为云原生的核心平台,吸引了越来越多的运维、开发、测试以及其他技术员去了解学习。随着行业越来越内卷,k8s已经被广泛使用,作为一名运维人员,k8s将成为一个必须掌握的技术点,同时,我们也可以依靠它跳槽涨薪。一、什么是K8s它前......
  • 【JAVA基础】Java项目开发工具之Maven
    JAVA开发工具IDE有哪些?eclipce、idea、vscode等等IDEA比Eclipse更强大和高效。IDEA提供了更好的代码补全和重构功能,更好的代码导航和搜索功能,以及更好的支持多模块项目和多语言开发等。构建项目工具构建项目工具有哪些?Maven、Gradle、Ant等Maven管理和构建项目以及维护......
  • 多项式基础
    FFT/NTT板子,就不说了。分治FFT给定序列\(g_{1\dotsn-1}\),求序列\(f_{0\dotsn-1}\)。其中\(f_i=\sum_{j=1}^if_{i-j}g_j\),边界为\(f_0=1\)。Solution1朴素地做是\(\mathcal{O}(n^2)\)的。观察到后面的项依赖前面的项。于是我们可以考虑用cdq分治实现。具体......
  • Python Flask 模块安装、引用模块、启动Web服务方法
    前言全局说明模块安装、引用模块、启动服务一、安装flask模块官方源:pip3installflask==2.3.2国内源:pip3installflask==2.3.2-ihttp://pypi.douban.com/simple/--trusted-hostpypi.douban.com以上二选一,哪个安装快用哪个flask安装时间2023-11更多国内源:......