1、常见的编码方式
计算机中存储的最小单元是一个字节(8bit),所能表示的字符范围为255个。
ASCII码:总共128个,用一个字节的低7位表示;
GBK:是GB2312(含有6763个汉字)的扩展板,含有21003个汉字;
UTF-8:采用一种变长编码技术,utf-8中中文占字节不确定。
2、http和https的区别?描述https的连接过程?加密算法是什么?
3、tcp和udp分别是怎样断开链接的?
4、tcp的报文结构?tcp三次握手?四次挥手?
4.1、tcp报文结构?
端口号
- 前4个字节用来标识发送方的端口号和接收方的端口号。
序号
- TCP是面向字节流的。在一个TCP连接中传送的字节流的每一个字节都按顺序编号。字节流的起始序号必须要在连接建立时设置。
- 首部的序号值为本报文段所发送数据的第一个字节的序号。长度为4字节。
确认号(ack)
- 确认收到信息的序号,第二次握手中server发送的信息。
- 值为上次收到的确认号+1,只有确认标志位(ACK)为1时,确认序号才会有效。
数据偏移
- 占4bit。指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。
保留
- 占6位。为今后使用,默认值为0。
URG 紧急
- 当URG=1时,表名紧急指针有效。
- 告诉系统此报文包含紧急数据,高优先级发送。TCP会把紧急数据插入到本报文段数据的最前面。
ACK 确认
- 当ACK=1时,确认号字段有效。
- 在建立连接后所有传送的报文段都必须把ACK置为1。
PSH 推送
RST 复位
- 当RST=1时,表示TCP连接中出现了严重错误,必须释放连接,再重新建立传输连接。
SYN 同步
- 在连接建立时用来同步的序号。当SYN=1 ACK=0时,表名是一个连接请求报文段。
- SYN=1表名是一个连接请求或连接接受报文。
FIN 终止
- 用来释放一个连接。FIN=1表明此报文段的发送数据已完毕,要求释放运输连接。
窗口
- 从本报文段的确认号算起,接收方允许对方一次发送的数据量。
- 原因是接收方的
4.2、tcp三次握手?
- 握手之前:
- server端先创建TCB(传输控制块),时刻准备接受client的连接请求,server进入LISTEN状态;
- 第一次握手:
- client向server发送报文段1。报文内容为:SYN标志位值为1,序号字段seq被设置为初始序号x(TCP连接双方可随机选择初始序号)。
- client发送完成后,进入SYN-SENT状态,等待服务器的确认。
- 第二次握手
- server接收到client的请求后,向client发送报文段2作为应答。报文内容为:ACK标识值为1,表示对client做出应答,序号字段ack为x+1;SYN标识值为1,seq为server的初始序号y。
- server发送完成后,进入SYN-RECEIVED状态。
- 第三次握手
- client在接收到server的报文段2后,向server发送报文段3。报文内容为:ACK标识值为1,代表对server做出应答,ack为y+1,seq为x+1。
- 此报文发送完成后,双方都进入ESTABLISHED状态,表示连接已建立。
4.3、为什么要进行三次握手?
避免资源的浪费:
当client发出连接请求A,由于网络阻塞,A未能到达server;此时client发出了连接请求B到server,建立连接、传输数据、关闭连接;此时A请求到达server:
- 若无三次握手,此时server将A请求的第二次握手返回,则建立连接;client处于CLOSE状态,连接被浪费;
- 若存在三次握手,此时server将A请求的第二次握手返回,client处于CLOSE状态,无法返回ACK确认信息;此时连接未被建立,不浪费资源。
4.4、tcp四次挥手?
至少四次数据交互才能实现一个连接的彻底关闭。
详细过程如下:
- client发送关闭连接的报文段。报文内容为:FIN标志位为1,请求关闭连接,并停止发送数据。seq=x(等于发送所有数据的最后一个字节序号+1)。而后client进入FINAL-WAIT-1状态。
- server接收到FIN=1的报文后,发送确认报文。报文内容为:ACK=1,ack=x+1,并带上自己的序号seq=y。然后server进入CLOSE-WAIT状态。
- client接收到server的ACK报文段后,进入到FINAL-WAIT-2状态,此时还能收到server发送的数据,直到接收到FIN报文段。
- server发送完所有数据后,向client发送报文段。内容为:ACK=1,FIN=1,ack=x+1,seq=z。之后server进入LAST-ACK状态。
- client收到来自server的FIN报文段后,向server发送报文。内容为:ACK=1,ack=z+1,seq=x+1。之后client进入TIME-WAIT状态。等待2MSL(2倍报文段最大存活时间)后,客户端进入CLOSED状态。
- server在接收到client的ACK报文后随即进入CLOSED状态。
4.5、为什么TCP关闭连接是四次不是三次?
- server在接收到FIN报文后,可能还有数据要传输,不能马上关闭连接。