TCP/IP协议
在浏览器中输入URL地址信息到显示主页都发生了什么?
当输入地址之后,会先到DNS服务器讲域名解析成IP地址,然后客户端和服务端建立TCP链接,服务端进行相应返回给客户端,客户端收到相应从而进行页面渲染你,操作完成之后就会断开链接
在这过程中都用到了哪些协议
TCP协议:与客户端建立链接
IP协议:网络层发送数据
OPSF协议: 路由选择协议 选择最优线路
ARP协议: IP地址转换成MAC地址
Http协议: 访问页面
网络分层模型
什么是分层模型
分层模型就是将节点索要完成的数据处理工作分别交由硬件和软件模块去完成,这样可以讲通信和网络互联,这一复杂的工作变得相对简单
常见的分层模型有几层
常见的分层模型有四层,五层,七层 三种方式
物理层: 是网络通信和数据传输的一个介质,主要功能是利用传输为数据链路层提供物理连接层(负责传输并监控数据的出错率一边透明准确地数据传输)
数据链路层: 在物理层地基础上,建立数据链路的链接(单位是帧)
网络层:为数据传输节点建立逻辑链接由路由选择算法来分组(最优网络路径)
传输层: 主要用于传输数据
应用层:包含会话层,表现层可以理解为服务
TCP和UDP的区别
TCP 提供面向链接的服务,在数据传输之前必须先建立链接,数据传输后释放链接
UDP 在传送数据之前不需要先建立链接,主机先收到UDP报文时不需要任何确认
TCP的特点是有连接可靠性高,以字节流的形式传输,传输效率慢,所需资源跟适合要求通信可靠的环境,首部字节20-60
UDP的特点是无连接 可靠性低,以数据报文的形式传输,传输效率较慢,所需的资源少,适合通信要求速度高的场景首字节8
TCP如何保证可靠传输
分割数据段,为数据编号,校验和流量控制,阻塞控制,ARP协议,超时重传
TCP的三次握手
当客户端建立TCB链接主动打开CLOSED,服务端被动打开CLOSED和LISTEN客户端会主动发送握手信号和一个随机的seqends值给服务器端,当服务器接收到信号,证明能正常接收,会返回客户端一个信号里面包含客户端上次发送的握手信号,以及应答信息,应答信息就是上次的seqends加上一然后给客户端一个握手信号和一个seqend当客户端收到第二次握手信号后,再进行第三次握手,其中包含了服务器端发送的ACK并给应答信号加1 并在原有的seqends加1
为什么有三次握手
三次握手是为了建立可靠的链接
第一次握手什么也不能确定,客户端确认信号发送是正常的
第二次握手可以确定信号发送成功了,并且也能正常接收
第三次握手可以确定服务端主动发送的信号,能否正常发送并且能否顺利接收
为什么传了SYN还会传ACK
客户端和服务端发送的数据是否准确无误
三次握手中的SYN和ACK都是为了确定消息是准确无误的
什么是四次挥手
服务端和客户端属于正常链接状态并拥有数据传输,当客户端想要断开链接的时候,客户端会主动关闭,然后向服务端第一次发送挥手信号,包含断开信号,和SEQ服务端收到信号后会通知应用进程,然后向客户端发送第二次挥手信号包含ack告知客户端收到了请求并且收到了seq这条请求的应答信号,并且有seq主动发送请求的一个包,但是没有向客户端发送FIN断开的信号,此时服务端任有可能给客户端发送数据,当数据传输完成之后服务端就可以关闭这条链接接了(被动关闭)服务端会向第三次挥手信号包含FIN断开信号(服务端同意断开请求)ACK,seq
ACK应答的还是客户端发送的seq那条记录,客户端收到服务端发送的FIN断开信号之后会发起第四次挥手,包含了ACK(服务端发送的FIN信号)并且有seq+1动作信号,服务端就可以断开链接了,客户端还会等待2MSL秒再断开链接
为什么是三次握手四次挥手
TCP是一个可可偶的面向链接的协议,所以建立连接是三次握手,ACK和FIN可以放在一个报文里,但是关闭链接时服务器可能还有数据要发送,但是客户端主动发送关闭,但服务端还有数据没有处理,所以并没有携带FIN的信号,所以会在数据完成之后主动发送FIN
总结:tcp协议是可靠的协议,三次握手时可以将ACK和FIN再一个报文中发送,但是关闭连接时可能会有数据还在处理,当处理完成之后服务端会主动发送断开信号
Http协议
HTTP是如何保证长连接的
sockat是持久链接
长连接是由三次握手建立的链接,可以再此链接内发送多次request请求,Http1.0时默认是短链接,Http1.1默认是长连接,响应头中加入Connection:teep-alive
谈一下Request的结构
request是由请求行,请求报文,空白行,请求体组成
请求行包含:请求报文(由 域名,冒号,和域值)组成
请求方式(8种):生成在服务器,浏览器接收的语言版本
请求资源的url: 请求web服务器的ip地址和端口号
协议版本:cookie的信息
空白行:分割报头和请求体的专用行
请求体:get请求方法不建议传任何数据
post请求可以传数据
Request请求中包含了哪些方式,你了解哪些
有get,post,delete, put,Head,trace Connelt,options
get:一般用于查询
post: 一般用于新增,修改
put:一般用于更新数据
delete: 一般用于删除数据
head:头,追踪用得上
Trace:做追踪时使用,用于诊断和测试
connelt: 保留字目前没有使用
options: 用于请求服务器,查询资源,选项相关,与业务逻辑无关
get和post的区别
get:请求传参是在url地址后传参,参数大小有限制(或者是空间较小),有缓存,用在读的场景多
post:请求传参是在请求体中进行传参,参数无限制(或者空间较大,一般在80m以上),没有缓存,用在写的场景多
response的结构是怎么样的
其中包含了状态行,响应报头,空白行,响应正文
状态行:http的协议版本,响应状态码,响应结果描述信息
响应报头: web服务器的版本信息,内容类型以及字符编码方式 ,响应信息cookie等信息
空白行:分割报头和请求体的专用行
响应正文:从web服务器端响应来的HTML代码
Resonce有哪些状态码
状态码由三位数组成: 第一个数字定义了响应类型,且有五种可能
1xx: 指示信息—表示请求已经接收,继续处理
2xx: 成功—请求已被成功接收
3xx: 重定向----表示完成请求必须进行更进一步的操作
4xx:服务端错误----请求有语法错误或请求无法实现
5xx: 服务端错误—服务器未能实现合法的请求
常遇见的状态码以及含义
200: 表示成功
400: 表示请求有语法错误
401:请求未经授权
403: 请求资源不存在
404:请求资源不存在
500: 服务器内部发生不可预知的错误
503: 服务器不能处理当前请求,可能过一段时间就能恢复正常
http1.0和1.1的区别
1.0:是短链接1.1是长连接
1.1:状态码比1.0多24个
1.1:引入了更多的缓存处理策略,
1.1:宽带链接以及网络链接做了更多的处理
线上环境一把是使用HTTPS协议,因为安全性高
Http和Https的区别
http默认是80端口
https默认是443端口
https是安全的,http不是安全的
因为https是安全的所以性能消耗更大一些