1.TCP和UDP的区别
TCP是面向连接的,UDP是面向无连接的;
TCP只能一对一通信,UDP支持一对一,一对多,多对一和多对多交互通信;
TCP是面向字节流的,UDP是面向报文的;
TCP是可靠传输,使用流量控制和拥塞控制;UDP是不可靠传输
TCP首部最小20字节,最大60字节;UDP首部仅8字节。
2.ISO七层模型及相关协议
物理层:建立、维护、断开物理连接。
数据链路层:在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路。
网络层:进行逻辑地址寻址,实现不同网络之间的路径选择,协议有ICMP、IGMP、IP等。
传输层:定义传输数据的协议端口号,以及流量控制和差错校验,协议有TCP、UDP。
会话层:建立、管理、终止会话,指本地主机与远程主机正在进行的会话。
表示层:确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。
应用层:网络服务与最终用户的一个接口,常见的协议有:HTTP、FTP、SMTP、DNS。
TCP/IP 四层模型
网络接口层
网际层
传输层
应用层
五层体系结构
物理层
数据链路层
网络层:IP网际协议、ARP地址转换协议、RIP路由信息协议
传输层:TCP传输控制协议、UDP用户数据报文协议
应用层:HTTP超文本传输协议、FTP文本传输协议、DNS域名系统
3.如何理解HTTP协议是无状态的
当浏览器第一次发送请求给服务器时,服务器响应了;
如果同个浏览器发起第二次请求给服务器时,它还是会响应。但是呢,服务器不知道你就是刚才的那个浏览器。
简而言之,服务器不会去记住你是谁,所以是无状态协议。
4.简述从浏览器地址栏输入url到显示主页的过程
DNS解析,查找域名对应的IP地址。
与服务器通过三次握手,建立TCP连接。
向服务器发送HTTP请求。
服务器处理请求,返回网页内容。
浏览器解析并渲染页面。
TCP四次握手,连接结束。
5.说下 HTTP/1.0,1.1,2.0 的区别
HTTP/1.0
默认使用短连接,每次请求都需要建立一个TCP连接。它可以设置Connection: keep-alive 这个字段,强制开启长连接。
HTTP/1.1
默认使用长连接,即TCP连接默认不关闭,可以被多个请求复用。
分块传输编码,即服务端每产生一块数据,就发送一块,用“流模式”取代“缓存模式”。
管道机制,即在同一个TCP连接里面,客户端可以同时发送多个请求。
HTTP/2.0
二进制协议,1.1版本的头信息是文本(ASCII编码),数据体可以是文本或二进制;2.0中,头信息和数据体都是二进制。
完全多路复用,在一个连接里,客户端和服务器都可以同时发送多个请求或响应,而且不用按照顺序一一对应。
报头压缩,HTTP协议不带有状态,每次请求都必须带上所有信息。HTTP/2.0引入了头信息压缩机制,使用gzip或compress压缩后再发送。
服务端推送,允许服务器未经请求,主动向客户端发送资源。
6.POST和GET有哪些区别
7.HTTP 如何实现长连接?在什么时候会超时?
什么是HTTP的长连接?
HTTP分为长连接和短连接,本质上说的是TCP的长短连接。TCP连接是一个双向的通道,它是可以保持一段时间不关闭的,因此TCP连接才具有真正的长连接和短连接这一说法。
TCP长连接可以复用一个TCP连接,来发起多次HTTP请求,这样就可以减少资源消耗,比如一次HTML请求,如果是短连接的话,可能还需要请求后续的JS/CSS。
如何设置长连接?
通过在请求头和响应头设置Connection字段指定为keep-alive,HTTP/1.0协议支持,但默认是关闭的,从HTTP/1.1以后,连接默认都是长连接。
在什么时候会超时?
HTTP一般会有httpd守护进程,里面可以设置keep-alive timeout,当tcp连接闲置超过这个时间就会关闭,也可以在HTTP的header里面设置超时时间。
TCP 的keep-alive包含三个参数,支持在系统内核的net.ipv4里面设置;当 TCP 连接之后,闲置了tcp_keepalive_time,则会发生侦测包,如果没有收到对方的ACK,那么会每隔 tcp_keepalive_intvl 再发一次,直到发送了tcp_keepalive_probes,就会丢弃该连接。
tcp_keepalive_intvl = 15 tcp_keepalive_probes = 5 tcp_keepalive_time = 1800