从一次完整的网络请求过程来了解网络协议
1、网络概述
1.1、计算机网络
计算机网络是用通信线路和通信设备将分布在不同地点的多台计算机系统互相连接起来,按照共同的网络协议,共享硬件、软件,最终实现资源共享的系统。
1.2、网络编程
使用网络能够把多方电脑等设备链接在一起,然后可以进行数据传递。网络编程从大的方面说就是对信息在不同网络设备中的发送到接收,中间传输为物理线路的作用。
2、网络协议
2.1、网络请求过程
我们在浏览器的地址栏输入一个地址https://mp.****.net/mdeditor/103049430#后回车,很快我们会看到这篇博客的页面,这中间经历了什么呢?
请求DNS解析域名-》TCP的三次握手三次握手与四次握手-》建立TCP链接后发起HTTP请求-》服务器响应HTTP请求-》浏览器解析HTML代码&同时请求HTML代码中的资源(如js,css,图片等)-》最后,浏览器对页面进行渲染并呈现给用户。
2.2、认识URL
(Uniform Resource Locator,统一资源定位符)
protocol ????/ hostname[:port] / path / [;parameters][?query]#fragment
protocol协议类型
指的是当前请求的协议类型,这里是https协议,常见的协议还有如下:
file 资源是本地计算机上的文件。格式file:///,注意后边应是三个斜杠。
ftp 通过 FTP访问资源。格式 FTP://
gopher 通过 Gopher 协议访问该资源。
http 通过 HTTP 访问该资源。 格式 HTTP://
https 通过安全的 HTTPS 访问该资源。 格式 HTTPS://
mailto 资源为电子邮件地址,通过 SMTP 访问。 格式 mailto:
MMS 通过 支持MMS流媒体协议的播放该资源。(代表软件:Windows Media Player)格式 MMS://
ed2k 通过 支持ed2k(专用下载链接)协议的P2P软件访问该资源。(代表软件:电驴 格式 ed2k://)
Flashget 通过 支持Flashget:(专用下载链接)协议的P2P软件访问该资源。(代表软件:快车) 格式 Flashget://
thunder 通过 支持thunder(专用下载链接)协议的P2P软件访问该资源。(代表软件:迅雷 格式 thunder://
当然我们自己也可以按照需求,自己定义自己的协议名,如常用到的移动应用开发原生和webview的h5交互,我们就会自定义一个:bridge://xxxx来交互信息。还有在iOS中外部通过URLScheme跳转到某个App,一般这个协议都是自己定义的,如跳转到微信,是weixin://。
hostname(主机名、域名)
是指存放资源的服务器的域名系统(DNS) 主机名或 IP 地址,域名都对应有ip地址,有时,在主机名前也可以包含连接到服务器所需的用户名和密码(格式:username:[email protected])。
port(端口号)
整数,可选,省略时使用方案的默认端口,各种传输协议都有默认的端口号,如http的默认端口为80。https默认443,ftp默认:21。如果输入时省略,则使用默认端口号。有时候出于安全或其他考虑,可以在服务器上对端口进行重定义,即采用非标准端口号,此时,URL中就不能省略端口号这一项。
端口是两个进程(应用程序)在同一台电脑或者不同电脑之间通信的标识。每一款应用的绑定的端口不一样,数据不会发错。在同一台电脑中,两个进程的端口不能相同,如果已经存在,就往后去找对应的数做端口号。
在网络技术中,端口(Port)包括逻辑端口和物理端口两种类型。物理端口指的是物理存在的端口,如ADSL Modem、集线器、交换机、路由器上用 于连接其他网络设备的接口,如RJ-45端口、SC端口等等。逻辑端口是指逻辑意义上用于区分服务的端口,比如用于浏览网页服务的80端口,用于FTP服务的21端口等。由于物理端口和逻辑端口数量较多,为了对端口进行区分,将每个端口进行了编号,这就是端口号。
在linux系统中,端口可以有65535(2的16次方-1个)个之多,既然有这么多,操作系统为了统一管理,所以进行了编号,这就是端口号。
path(路径)
eg:https://www.jianshu.com/p/f9afd709d447
从域名的第一个/开始到最后一个/为止,是文件路径的部分。/p/
从域名最后一个/开始到?为止,是文件名部分;如果没有?,则是从域名最后一个/开始到#为止,是文件名部分;如果没有?和#,那么就从域名的最后一个/从开始到结束,都是文件名部分。本例中的文件名是f9afd709d447,文件名也不是一个URL的必须部分,如果没有文件名,则使用默认文件名。默认的就是index,default 等
parameters
百度百科:这是用于指定特殊参数的可选项。暂时没碰到
query(查询参数)
页面加载请求数据是需要的参数,用“&”符号隔开,每个参数的名和值用“=”符号隔开。
fragment(锚点)
#开始,字符串,用于指定网络资源中的片断。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。定位网页滚动的位置
2.3、网络协议及数据传输过程
网络协议理论上是有七层,各自对应有自己的协议
数据的传输图
3、如何使用网络协议
网络协议看起来会很复杂,但是集线器、路由器、操作系统等已经帮我们实现了协议,我们做开发时只需要调用接口就行。
这种接口就是指socket编程,更复杂的协议接口,除非我们是底层(路由器开发等),服务器开发一般只需要socket编程即可。
使用网络协议实际上就是通过socket控制tcp的数据传输和接收过程。