一、五层协议
1.物理层:完成比特流和光、电、电磁波等信号之间的转化
2.数据链路层:在为相邻节点提供一条传输链路,主要实现封装成帧、透明传输和差错控制
3.网络层:为主机之间提供通信服务,负责原和目的地的传输和路由选择
4.传输层:为进程之间提供服务,TCP和UDP工作在这一层
5.应用层:定义报文类型,确定如何处理请求报文和确认报文,解析报文的语法和语义,控制进程进程何时及如何发送报文
二、TCP
(1)TCP三次握手
概念:
序列号(seq):发送方发送字节流的编号
确认号(ack):接收方期望接受字节流的编号
同步位(SYN);
确认位(ACK):
三次握手目的:
确保通信双方收发能力正常
同步序列号和确认号,确保后续的收发能通过序列号和确认号保证数据收发不重不漏
1.过程
第一次握手:客户端主动发起连接,随机生成序列号x;
第二次握手:服务端接收到连接请求后将随机生成序列号y,确认号置为x+1,同步位和确认位都置1,并将数据包发送给客户端
第三次握手:客户端将序列号置为x+1,确认号置为y+1,
2.如何确保双方收发能力正常
第一次握手,服务器可以确认客户端的发生能力正常;
第二次握手,客户端可以确认服务器的接收和发送能力都正常;
第三次握手,服务器可以确认客户端的接受能力正常;
3.为什么不是两次握手
原因一:两次握手,服务端无法确保客户端的接收能力是否正常
原因二:设想一种情况,当客户端首次发起连接请求,请求报文由于网络原因长时间滞留 ,客户端迟迟没有接受到服务器的响应,将再次发起连接请求,若新的请求先建立连接,并且传输完数据正常关闭后旧的连接到达服务器,由于只有两次握手,服务器收到旧连接确认后建立连接,但是客户端并不会再这个连接中收发数据,从而导致服务端一直等待,造成资源浪费。若是有第三次握手,服务端可以通过对比序列号和确认号,辨别出旧连接,并终止旧连接。
三、四次挥手
(1)过程
1.第一次挥手:客户端数据传输完毕,发生请求关闭报文,报文中随机生成序列号u,置终止位为1 ;
2.第二次挥手:服务器收到关闭请求,发生确认报文,随机生成序列号v,确认号置u+1,确认标志位置1;
3.第三次挥手:服务器发生数据完毕,发生请求关闭报文,报文中随机生成序列号w,确认号u+1,终止位和确认位置1;
4.第四次挥手:客户端收到请求,发生确认报文,报文中序列号置u+1, 确认号置w+1,确认标志位置1 ,服务端收到确认报文后关闭连接,客户端等待2MSL没有收到服务器重新关闭的请求后也关闭连接。
2.为什么要等待2MSL(报文最大存活时间)
第四次挥手的确认报文可能丢失,若确认报文真的丢失了,服务器一定会在2MSL内重新发送关闭连接请求,若是不等待2MSL,报文丢失后服务端发起的关闭请求将得不到响应,服务器一直处于等待关闭的状态,造成服务器资源浪费。
3.为什么是四次挥手
三次挥手无法确保客户端收到了服务端关闭连接的请求,若第三次挥手服务器发送的报文丢失,此时服务端已经关闭连接,无法知道客户端是否收到关闭连接的请求,不会触发超时重传,导致客户端将一直等待服务端发送终止报文,从而导致连接无法正常关闭,若为四次挥手,服务器长时间没有收到客户端的确认,将触发超时重传,重新发起关闭请求。
四、粘包和拆包
(1)粘包
概念:TCP传输字节流数据,数据与数据之间没有分隔,当多组数据被整合到一个报时,接受方无法将数据分离。
产生原理:
①发送方:发送方连续发生多个小数据包,nagle算法会将几个小数据包组成一个大数据包
②接受方:发送速率太高,接受方无法及时将数据包从缓冲区读取,导致多个数据包堆积在一起,
解决:
①固定数据包长度:长度不足可以填充数据
②长度字段协议:数据包头部添加数据长度
③特殊标志协议:在数据包的头尾添加界定符
④关闭nagle算法
(2)拆包
概念:完整的数据包被拆成多个数据包
原因:
①接收方缓冲区太小,无法一次接受完,发生方必须将数据包拆分,以免数据丢失
②发生数据长度超过最大传输单元(MTU),必须拆开发生
解决:
①增大接受方缓冲区的大小
②调整最大传输单元(MTU)
③同粘包的三种方法
五、DNS
DNS概念:一种将域名转化为IP地址的服