什么是IP
Internet Protocal
主要约定了两件事:
- 如何定位一台设备
- 如何封装数据报文,以跟其他设备交流
具体内容我们不关心
只要在互联网中,就有至少一个独特的IP
IP分为内网和外网
如何获取外网IP
- 从电信租用带宽
- 买了一个路由器,然后用电脑和手机分别连接路由器 广播出来的无线WIFI。
- 只要路由器连上电信的服务器,那么路由器就会有一个 「外网IP」,比如「14.17.32.211」就是一个外网IP。也就是在互联网中的地址。所有连这个路由器的设备都是这个外网IP,手机和电脑,用内网IP区分。
- 如果重启路由器,那么很有「可能」被重新分 配一个「外网IP」,也就是说路由器没有「固定的 外网IP」
内网IP
- 路由器会在你家里创建一个内网,内网中的设备使用内 网IP,—般来说这个IP的格式都是192.168.xxx.xxx
- 一般路由会给自己分配一个好记的内网IP,如 192.168.1.1
- 然后路由会给每一个内网中的设备分配一个不同的内网 IP,如电脑是192.168.1.2,手机是192.168.1.3,以此类 推。
路由器的功能
- 路由器有两个IP, —个外网IP和一个内网IP
- 内网中的设备可以互相访问,但是不能直接访问外网
- 内网设备想要访问外网,就必须经过路由器中转
- 外网中的设备可以互相访问,但是无法访问你的内网
- 外网设备想要把内容送到内网,也必须通过路由器
- 也就是说内网和外网就像两个隔绝的空间,无法互通, 唯一的联通点就是路由器
- 所以路由器有时候也被叫做「网关」
几个特殊的IP
- 127.0.0.1表示自己
- localhost通过hosts指定为自己
- 0.0.0.0不表示任何设备
端口
- 一台机器可以提供很多服务
- 每个服务一个号码,这个号码就叫端口号port
端口 port
一台机器可以提供不同服务
- 要提供HTTP服务最好使用80端口
- 要提供HTTPS服务最好使用443端口
- 要提供FTP服务最好使用21端口
- 一共有65535个端口(基本够用)
我怎么知道应该用什么端口
维基百科一个一个列出来了
端口使用规则
- 0到1023 (2的10次方减1)号端口是留给系统使用的
- 你只有拥有了管理员权限后,才能使用这1024个端口
- 其他端口可以给普通用户使用
- 比如http-server默认使用8080端口
- —个端口如果被占用,就换一个端口
IP和端口缺一不可
记住这句话,你之后一定会产生疑惑的
域名是什么
- 域名就是对IP的别称
baidu.com对应什么IP
- windows -> 运行 -> cmd -> ping baidu.com
知识点
- —个域名可以对应不同IP
- 这个叫做均衡负载,防止一台机器扛不住
- —个IP可以对应不同域名
- 这个叫做共享主机,穷开发者会这么做
域名和IP是怎么对应起来的
- 通过DNS Domain Name System
当输入 xiedaimala.com
过程
-
Chrome浏览器会向电信or联通提供的DNS服务器 询问xiedaimala.com 对应什么IP
-
电信or联通会回答一个IP (具体过程很复杂,不研究)
- nslookup baidu.com 域名寻找
-
然后Chrome才会想对应IP的80/443端口发送请求
-
请求内容是查看xiedaimala.com的首页
为什么是80或443端口
- 服务器默认用80提供http服务
- 服务器默认用443提供https服务
- 你可以在开发者工具里看到具体的端口
题外话
WWW
- www. xiedaimala.com 和 xiedaimala.com
- 是同一个域名吗?
- 不是
他们是什么关系
- com是顶级域名
- xiedaimala.com是二级域名(俗称一级域名) www.xiedaimala.com是三级域名(俗称二级)
- 他们是父子关系
- github.io把子域名xxx.github.io免费给你使用
- 所以www.xiedaimala.com和xiedaimala.com可以不是同一家公司,也可以是
- WWW是多余的吗?
- 是的,非常多余。
如何请求不同的页面
-
路径可以做到
-
工具
- 使用Chrome开发者工具Network面板看看区别
同一个页面,不同内容
- 查询参数可以做到
- www.baidu.com/s?wd=hi
- www.baidu.com/s?wd=hello
同一个内容,不同位置
-
锚点可以做到
注意
- 锚点看起来有中文,实际不支持中文
- #参考书会变成#%E5%8F%82%E8%80%83%E4%B9%A6
- 锚点是无法在Network面板看到的
- 因为锚点不会传给服务器
URL
协议+域名或IP +端口号+路径+查询字符串+锚点
URL举例
https://www.baidu.com/s?wd=hello&rsv_spt=1#5
-
https 协议
-
www.baidu.com 域名
-
/s 路径
-
wd=hello&rsv_spt=1 查询参数
-
#5 锚点
HTTP (协议)
HyperText Transfer Protocol
基于TCP和IP两个协议
curl命令
-
用 Git Bash可以使用curl命令
-
用curl可以发HTTP请求
- curl -v http://baidu.com
- curl -s -v - https://www. ba id u .com
-
理解以下概念
-
url会被curl工具重写,先请求DNS获得IP
-
先进行TCP连接,TCP连接成功后,开始发送HTTP 请求
-
请求内容看一眼
-
响应内容看一眼
-
响应结束后,关闭TCP连接(看不出来)
-
真正结束
-
HTTP规定
请求的格式是什么,
>GET / HTTP/1.1
>Host: baidu.com
>User-Agent: curl/7.67.0
>Accept: */*
响应的格式是什么
< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
< Connection: keep-alive
< Content-Length: 2443
< Content-Type: text/html
< Date: Sun, 29 Mar 2020 02:30:38 GMT
< Etag: "58860402-98b"
< Last-Modified: Mon, 23 Jan 2017 13:24:18 GMT
< Pragma: no-cache
< Server: bfe/1.0.8.18
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
「资料来源:饥人谷」