目录
OSI七层架构及对应协议(从上往下)
应用层:http、https、FTP、DNS等
表示层:Telnet等
会话层:SSL、DNS等
传输层:TCP/UDP等
网络层:IP、ARP等
数据链路层:Ethernet、PPP等
物理层:IEEE 802.x等
IP地址相关
IP地址是标识在互联网中设备信息的地址,两台设备想要进行通信需要知道对方的IP地址才能传输数据。IP地址分为两种:
IPv4
IPv4地址是目前应用最广泛的一种,格式是以点号分隔的十进制,常见的私网IP分为3类:A类(10.0.0.0~10.255.255.255)、B类(172.16.0.0~172.16.255.255)、C类(192.168.0.0~192.168.255.255)
IPv6
IPv6地址是一种新的地址,目前并未广泛普及,格式是以冒号分隔的十六进制。
查询IP地址
windows系统下查询设备ip地址相关信息可以使用快捷键win+R键打开运行窗口,随后输入cmd打开命令行终端,在命令行终端里输入
ipconfig
即可查看
Linux中的CentOS系统下查询网络相关信息可以在终端里输入
ifconfig
即可查看
如果提示没有该命令,可以使用如下命令进行下载相关工具包
yum -y install net-tools
常见的IP地址
127.0.0.1(localhost):本机ip(域名)地址
xxx.xxx.x.1:一般是路由器地址,即常见的网关
xxx.xxx.x.255:当前ip地址段的广播地址,通过此ip和某个端口,可以向此ip地址段的所有开放了该端口的设备发送信息
检查网络连接情况
一般使用 ping 命令进行检查,首先ping一下公网的某个服务器
ping www.baidu.com
测试路由器网络连接是否正常,如果能ping通则ping一下网关地址
ping 你的路由器地址
测试本机和路由器之间的连接有没有问题,没问题最后ping一下主机地址
ping 127.0.0.1 或 ping localhost
测试网卡是否正常工作
端口相关
端口的概念
端口是计算机之间传输数据的通道,计算机之间的数据在传输的时候就像我们走在街道上,端口号就是我们的目的地,相当于街道上的门牌号。每一个端口都有对应的端口号,计算机中的端口号有65536个,也就是2的16次方。
常见的端口号
21:FTP服务
22:SSH服务
23:Telnet远程连接服务
25:SMTP 简单邮件传输协议
53:DNS 域名解析服务器
80:HTTP 服务
443:HTTPS 服务
1080:socket 套接字
1433:SQL server 数据库
1521:Oracle 数据库
3306:Mysql 数据库
6379:Redis 缓存
27017:MongoDB 非关系型数据库
TCP协议和UDP协议
TCP协议
TCP(Transmission Control Protocol)协议是一种稳定的、可靠的、基于字节流的传输层网络协议,它的特点是面向连接和可靠传输。一般用于文件传输,浏览器上网等场景
面向连接
TCP协议必须先建立连接才能传输数据,数据传输完成后必须断开连接,建立连接时会建立三次握手,断开连接时会经历四次挥手。
三次握手
第一次握手:由客户端向服务端发送 连接请求。
第二次握手:由服务端向客户端发送 客户端的连接请求应答 和 对客户端的连接请求 。
第三次握手:由客户端向服务端发送 服务端的连接请求应答。
四次挥手
第一次挥手:由客户端向服务端发送 断开请求。
第二次挥手:由服务端向客户端发送 客户端的断开请求应答。此时客户端已经没有数据要发送了,但服务端可能还有数据要发送或没接受完。
第三次挥手:由服务端向客户端发送 断开请求。
第四次挥手:由客户端向服务端发送 服务端的断开请求应答。此时,客户端等待一段时间后依然没有收到回复,则证明服务端已正常关闭,则客户端也关闭连接。因为如果服务端没有收到第四次挥手时的应答,则会重复发送一次断开请求,如果此时客户端已经关闭连接,则会导致连接错乱,无法正常关闭,所以客户端发送完应答信息之后会等待一段时间以确保对方收到应答信息,此次连接能够正确关闭。
可靠传输
TCP协议拥有以下机制来保证可靠传输:
应答机制
超时重传
错误校验
流量控制(等待接受方接受数据)和堵塞管理
UDP协议
UDP(User Datagram Protocol)协议是一种面向报文的,无需建立连接的传输层网络协议。特点是可以支持一对一、一对多、多对多等通信方式,特点是不可靠传输,可以使用广播地址进行通信。
TCP协议和UDP协议的区别
TCP协议面向连接,UDP协议不面向连接;
TCP协议的安全性比UDP协议高;
TCP协议的传输速度比UDP协议慢;
TCP协议占用带宽比UDP协议大;
TCP协议可靠性比UDP协议高;
TCP协议传输数据是有序的,UDP协议传输数据是无序的
TCP协议每条连接只能支持两台主机,UDP协议可以一对一、一对多甚至多对多;
HTTP协议
HTTP协议的概念
HTTP协议就是超文本传输协议,一般用于规定浏览器和web服务器通信的数据格式。HTTP协议是基于TCP协议的,所以传输数据前要先建立连接。
浏览器和web服务器的通信过程(速通版)
1.浏览器将获取的URL发送给DNS域名解析服务器,以获取域名对应的IP地址。
2.浏览器向指定服务器的IP地址建立连接。(三次握手)
3.浏览器向web服务器发送http请求数据。
4.web服务器向资源主机获取资源。
5.资源主机返回资源给web服务器。
6.web服务器返回http响应数据给浏览器,并断开连接(四次挥手)
URL
URL格式
协议部分 + :// + 域名/IP地址 + / + 资源路径 + /? + 参数部分
例:https://www.baidu.com/s?tn=44004473_8_oem_dg&ie=utf-8&wd=HTTP
参数格式:参数名=参数值
参数之间用 & 符号分隔
参数不是必需的
抓包(丐版)
抓包就是抓取浏览器和web服务器通信的过程中产生的所有数据包,使用浏览器自带的开发者工具即可抓包。
在浏览器地址栏中输入URL(https://www.baidu.com/),随后摁下F12打开开发者工具,在标题栏中选择Network选项进入网络抓取界面,回车,即可抓取浏览器与URL中域名相对应的服务器通信过程。
请求信息(GET和POST)
请求信息由请求行+请求头+空行+请求体组成。
请求头由 请求方式 + 请求资源路径 + HTTP协议版本组成
GET请求报文参考:
---- 请求行 ----GET / HTTP/1.1 # GET 请求方式 请求资源路径 HTTP 协议版本---- 请求头 -----Host: www.itcast.cn # 服务器的主机地址和端口号 , 默认是 80Connection: keep-alive # 和服务端保持长连接Upgrade-Insecure-Requests: 1 # 让浏览器升级不安全请求,使用 https 请求User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36(KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36 # 用户代理,也就是客户端的名称Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 # 可接受的数据类型Accept-Encoding: gzip, deflate # 可接受的压缩格式Cookie: pgv_pvi=1246921728; # 登录用户的身份标识Accept-Language: zh-CN,zh;q=0.9 #可接受的语言---- 空行 ----
GET请求是获取服务器数据,所以没有请求体。
POST请求是向服务器提交数据,需要携带信息,所以会有请求体。(可以不带请求体,但很少见)
GET方式的资源路径必须放在URL内,POST方式的资源路径可以放URL也可以放请求行。
GET方式的参数有长度限制,POST方式的参数没有。
GET方式的参数只接受ASCII字符的数据类型,而POST方式的参数没有限制。
响应信息
响应信息由响应行 + 响应头 + 空行 + 响应体组成。
响应行也可以称作状态行,由协议版本 + 状态码 + 状态描述
响应信息参考
--- 响应行 / 状态行 ---HTTP/1.1 200 OK # HTTP协议版本 状态码 状态描述--- 响应头 ---Server: Tengine # 服务器名称Content-Type: text/html; charset=UTF-8 # 内容类型Transfer-Encoding: chunked # 发送给客户端内容不确定内容长度,发送结束的标记是 0\r\n,Connection: keep-alive # 和客户端保持长连接Date: Fri, 23 Nov 2018 02:01:05 GMT # 服务端的响应时间--- 空行 ------ 响应体 ---<!DOCTYPE html><html lang=“en”>…</html># 响应给客户端的数据
常见的 HTTP 头部信息
Host | 请求的目标主机域名 |
Referer | 防盗链 |
User-Agent | 客户端信息 |
Accpet | 客户端期望接受的数据类型 |
Accpet-Encoding | 客户端期望接受的压缩格式 |
Accpet-Language | 客户端可以接受的语言类型 |
Connection | 客户端与服务器的连接类型:长连接或短连接 |
Content-Type | 请求体或响应体的数据类型 |
Content-Length | 请求体或响应体的数据长度 |
Cache-control | 缓存方式 |
Last-Modified | 服务器上的数据的最后一次修改时间 |
Cookie | 标识用户身份信息 |
Set-cookie | 服务器返回给客户端的身份信息,下一次请求需要携带此cookie |
Date | 服务器返回数据的数据 |
常见状态码
100 | 服务器收到了客户端的请求头部信息,让客户端继续发送数据 |
200 | 请求成功 |
301 | 资源被转移,请求将被重定向 |
302 | 资源被转移,请求需要使用GET方式获取 |
304 | 服务器资源与客户端浏览器已缓存的资源一样,无需重新获取 |
307 | 资源被转移,可以使用和原始请求相同的请求方式重新获取 |
400 | 通用客户端错误 |
401 | 客户端没有被认证 |
403 | 请求被拒绝,客户端没有权限访问该资源 |
404 | 服务器找不到该资源 |
407 | 客户端需要先获得代理服务器认证 |
500 | 通用服务器错误 |
503 | 暂时无法连接服务器 |