网络
1、OSI模型(Open System Interconnection)
国际标准组织定义了网络通信协议的基本框架,被称为开放系统互联模型,即OSI模型
由下至上:
①物理层
②数据链路层
③网络层
④传输层
⑤会话层
⑥表示层
⑦应用层
2、TCP/IP模型
由下至上:
①网络接口层:用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤、网线提供的驱动
②网络层:网络层是TCP/IP协议的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络
③传输层:主要使网络程序进行通信,在进行网络通信时,可以采用TCP协议,也可以采用UDP协议
④应用层:主要负责应用程序的协议,如HTTP协议、FTP协议
3、TCP协议三次握手(建立连接)
①第一次握手:客户端向服务器端发出连接请求,等待服务器确认;客户端发送一个SYN同步标志的TCP报文,SYN同步报文会指明客户端使用的端口以及TCP连接的初始序号。
②第二次握手:服务器端向客户端会送一个响应,通知客户端收到连接请求;服务器在收到客户端的SYN报文后,将返回一个SYN+ACK报文,表示客户端的请求被接收,同时TCP序号被加1。
③第三次握手:客户端再次向服务器端发送确认信息,确认连接;客户端返回一个确认报文ACK给服务器端,同样TCP序号被加1,至此一个TCP连接完成;然后才开始通信的第二步,数据处理。
4、为什么是三次握手?不是两次或四次?
①三次握手才可以阻止重复历史连接的初始化(主要原因)
②三次握手才可以同步双方的初始序列号
③三次握手才可以避免资源浪费
5、TCP协议四次挥手(断开连接)
①第一次挥手:客户端打算关闭连接,此时会发送一个首部FIN标志位被置为1的报文,即FIN报文,之后客户端进入FIN_WAIT_1状态;
②第二次挥手:服务端收到该报文,就向客户端发送ACK应答报文,接着服务端进入CLOSED_WAIT状态;
客户端收到服务端的ACK应答报文后,之后进入FIN_WAIT_2状态;
③第三次挥手:等待服务端处理完数据后,也向客户端发送FIN报文,之后服务端进入LAST_ACK状态;
④第四次挥手:客户端收到服务端的FIN报文后,回一个ACK应答报文,之后进入TIME_WAIT状态;
服务器收到ACK应答报文后,就进入了CLOSE状态,至此服务端已经完成了连接的关闭;
客户端在经过2MSL 一段时间后,自动进入CLOSE状态,至此客户端也完成了连接的关闭。
6、TCP可靠性如何保证
①数据包校验:目的是监测数据在传输过程中的任何变化,若校验出包有错,则丢弃报文段并且不给出响应,这是TCP发送数据段超时后会重发数据;
②对失序数据包重排序:既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对失序数据进行重新排序,然后才交给应用层;
③丢弃重复数据:对于重复数据,能够丢弃重复数据;
④ 应答机制:当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒;
⑤超时重发:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段;
⑥流量控制:TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这可以防止较快主机致使较慢主机的缓冲区溢出,这就是流量控制。TCP使用的流量控制协议是可变大小的滑动窗口协议。
7、TCP与UDP的区别
TCP和UDP协议都属于传输层协议,它们之间的区别为:
①是否连接:TCP面向连接;UDP无连接
②是否可靠:TCP可靠传输,使用流量控制和拥塞控制;UDP不可靠,不使用流量控制和拥塞控制
③连接对象个数:TCP只能是一对一通信;UDP支持一对一、一对多、多对一和多对多交互通信
④传输方式:TCP面向字节流;UDP面向报文
⑤首部开销:TCP首部最小20字节,最大60字节;UDP首部开销小,仅8字节
⑥使用场景:TCP适用于要求可靠性传输的应用,如文件传输;UDP适用于实时应用(IP电话、视频会议、直播等)
⑦常见应用层协议:TCP使用 FTP/Telent/SMTP/POP3/HTTP;UDP使用 DNS/SNMP/TFTP
总结:
TCP向上层提供面向连接的可靠服务 ,UDP向上层提供无连接不可靠服务;
虽然 UDP 并没有 TCP 传输来的准确,但是也能在很多实时性要求高的地方有所作为;
对数据准确性要求高,速度可以相对较慢的,可以选用TCP
8、常见的状态码
HTTP请求结构:请求方式 + 请求URL + 协议及其版本
HTTP响应结构:状态码 + 原因短语 + 协议及其版本
①1XX
请求处理中,请求已接受,正在处理
②2XX
请求成功,请求被成功处理,200 OK
③3XX
重定向,要完成请求必须进一步处理
301:永久性转移
302:暂时性转移
303:已缓存
④4XX
客户端错误,请求不合法
400:Bad Request,请求有语法错误
403:拒绝请求
404:客户端访问的页面不存在
⑤5XX
服务器错误,服务器不能处理合法请求
500:服务器内部错误
503:服务不可用,稍等