| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 计算机网络面试 -> 正文阅读 |
|
[网络协议]计算机网络面试 |
OSI七层模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。 TCP/IP四层模型:应用层、传输层、网络层、网络接口层。 应用层:通过不同的应用层协议为不同的应用提供服务,如:FTP、Telnet、DNS、SMTP等。 传输层:TCP/UDP,实现两台主机进程之间的通信。 网络层:主要负责相同或者不同网络中计算机之间的通信。在网络层中IP协议提供的是一个不可靠、无连接的数据传递服务。该协议实现两个功能:寻址和分段。 网络接口层:负责监视数据在主机和网络之间的交换。 OSI模型和TCP/IP模型的异同: 相同:1.都采用层次结构。2.都能提供面向连接和无连接两种通信服务机制。 不同:1.OSI七层,TCP/IP四层。2.TCP/IP参考模型没有对网络接口层进行细分,只是概念的描述,OSI对参考模型对服务和协议进行了明确的区分。3.OSI先有模型后有规范,适合于描述各种网络,TCP/IP是先有协议集然后建立模型。
HTTP是一种简单的请求-响应协议,用于在WEB游览器和网站服务器之间传递消息。HTTP使用的是TCP作为支撑传输层协议。工作默认在TCP协议的80端口,HTTP客户机发起一个与服务器的TCP连接,一旦连接建立,游览器和服务器就可以通过套接字接口访问TCP。客户机(发送→接收)和服务器(接收→发送)通过套接字接口接受HTTP请求报文和发送HTTP响应报文。通信内容以明文的方式发送,没有任何加密。通信结束客户端与服务器关闭连接。? HTTPS在HTTP的基础上通过传输加密和身份认证的方式保证传输过程的安全性。 1.客户端发起一个HTTPS请求,连接到服务器443端口,发送的信息主要包括自身支持的算法列表和密钥长度。 2.服务器将自身所支持的加密算法与客户端算法列表进行对比并选择一种支持的加密算法,然后将它和密钥自己发送给客户端。 3.服务器向客户端发送一个包含数字证书的报文,该数字证书中包含证书的颁发机构、过期时间、服务端的公钥等信息。 4.服务端发送一个完成报文通知客户端SSL(secure sockets layer)的第一阶段已经协商完成。 5.SSL第一次协商完成后,客户端发送一个回应报文,报文中包含一个客户端生成的随机密码串pre_master_secre,该报文是经过证书中的公钥加密的。 6.客户端会发送一个报文提示服务端在此之后的报文是采用pre_master_secre加密的。 7.客户端向服务端发送一个finish报文,这次握手中包含第一次握手至今所有报文的整体校验值,最后协商是否完成却决于服务端是否能正确解密报文。 8.服务端同样发送6中相同作用的报文,让客户端进行确认,最后发送finish报文告诉客户端自己能正确解密报文。 当客户端和服务端的finish报文交换完成后,SSL连接就算建立完成,之后进行和HTTP相同的过程。HTTP是采用明文传输,HTTPS采用对称加密的方式。 HTTP80端口,HTTPS443端口。HTTP页面响应快,HTTP只有三次握手,HTTPS除了三次握手,还需要经历一个SSL协商。 Session,Cookie. Cookie被禁用重写URL的方式将标识放在URL参数中,可以实现会话保持。
get提交的数据会存放在URL中,请求参数会被完整的保留在游览器记录里,参数直接暴露在URL中,会存在安全问题,往往只用于获取资源。post参数请求放在主体中,参数不会被保留,post方法更安全,主要用于修改服务器上的资源。 get请求只支持URL编码,post请求支持多种编码格式。? get只支持ASCII字符格式的参数,post没有限制。 get提交的数据大小有限制,post没有限制。 get通过Request.QueryString来取得变量的值,post通过Rquest.Form来获取。 get只产生一个TCP数据包,post产生会两个(并不是所有游览器都产生两个)。
? ? 1.DNS解析:用户输入网址回车的时候,游览器获得一个域名,实际通信中我们需要一个IP地址,我们需要把域名转为IP地址。 2.TCP连接:游览器通过DNS连接到WEB服务器真正的IP地址后,向WEB发送TCP请求,通过三次握手连接后,游览器便可以将HTTP请求数据发送给服务器。 3.发送HTTP请求:游览器向WEB服务器发起一个HTTP请求,HTTP协议是建立在TCP协议之上的应用层协议,本质是在建立起的TCP连接中,按照HTTP协议标准发送一个索要网页请求。这一过程会涉及到负载均衡(将负载的工作任务进行平衡、分摊到多个操作单元上进行运行). 4.处理请求并返回:服务器获取到客户端的HTTP请求后,会根据HTTP请求中的内容来决定如何获取相应的文件,并将文件发送给游览器。 5.游览器渲染:游览器根据响应开始显示页面,首先解析HTML文件构建DOM树,然后解析CSS文件构建渲染树,等到渲染树构建完成后,游览器开始布局渲染树并将其绘制到屏幕上。 6.断开连接:四次挥手终止TCP连接。
? 1.客户端向服务器发送请求报文SYN=1,Seq=x,初始的序号x。 2.服务器收到请求报文,向A发送确认报文SYN=1,ACK=1,确认号为x+1,Seq=y,初始序号为y。 3.客户端收到服务器的确认报文,向服务器发出确认,ACK=1,确认号为y+1,Seq=x+1。 1.客户端向服务器发送释放报文,FIN=1。 2.服务器接收到释放报文后发出确认,此时TCP处于半关闭状态,服务器可以向客户端发送数据,但客户端不能向服务器发送数据。 3.当服务器不在需要连接时,发送释放报文,FIN=1。 4.客户端收到后发出确认,进入TIME_WAIT状态,等待2MSL(Maximum Segment Lifetime报文最大存活时长)后释放连接。 5.服务器收到客户端的确认之后释放连接。 三次握手的主要目的是确认自己和对方的发送和接收都正常,保证可靠的通信。若采用两次握手,当第二次握手建立连接时,此时客户端知道服务器能正常接收自己发送的数据,但是服务器不知道客户端是否能够接收到自己发送的数据。 四次挥手是因为FIN释放连接报文和ACK确认接收报文是分别在两次握手中传输的客户端传输结束之后,服务器可能还有必要的数据要进行处理,所以先返回ACK确认收到报文。当服务器也没有数据要再发送的时候,再发送释放通知,客户端确认后关闭TCP连接。
CLOSE_WAIT是服务器接收到客户端的关闭请求,并发送ACK确认收到报文之后,服务器进入CLOSE_WAIT状态,但是此时服务器可能还有一些必要的数据没有传输完成,不能立即关闭连接,CLOSE_WAIT的状态就是保证服务器在关闭连接之前将这些必要的数据传输完成。 TIME_WAIT是在客户端向服务器发送ACK确认报文之后进入该状态,如果没有该状态,客户端在收到服务器发送的FIN报文后立即关闭连接,此时服务器相应的端口并没有关闭,若客户端在相同的端口重新建立新的连接,则有可能接收到上一次连接中残留的数据包,导致不可预料的异常出现。除此之外,当客户端最后一次发送ACK包在传输的时候丢失了,由于TCP协议的超时重传机制,服务端将重发FIN报文,当服务器接收到重新发送的FIN包时,客户端会用RTS包响应服务端,会报异常。
?TCP是面向连接的,传输时可靠的,传输形式是字节流,传输速率慢,所需资源多,报文首部字节20-60,只能点对点全双工。 UDP不是面向连接的,传输是不可靠,传输形式是数据报文段,传输速率快,所需资源少,报文首部字节8个字节,支持一对一,一对多,多对一,多对多的交互通信。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 21:47:00- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |