OSI和TCP/IP
OSI:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
TCP/IP: 应用层、传输层、网络层、网络接口层。
各层常见协议
应用层:HTTP、SMTP、POP3/IMAP、FTP、Telnet、SSH、RTP、DNS
传输层:TCP、UDP
网络层:IP、ARP、ICMP、NAT、OSPF、RIP、BGP
从URL到网页展示的过程
1)输入URL
2)DNS解析域名得到IP地址
3)根据IP地址和端口号向服务器发起TCP请求连接
4)向服务器发起HTTP请求
5)服务器返回HTTP响应
6)浏览器从响应体中解码HTML代码,如果还有其他资源(图片等)的URL,继续发起对应的HTTP请求,直到网页加载完毕
7)浏览器不需要通信时,主动关闭TCP连接或等服务器发起关闭请求
HTTP状态码
1XX:正在处理请求
2XX:请求正常处理完毕
3XX:需要进行附加操作
4XX:客户端出错
5XX:服务器出错
HTTP和HTTPS区别
端口号:80和443
URL前缀:有没有 ' s '
安全性和资源消耗:后者更好也更大
HTTP1.0和1.1区别
连接方式:默认短连接和默认长连接(可以通过请求头中Connection来设置)
响应状态码:后者增加了大量新的码
缓存机制:后者缓存策略更多
带宽(部分请求):后者请求头中多了 ' range ',可以请求部分资源
Host头:请求头中多了 ' Host ',可以指定
HTTP1.1和2.0的区别
多路复用:2.0在一个连接上传输多个请求和响应;1.1每个请求和响应需要独立的连接
数据传输:2.0使用二进制帧;1.1使用文本格式的报文
头部压缩:2.0可以压缩Header;1.1只能压缩Body
服务器推送:2.0服务器可以进行推送;1.1需要客户端自己请求
GET和POST的区别
语义:GET常用于获取和查询;POST常用于创建和修改
幂等:GET多次重复执行不改变资源的状态;POST每次执行可能会产生不同的结果或影响资源的状态
格式:GET请求参数常放在URL中;POST常放在请求体中
缓存:GET可以缓存;POST不适合缓存
安全性:GET没有POST安全(参数放在URL中)
HTTP和WebSocket的区别
通信:HTTP是单向(只由客户端发起);Web是双向实时的
TCP和UDP的区别
连接:有连接; 无连接
可靠传输:可靠; 不可靠
状态:有状态; 无状态
传输效率:低; 高
传输形式:TCP字节流; UDP报文
首部开销:TCP 20-60字节; UDP 8 字节
是否提供广播或多播:TCP只支持点对点; UDP支持一对一、一对多、多对一、多对多
场景:TCP适用于对传输准确性要求高的场景; UDP一般用于即时通信
FTP协议
数据连接和控制连接
DNS协议
域名和IP地址的转换; 应用层协议,基于UDP,端口号53。
DNS工作流程:迭代和递归。
迭代:
递归:
TCP三次握手和四次挥手
三次握手:
半连接队列和全连接队列:
半:服务端收到来自客户端的SYN请求时,将半连接状态的连接放在半连接队列。
全:服务端收到客户端对ACK的响应,将连接从半连接移到全连接队列。如果没收到,则重传;超过最大重传次数后,将连接从半连接队列中删除。
第三次握手可以携带数据。
四次挥手:
TCP传输的可靠性
基于数据块传输
对失序数据包重新排序以及去重
校验和
重传机制
流量控制
拥塞控制
TCP流量控制
滑动窗口机制:控制发送方的发送速度
发送窗口:可以分为四个部分
接收窗口:可以分为三个部分
TCP拥塞控制
发送方维持一个拥塞窗口(cwnd)。发送方的发送窗口为min(拥塞窗口,接收窗口)。
慢开始:由小到大逐渐增大拥塞窗口。初始为1,经过一个传播轮次,拥塞窗口翻倍。
拥塞避免:每经过一个传播轮次,拥塞窗口+1。
快重传:接收方每收到失序的报文时,向发送方发送最后一个已正确接收的报文的重复确认;发送方收到三个重复确认后立即重传丢失的报文。
快恢复:发送方连续收到三个重复确认后,将拥塞窗口大小设置为慢开始门限的一半,然后拥塞窗口线性增大(+1)。
ARQ(自动重传请求)
停止等待ARQ:每发送完一个分组就停止发送,并等待对方回复ACK。若超时未收到ACK,则进行重传。
连续ARQ:发送方维持一个发送窗口,发送窗口内的分组可以连续发出。接收方采用累积确认,对按序到达的最后一个分组发送确认。发送方根据确认信息重传没有确认的N个分组(GBN)。