计算机网络
1、七层模型,对应的协议
物理层 (比特流) RJ45、IEEE802.3
数据链路层 (数据帧) PPP(点对点)、VLAN(虚拟局域网)、MAC()
网络层 (数据包) IP ARP RARP、ICMP、 RIP OSPF IGRP
传输层 (数据段) TCP UDP SSL(安全套接层) TLS
会话层 (会话协议数据单元)
表示层 (表示协议数据单元)
应用层 (应用协议数据单元)
FTP(文件传输协议)、DNS(域名解析协议)、HTTP(超文本传输协议)、SMTP(简单邮件传输协议)、Telnet远程登陆协议
2、浏览器输入www.baidu.com发生了什么?
(1) 解析百度的ip,浏览器->DNS,发出请求
1.在本地的host文件查找
2.找出默认网关的mac地址,组织数据(本地ip,网关的mac,DNS的ip),发送给网关 (arp地址解析协议)
3、默认网关-->路由器(路由协议,寻找路径)--->目的网关 (IP:ip数据包传输,路由选择、ICMP:传输过程中的差错检查)
3.询问根DNS服务器,查询出域名百度ip,原路返回数据(DNS域名解析服务、UPD传输)
(2) 得到百度的ip,建立TCP的3次握手(默认端口80)
(3) 浏览器通过HTTP协议,发出请求data
(4) web服务器收到请求,查询自己的服务器,得到相应的资源(css,html,js,image),通过http响应,原路返回给浏览器
(5) 浏览器,资源进行解析、渲染,返回页面给user
(6) 浏览器发送ajax请求,异步更新页面
(7) TCP连接释放,四次挥手释放
3、DNS域名系统是什么?原理是什么
Domain Name System。 工作:主机名(localhost)+域名--> ip地址
网络通信中,每个ip可标识一台主机
工作原理:
1、用户主机(运行DNS的客户端),需要查询某个主机名时,就查询DNS服务器解析该名称
2、DNS客户端发送查询报文:要查询的域名/主机+DNS服务器类型(本地/根)+查询的类型
3、本地缓存host--本地域名--根域名
4、查询到ip,原路返回,并把结果保存到,本地缓存
5、基于UDP服务,端口53
6、该应用一般不直接被用户使用,而是为其他应用服务,比如:http,smtp需要主机名-->ip地址的转换
https://blog.csdn.net/u014774781/article/details/48376123
https://blog.csdn.net/root_robot/article/details/53872812
4、arp协议
arp地址解析协议 ip地址--> mac地址 ip+mac确定世界上唯一主机
工作原理
1、arp列表,每个主机,arp缓冲区,arp列表。存放ip地址与mac地址对应关系
2、寻找目的主机ip对应的mac地址
(1) 源主机发送数据, arp列表寻找目的ip所对应的mac地址,有,发送data
(2) 没有,向本网段,所有主机(广播),发送arp数据包,内容:源主机ip+源主机mac+目的主机ip
3、arp响应包,本网络所有主机受到arp数据包
(1)不是自己ip,忽略该包
(2)是,取出源主机的ip+mac,写入自己的arp列表,存在,覆盖
(3)arp响应包。写入自己的mac地址
4、收到arp响应包。目的主机ip+mac写入自己arp列表,发送data。收不到arp响应包,arp查询失败.
5、icmp协议
Internet control message protocol 因特网报文控制协议
ping tracert
ip主机--路由器 传输过程中的差错检查 不可靠协议(不保证数据送达)
作用:主机探测(ping)、路由维护,路由选择(tracert),流量控制
(1) ping:探测主机--目的主机 是否可通信
TTL生存时间(数据包,被路由器丢弃前,通过对网段数量)
(2) tracert:探测 主机--目的主机 所经过的路由情况
https://blog.csdn.net/swanabin/article/details/52048259
6、TCP/IP协议是什么
TCP、IP协议:不是一个协议而是,协议簇,是个协议的总称
| 网络层:IP、ARP、RARP、ICMP、
| 传输层:TCP、UDP
7、TCP、UDP的区别
TCP 传输控制协议, UDP用户数据报文协议
(1) 面向连接(tcp3次连接),可靠的(确认包)
非面向连接(无),不可靠的(无)
(2) 流模式协议(缓冲池,recv(1024)),面向字节流。
数据报模式协议(1个报文1个报文的),面向报文的。
(3) 注重数据安全,速度一般
注重数据传输速度,安全性一般
(4) TCP保证数据正确性,保证数据顺序
UDP不保证,不保证
8、服务以及端口号
http 80
https 443
mysql 3306
oracle 1521
ssh 22
telnet 23
Sockets 1080
dns 53
FTP 21
SMTP 25
POP 110
9、https与http的区别
(1) http + 加密+认证 + 完整性保护 == https
SSL (Secure Socket Layer,传输层,网络连接加密)
TLS (Transport Layer Security,传输层,提供保密性,数据完整性)
(2) 端口号 443 80
(3) 明文,密文(安全)。
(4) 证书。https需要到ca申请证书,一般免费较少,需要交费
10、http的返回状态码
2XX 成功系列
200 OK 客户端请求成功
201 已创建,成功请求并创建了新的资源
3XX 重定向系列
301 永久移动,请求的资源被永久的移动到新url
302 临时移动,资源被临时移动,继续使用原来的url
4XX 客户端错误系列
401 未认证的用户,访问被拒绝
404 无法找到指定资源位置
500XX 服务器错误系列
500 服务器遇到意外情况,不能完成客户请求
503 服务不可用,服务器维护或者负载过重,不能应答
https://www.cnblogs.com/111testing/p/6039097.html
11、http协议的请求方式:8种
HTTP1.0
GET、POST、HEAD
HTTP1.1
PUT、DELETE、CONNECT、OPTIONS、TRACE
12、http的GET与POST的区别
1.get:从服务器上获取数据,post向服务器传递数据
2.提交的data:
get在请求的URL中发送
?name1=value1&name2=value2
post在请求的HTTP请求体中发送的
POST /test/demo_form.asp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2
3.数据量大小。get传送的data不能大于2KB,有字节限制
post没有限制
4.get安全性特别低,post安全性高
13、http请求头+请求体(post才有请求体)、响应体
1.请求头
POST /index HTTP/1.1\r\n
# 请求方式 资源位置 http版本
Host: passport.cnblogs.com\r\n
# 请求url
Content-Type: application/x-www-form-urlencoded\r\n
# 浏览器可接收的内容类型、字符集
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36\r\n
# 浏览器身份标识:浏览器使用的操作系统(window),版本,名称(firfox)
Cache-Control: no-cache
# 是否使用缓存机制
Cookie: $Version=1; Skin=new;
# 服务器通过set-cookie设置
Origin: http://www.itbilu.com
# 跨域资源请求
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\n
# 可接受的响应类型:text,html,xml...
Referer: http://127.0.0.1:8800/\r\n
# 推荐者:前一个页面url,用于流量统计
\r\n\r\n 请求头结束标志
# 请求体 # 注意只有post请求才会有请求体
useranme=jack&password=2222'
2、响应体
HTTP/1.1 200 OK
#http协议版本 响应状态码200 正常
Content-Type: application/json; charset=utf-8
#返回内容的类型json + 字符集 utf-8
https://www.cnblogs.com/fighter007/p/8445435.html
10、三次握手与四次挥手
(1)客户端,将标志位SYN置为1,产生一个值seq=x(随机),并发送该data包到服务端。
客户端--> SYN_SENT 状态,等待服务端确认
(2)服务端,收到数据包,通过标志位SYN=1,知道客户端请求建立连接。
服务端,将标志位SYN置为1,ACK置为1,ack=x+1,产生一个值seq=y(随机),并发送该data包到客户端
确认连接请求。 --> SYN_RECV状态
(3)客户端收到ack确认包,检查标准位ACK=1,ack=x+1,正确。
将标志位ACK置为1,ack=y+1,发送该data包给服务端。
服务端收到,检查标志位ACK=1,ack=y+1,正确,
连接建立成功,双方--> ESTABLISHED状态 (established已建立的)
完成3次握手,开始传入数据
11、为什么是三次,为什么是四次
1、三次握手
目的:为了确认双方都有接受、发送消息的能力
第一次:A->B,证明A有发送消息的能力
第二次:->B&&B-->A,证明B有接受消息的能力,并且有发送消息的能力
第三次:A-->B,证明A有接受消息的能力
2、四次挥手
保证数据能够完整传输
(1)当B端收到A的FIN报文通知,表示A没有数据发送给B了
(2)未必B所有的data都完整的发送给了A,B不会马上关闭socket,可能还需要发送some data给A
(3)B发送完成,再发送FIN给A端,告诉A同意关闭连接
12、为什么A要先进入TIME_WAIT状态,等待2MSL时间后才进入CLOSE状态
为了确保B能收到A的ack确认包
目的:
若A发完ack确认包后,直接进入CLOSED状态。
如果ack确认包丢失,B等待超时后,重新发送释放连接请求,
此时A已经关闭,不会响应,B永远无法正常关闭
2MSL:2*报文的最大生存时间