内容提要:

  1. URL 包含哪几部分,每部分分别有什么作用
  2. DNS 的作用是什么,nslookup 命令怎么用
  3. IP 的作用是什么,ping 命令怎么用
  4. 域名是什么,分别哪几类域名

URL(Uniform Resource Locator)的组成部分

传输协议 + 域名或IP + 端口号 +路径 + 查询字符串 + 锚点

eg.

https://www.baidu.com/swd=hello&rsv_spt=1#5

==传输协议== + 域名或IP + 端口号 + ++路径++ + 查询字符串 + 锚点

eg.

==https://==www.baidu.com++/s++wd=hello&rsv_spt=1#5

  • 传输协议( scheme: [protocal] ):httphttpsftp
  • 域名( [//authority] Domain Name ):www.baidu.com
  • 端口( :Port ):通常省略,:80:443:8080等(http 大部分默认80, https默认443)

[//authority] = [userinfo@]host[:port]

  • 路径( Path to the file):/s
  • 查询参数([?query] Parameters ):wd=hello&rsv_spt=1或者?key1=value1&key2=value2
  • 锚点( [#fragment] Anchor ):#5

另一个常见的 URL(URI) 的例子:

https://zh.wikipedia.org/w/index.php?title=Special:随机页面#5

  • https:协议
  • zh.wikipedia.org:域名
  • /w/index.php:路径(不同的页面)
  • ?title=Special:随机页面:查询参数(相同页面,不同内容)
  • #5:锚点(相同页面,相同内容,不同位置)

其中若不写端口号,则表示使用 https 对应的默认端口号 443

localhost:8080

DNS(Domain Name System):域名系统

作用:根据域名查出IP地址

即:将域名解析为IP 地址

nslookup可查询IP(DNS)地址

直接使用可以查询到域名的 A 记录

nslookup 命令用于查询 DNS 的记录,查看域名解析是否正常,在网络故障的时候用来诊断网络问题

1
2
# nslookup + 域名
nslookup domain [dns-server]
1
nslookup xmasuhai.xyz

IP的作用,ping 命令用法

  • 一是定位一台设备
  • 二是封装数据报文跟其他设备交流

ping 命令是常用的网络命令,它通常用来测试与目标主机的连通性。

即:

  • 标识主机,具体地说,标识其网络接口,并且提供主机在网络中的位置,就此提供创建到达该主机的路径的能力。
  • 每个 IP 数据包的标头包含了发送主机的 IP 地址和目的主机的 IP 地址。

    1
    2
    3
    4
    
    # ping [参数][主机名或ip地址]
    ping baidu.com
    ping localhost
    ping 127.0.0.1

Ctrl + c中断

域名(Domain Name)

是互联网的一项服务,主要用于域名与 IP 地址的相互转换

如果要访问一个地址(使用域名),都要先通过DNS查询域名对应的IP地址,才能进行访问

域名分类

域名分顶级域名,二级域名和三级域名

比如对于 www.baidu.com

  1. 顶级域名:com
  2. 二级域名:baidu.com
  3. 三级域名:www.baidu.com

域名的第一级是顶级域,它包括通用顶级域,例如.com.net.org

以及国家和地区顶级域,例如.us.cn.tk

完整域名的所有字符加起来不得超过 253 个 ASCII 字符的总长度。

当每一级都使用单个字符时,限制为 127 个级别:127 个字符加上 126 个点的总长度为 253。

但实际上,某些域名可能具有其他限制;也没有只有一个字符的域名后缀。


内容提要卐,后面是视频记录流水账


网络和 IP

李爵士的发明

WWW=URL+HTTP+HTML

HyperText Transfer Protocol协议

IP: Internet Protocol

IP(Internet Protocol)主要约定

1.如何定位一台设备 2.如何封装数据报文(用来和其他设备交流)

互联网(not WWW),至少一个独特的IP

IP分内网和外网

设备 路由器 电信DNS服务器 其他用户

获取外网IP 买 | 蹭

  • 首先,你需要租用宽带(电信或者联通)
  • 其次,你需要购买一个路由器(有时候也被叫做“网关”)
  • 当路由器连接上电信或者联通的服务器后,路由器就会获得一个外网的IP,所有通过路由器连接的设备,他们的外网IP都是一致的。
  • 注意:如果当你重启路由器之后,可能会被分配一个新的外网IP,也就是说,路由器是没有一个固定的外网IP,除非高价买,企业级需要

内网IP

  • 路由器创建内网,内网中的设备使用内网IP,格式192.168.xxx.xxx192.168.1.1
  • 路由再给每一个内网中的设备(PC、手机)分配一个不同的内网IP
  • 内网的所有设备都有一个相同的外网IP
  • 路由器会为每一个内网中的设备分配一个不同的内网IP

内网IP固定

查看IP

1
ping xxx.com
1
ipconfig

查看ip38.com

路由器的功能

  1. 路由器有两个IP,内外各一
  2. 内网中的设备可互相访问,但不可直接访问外网
  3. 内网设备通过路由器中转,访问外网
  4. 外网设备无法访问你的内网,不管直接间接
  5. 外网把内容推送到内网,必须通过路由
  6. 内外隔绝,路由是唯一联通点,即网关

几个特殊的IP

  1. 127.0.0.1表示自己
  2. localhost通过hosts指定为自己
  3. 0.0.0.0不表示任何设备,后端用
  4. localhost是个域名,不是地址,它可以被配置为任意的 IP 地址,不过通常情况下都指向 127.0.0.1(ipv4)和 ::1

eg.

1
2
3
127.0.0.1	localhost
255.255.255.255	broadcasthost
::1             localhost

改为:

1
127.0.0.1	xmas

就能在地址栏用xmas访问127.0.0.1

问:hosts 文件在哪?

答: 在 Windows 系统中,hosts 位于 C:\Windows\System32\drivers\etc\hosts

在 macOS / Linux系统中,hosts 位于 /etc/hosts

问:在window或mac上,当我们访问localhost时,究竟在访问哪里?

修改host文件以及localhost与127.0.0.1的区别

localhost、127.0.0.1 和 本机IP 三者的区别?

localhost和127.0.0.1的异同

一些概念

(1)127.0.0.1在Linux也好,Windows也好,都会有这个循回地址的。

(2)在IP地址的规定中,第一部分是1~126为A类地址,128~191为B类地址,那么中间留的127.0.0.1被称为本地回环地址,主要作用有两个:一是测试本机的网络配置,能PING通127.0.0.1说明本机的网卡和IP协议安装都没有问题;另一个作用是某些SERVER/CLIENT的应用程序在运行时需调用服务器上的资源,一般要指定SERVER的IP地址,但当该程序要在同一台机器上运行而没有别的SERVER时就可以把SERVER的资源装在本机,SERVER的IP地址设为127.0.0.1也同样可以运行。

(3)这个地址也是给本机loop back接口所预留的IP地址,它是为了让上层应用联系本机用的,如果没有这个loop back接口通常上层应用无法与自己联系,因为它仍然会把数据往IP层发送,数据到了IP层如果发现目的地是自己,则回被回环驱动程序送回。因此通过这个地址也可以测试TCP/IP的安装是否成功,就是驱动,网卡 都是否正常,但无法测试出具体TCP/IP的配置是否正确,也无法测试出网卡是否正常,因为数据在离开IP层之前就已经被送回去了。

端口

一台机子可提供很多服务,每个服务一个号码,即端口号port

不同的服务

  1. 提供HTTP服务,最好使用80端口
  2. 提供HTTPS服务,最好443端口
  3. 一共有65535个端口,FTP是21端口
  4. 该用什么端口:端口对应的服务列表wiki

其他使用规则

  1. 0到1023(2的10次方减1,计1024个)号端口,留给系统使用,自己使用须取得管理权限
  2. http-server默认使用8080端口
  3. 一个端口被占用时,只能换另一个

IP是用来定位一个设备的

端口是用来定位一个设备的服务

有了IP和端口,就可以定位一个设备提供的服务

比如百度的设备提供网页服务;腾讯的设备提供聊天服务;淘宝的设备提供支付服务等

这些服务都可以通过IP和端口唯一确定

总之,IP和端口缺一不可

域名、路径、查询参数、锚点

qq.comt.tt

域名:对IP的别称

1
2
3
ping baidu.com

#将得到四个回复(win),mac 需ctrl+c中断

baidu.com对应ping baidu.comqq.com对应ping qq.com

知识点

  • 一个域名可以对应不同IP,即均衡负载,分流,防止一台机子扛不住,或者恶意的DDos攻击,网站优化策略
  • 一个IP可对应不同域名,即穷开发者的共享主机

域名和IP,怎么对应起来?

  • 通过DNS

当你输入xiedaimala.com

Chrome开发者工具中,Network面板,xiedaimala.com点击,Headers里,请求根目录https://xiedaimala.com/

得到响应Response 一串HTML代码,请求CSS,请求图片,请求js等

过程

客户端向DNS服务器(DNS服务器有自己的IP地址)发送域名查询请求

DNS服务器告知客户机Web服务器的IP地址

  • 提供DNS的服务器的服务商:电信或联通等
  • 浏览器向提供DNS的服务器询问xiedaimala.com对应什么IP
  • 服务器回答一个IP(具体过程三次握手、四次握手,面试必问)
  • 请求内容是查看这个网址的网页

eg.xiedaimala.com的首页index.html

why 80443端口

  • 服务器默认用80提供http服务
  • 服务器默认用443提供https服务
  • 在开发者工具查看具体端口
  • 不需要写在地址栏里,写了也帮你消掉

nslookup

1
nslookup -qt=[type] domain [dns-server]

type可以是:

  • A 地址记录
  • AAAA 地址记录(IPv6)
  • CNAME 别名记录
  • HINFO 硬件配置记录,包括 CPU、操作系统信息 等

询问域名,域名ns,寻找lookup

1
nslookup baidu.com

默认自动设置 电信DNS 114.114.114.114 备用 114.114.115.115

但设置了可能会被代理商嵌入广告

题外话

www

  • A:www.xiedaimala.com和B:xiedaimala.com不是同一个域名
  • com(没有点)是顶级域名
  • xiedaimala.com是二级域名(俗称一级域名)
  • www.xiedaimala.com是三级域名(俗称二级)
  • 祖父子关系
  • github.io把子域名xxx.github.io免费给你使用
  • A和B可以不是同一家公司
  • www是多余的,历史残留,脱x子放*

如何请求不同的页面

用路径
工具

使用Chrome开发者工具Network面板查看区别

同一个页面,不同内容

用查询参数:https://xxx.com/s?wd=hello

同一个内容(页面),不同位置

用锚点

锚点就是文档内部的定位

注意:

  • 锚点看起来有中文,实际不支持中文
  • #参考书会变成#%E5%8F%82%E8%80%83%E4%B9%A6
  • 锚点不会传给服务器,所以是无法在Network面板里看到的

URL

统一资源定位符(Uniform Resource Locator),简称URL,是因特网上标准的资源的地址(Address)

Every HTTP URL conforms to the syntax of a generic URI.

每个有效的 URI 都指向一个独特的资源。这个资源可以是一个 HTML 页面,一个 CSS 文档,一幅图像、视频、邮件、PDF等

The URI generic syntax consists of a hierarchical sequence of five components

  • URI = scheme:[//authority]path[?query][#fragment]
  • -authority = [userinfo@]host[:port]

wiki:URL

组成

传输协议 + 域名或IP + 端口号 +路径 + 查询字符串 + 锚点

eg.

https://www.baidu.com/swd=hello&rsv_spt=1#5

**www.baidu.com**是域名。 表明正在请求哪个 Web 服务器。或者,可以直接使用 IP address, 但因为不便,所以不常使用。

就算没写,也应知道端口,HTTPS默认端口443,通常省略

/path/to/index.html 是网络服务器上资源的路径,路径表示访问哪个网页

ftp://是文件传输协议,不属于www,本地或局域网

wd=hello&rsv_spt=1?key1=value1&key2=value2 是提供给网络服务器的额外参数。 这些参数是用 & 符号分隔的键/值对列表。

wd=hello&rsv_spt=1查询字符串表示页面的展示内容,第几部分,第几章,第几页,或者查询关键词

在返回资源之前,Web服务器可以使用这些参数来执行额外的操作。

#Anchor#SomewhereInTheDocument是资源本身的另一部分的锚点。

锚点表示资源中的一种“书签”,给浏览器显示位于该“加书签”位置的内容的方向。 例如, 在 HTML 文档上,浏览器将滚动到定义锚点的位置

在视频或音频文档上,浏览器将尝试转到锚代表的时间

#后面的部分(也称为片段标识符)[fragment]从来没有发送到请求的服务器

锚点会被浏览器‘吃掉’,锚点只和浏览器有关,没必要发送给服务器

服务器无法接收#之后的内容,参数,不想被扣年终bonus的记住

HTTP协议

基于TCPIP两个协议:也称TCP/IP

curl 命令

curl可以发HTTP请求

  • curl https://xiedaimala.com
  • curl -v http://baidu.com
  • curl -s -v -- http://baidu.com

-v:verbose 啰嗦模式

用Chrome(地址栏输入URL),得到网页,开始解析页面

而用curl命令,只得到网页,不解析页面

理解以下概念

  • url会被curl工具重写,先请求DNS获得IP
  • 先进行TCP连接,TCP连接成功后,开始发送HTTP请求
  • 请求内容看一眼
  • 相应内容看一眼
  • 响应结束后,关闭TCP连接(看不出来)
  • 真正结束

> curl baidu.com

< 以下是返回的内容

1
2
3
<html>
<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
</html>

查看curl 发送的五行请求

> curl -v http://baidu.com

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
*   Trying 180.101.49.12:80... #DNS询问IP地址
* TCP_NODELAY set
* Connected to baidu.com (180.101.49.12) port 80 (#0) # 链接服务器80端口
> GET / HTTP/1.1 #获取根路径 使用的协议
> Host: baidu.com #一个IP有可能对应多个域名,所以访问`180.101.49.12`所对应的的域名是`baidu.com`
> User-Agent: curl/7.67.0 #用户访问工具
> Accept: */* #期待返回的内容 任意内容
> # 回车表示请求结束,一共五行
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK # 以`<`开头的就是服务器返回的内容
< Accept-Ranges: bytes
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
< Connection: keep-alive
< Content-Length: 2381
< Content-Type: text/html
< Date: Mon, 20 Jan 2020 13:46:42 GMT
< Etag: "588604c8-94d"
< Last-Modified: Mon, 23 Jan 2017 13:27:36 GMT
< Pragma: no-cache
< Server: bfe/1.0.8.18
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
<
<!DOCTYPE html>
<html>
<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
</html>
* Connection #0 to host baidu.com left intact

启用baidu.com,请重新访问http://www.baidu.com/,对应访问的IP改变,TCP启动,连接到80端口,之后发送五行内容,得到

1
2
3
<!DOCTYPE html>
<!--STATUS OK--><html>...</html>
* Connection #0 to host www.baidu.com left intact

只有TCP结束了,才真正结束

HTTP

规定请求的格式是什么,响应式格式是什么

HTTP规定如何写五行请求以及如何返回响应


·未完待续·

参考文章

相关文章