目录
- 1、tcp首部
- 2、三次握手
- 3、四次挥手
- 4、为什么四次挥手比三次握手多一次
- 5、为什么不能两次握手
- 6、为什么不能四次握手
- 7、为什么要三次握手才行
- 8、为什么要传回SYN
- 9、为什么要传ack
- 10、tcp/udp的区别
- 11、流量控制、拥塞控制过程
- 12、UDP和TCP的特点
- 13、tcp如何保证可靠性传输
- 14、从浏览器输入url,发生了什么?
- 15、从浏览器输入url,都用到了什么协议?
- 16、网页状态码类型
- 17、HTTP是不保存状态的协议,如何保存用户状态?
- 18、Cookie的作用?和Session的区别?
- 19、HTTP长连接和短连接?
- 20、get和post的区别
- 21、http和https的区别?
- 22、为什么DNS基于UPD
- 23、DNS解析过程
- 24、http1.0、http1.1、http2.0区别
- 25、http
- 26、ping一个域名的过程
- 27、ARP协议
- 28、计算机网络体系
- 29、TCP粘包
- 30、四次挥手的time_wait
- 31、端口的作用
不懂三次握手和四次挥手先转下方超链接
1、tcp首部
2、三次握手
-
第一次握手:客户端将SYN的标志位置为1,随机产生一个数值c,作为数据包的序列号seq,即seq=c,然后发送数据包给服务端
-
第二次握手:服务端收到了来自客户端的报文,通过SYN=1,知道了这是要请求建立连接,于是服务端先随机生成一个数值s作为自己数据包的序号,即seq=s,然后在TCP首部的确认应答号ack=c+1 ,将SYN和ACK的标志位置为1,然后发送报文给客户端。
-
第三次握手:客户端收到了来自服务端的应答,还需要想服务端回应最后一个应答报文。将应答报文TCP首部的ACK标志位置为1,seq=c+1,ack=s+1。 注意第三次握手可以携带数据。
3、四次挥手
-
第一次挥手:客户端请求断开连接,发送一个TCP首部FIN位为1的报文,表示请求断开连接
-
第二次挥手:服务端收到来自客户端的FIN报文后,发送ACK应答报文,表示收到请求。
-
第三次挥手:经过前两次挥手后,此时客户端只是不再发送给服务端数据,但是还可以接收服务端的数据。 服务端把数据发送完毕后,再次发送一个FIN报文,请求断开连接。
-
第四次挥手:客户端收到来自服务端的FIN报文,回复一个ACK应答报文,然后进入等待(2MSL)。之后服务端成功断开连接,客户端也断开了连接。
-
拓展:如果客户端没有等待的话,当最后一个发送的ACK报文碰到网络拥堵的时候,造成服务端迟迟没有收到,不能正确关闭。然后当客户端发送新的请求连接时候,服务端就会发送RST报文,连接建立的过程就会被终止。
如果最后客户端等待时间过长,会造成内存资源和端口资源的浪费。
4、为什么四次挥手比三次握手多一次
- 因为第一次挥手的时候只是断开了从A到B的数据传送,但是A还是可以接收B的数据,可能此时B的数据还没传输完,所以B的第二次挥手是回复A收到了消息,第三次是B发送完后 发送fin请求断开。
5、为什么不能两次握手
- 两次握手的话,如果第一次握手时候,客户端发送的syn碰到了网络拥堵,造成了服务端无法进行第二次握手,然后客户端发现迟迟未收到回复,又一次发送请求,过了一会,服务端收到了第一次的syn,第二次握手,然后客户端接收了,建立连接。过了一会,客户端第二次发起的请求到达了, 服务端又建立起了连接。造成了不必要的资源浪费。
6、为什么不能四次握手
- 三次握手理论上已经是最少的通信次数,所以不需要多进行一次浪费不必要的时间开销
7、为什么要三次握手才行
- 三次握手可以保证双方具有接收和发送能力、可以防止旧的重复连接初始化造成混乱
8、为什么要传回SYN
- 接收端传回发送端所发送的SYN是为了证明双方的通信通道没有问题
9、为什么要传ack
- 确认信息的准确无误
10、tcp/udp的区别
-
连接
- TCP 是面向连接的传输层协议,传输数据前先要建立连接。
- UDP 是不需要连接,即刻传输数据。
-
服务对象
- TCP 是一对一的两点服务,即一条连接只有两个端点。
- UDP 支持一对一、一对多、多对多的交互通信
-
可靠性
- TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按需到达。
- UDP 是尽最大努力交付,不保证可靠交付数据。
-
拥塞控制、流量控制
- TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。
- UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。
-
首部开销
- TCP 首部长度较长,会有一定的开销,首部在没有使用「选项」字段时是20 个字节,如果使用了「选项」字段则会变长的。
- UDP 首部只有 8 个字节,并且是固定不变的,开销较小。
11、流量控制、拥塞控制过程
12、UDP和TCP的特点
- 用户数据报协议 UDP(User Datagram Protocol)是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信。
- 传输控制协议 TCP(Transmission Control Protocol)是面向连接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),每一条 TCP 连接只能是点对点的(一对一)。
13、tcp如何保证可靠性传输
- 应用数据会被分割成tcp认为最适合的大小的数据块
- tcp会给发送的每一个包进行编号,发送到接收端后,会进行排序,然后传给应用层
- 校验和,tcp会检测首部与数据的校验和,发送到接收端后,接收端会检测校验和是否正确,如果不正确,那么就会丢弃这个数据,并且不确定收到此报文段。
- tcp的接收端会丢弃重复数据
- 流量控制,接收端只允许接收发送端发送接收端缓冲区能容纳的数据。当接收端来不及处理数据的时候,会减缓传输速率,防止包丢失。(流量控制协议是可变大小的滑动窗口协议)
- 拥塞控制,网络拥堵的时候,减少数据的发送(发送方维护一个拥塞窗口(cwnd),tcp的拥塞控制采用了慢开始、拥塞避免、快恢复和快重传(fast retransmit and recovery,FFR )四种算法。
- 停止等待ARQ协议,当发送完一个分组后,发送端会立刻停止发送,直到收到来自接收端的确认收到信号,才会继续发送
- 重传机制,当发送一个数据包后,发送端的定时器会立刻开始计时,如果在定时器的结束时间之前没有收到来自接收端的确认收到信号,就会重新发送。
14、从浏览器输入url,发生了什么?
- 进行DNS解析,将域名解析为对应的ip
- 浏览器向web服务器发起http请求
- 服务器收到请求后返回html响应
- 浏览器解析后渲染页面
15、从浏览器输入url,都用到了什么协议?
- dns协议,将域名解析为对应的ip地址
- tcp协议,连接服务器
- ip协议,tcp连接发送的数据在网络层中使用ip协议
- ospf协议(open shortest path fast,开放式最短路径优先),路由器之间的选择使用ospf协议
- arp协议,路由器与服务器通信,需要通过arp协议将ip地址转换为mac地址
- http协议,在tcp连接后,采用http协议访问网页
16、网页状态码类型
- 1xx,表示成功发出请求正在处理
- 2xx,表示成功处理请求
- 3xx,表示需要完成请求,需要进行重定向
- 4xx,表示请求错误,妨碍了服务器的处理
- 5xx,表示服务器错误
- 常见的状态码 点击跳转
17、HTTP是不保存状态的协议,如何保存用户状态?
- 通过Session机制,服务端给特定用户创建特定的Session后,就可以标识这个用户并跟踪这个用户,Session会有一个保存时间限制,过了这个时间,会销毁这个Session
18、Cookie的作用?和Session的区别?
- Cookie和Session作用一样,都是为了跟用浏览器用户身份的会话方式,区别在于Cookie一般用来保存用户信息,Session用来记录用户状态。Cookie保存在本地,Session保存在服务端
19、HTTP长连接和短连接?
- http1.0默认用短连接。客户端每次与服务端进行一次http操作就会创建一个新的连接,任务中断就断开连接。
- 到了http1.1改用长连接。打开网页后,用于传输http数据的tcp连接不会断开,客户端再次操作时,还是通过这一条已建立的连接。
- http的长连接和短链接本质上是tcp的长连接和短连接。
20、get和post的区别
- 作用:get用于获取资源,post用于上传数据。
- 参数:get的参数在url中,post的参数存储在实体主体。
- 安全性:get是安全的,post不安全。因为get只是获取资源,不会改变服务器状态,而post上传的数据可能存在数据库中,会改变服务器状态。
- 幂等:get方法都是幂等的,post不是。幂等指多次请求和一次请求的结果是一致的。
21、http和https的区别?
- 端口号:http默认端口是80,https默认端口是443
- 安全性:http上的数据都是明文的,客户端和服务端都无法验证对方身份。https是建立在ssl/tls之上的http,传输内容采用对称加密,对称加密的密钥用服务器方的证书进行了非对称加密,https更耗费服务器资源。
- 对称加密:用同一个密钥,加密解密为同一个密码,常用算法有DES、AES
- 非对称加密:密钥成对出现,公钥加密需要私钥解密,私钥加密需要公钥解密,常用的算法有RSA、DSA。
22、为什么DNS基于UPD
因为UDP是面向无连接 不要求准确 但是速度快,DNS解析是一种查询服务 查询要求的是速度,所以使用UDP的 ,如果用TCP一个查询要等很久。
23、DNS解析过程
首先会在浏览器缓存中,看是否有记录域名与IP地址的映射,如果没有的话,就从本机hosts文件和路由缓存中找,如果也没有,那么就去本地DNS服务器寻找,如果也没有,那么会向根域名服务器查询,根域名服务器会告诉本地DNS服务器下一级要去的域名服务器,然后迭代,直到找到对应的ip,回溯的时候,本地DNS服务器就记录这个域名与IP地址的映射,同理操作系统和浏览器也会记录下来,这样下次查询的时候就不需要再找一遍过程。
从浏览器到本地DNS服务器是递归
从本地DNS服务器到外网属于迭代
24、http1.0、http1.1、http2.0区别
http1.0与http1.1:长连接、节约带宽、host域
http1.1与http2.0:多路复用、二进制分帧、服务器推送、首部压缩
25、http
这是一个超链接
1.支持B/S和C/S
2.简单快速
3.灵活
4.无链接
5.无状态
26、ping一个域名的过程
这是一个超链接
首先如果我们ping的是一个域名,那么它会先进行DNS解析,得到和域名绑定的相关ip,得到ip地址之后,会进行ARP解析,得到这个ip地址所对应的MAC地址,然后发送ICMP报文,当发送端收到接收端的应答报文后,说明网络是连通可达的。
27、ARP协议
ARP协议,就是想要通过已知的IP地址,找到该IP地址所对应的物理设备的MAC地址。
ARP协议,通过已知的目的Ip地址,定位到下一个应该接受数据分包的物理设备的MAC地址。
如果目的IP和当前发送端的主机在同一个网段,这时会通过arp直接找到目的物理设备的mac地址
如果不在同一个网段,那么当前发送端会发送与当前主机在同一网段的一个路由器的mac地址,
然后由该路由器进行转发到下一个网段。
找到后,目的设备将自己的ip地址和mac地址丢尽ARP响应包,单播回来。
28、计算机网络体系
29、TCP粘包
TCP粘包:指发送方发送的若干包数据到达接收方时粘成了一包,从接收缓冲区来看,后一包数据的头紧接着前一包数据的尾,出现粘包的原因是多方面的,可能是来自发送方,也可能是来自接收方。
什么时候需要解决粘包问题
当tcp发送一个数据块的时候,里面包含了多组不相关的数据,就需要处理粘包
如何解决
1.发送端关闭Nagle算法
2.发送端要发送长度,应用层根据长度可以处理出来每一组数据的开始和结束位置
30、四次挥手的time_wait
定义
time_wait是两倍的最大报文段生命周期(2MSL)。它是tcp断开连接的时候,主动关闭的一端,第四次挥手时候传回ack后进入的一个状态。
作用
他主要是用来防止当碰到网络拥堵的时候,ack没有及时传给另一端,用来进行重传,能够正确的关闭这条tcp连接,并且可以让那些因为网络拥堵的迟到报文,被另一端识别并抛弃。
time_wait过多的影响
会占用大量的内存,一个time_wait占用4k大小
过多如何解决
1.内核参数优化
2.将短连接改为长连接,减少了tcp连接次数,等于减少了端口占用个数,也就少了关闭请求
31、端口的作用
端口分为三类,分别是周知端口、动态端口、注册端口
周知端口:范围从0到1023,即广为人知的端口号,比如http是80,https是443
动态端口:范围从49152到65535,它 一般不固定分配某种服务,而是动态分配
注册端口:端口1024到49151,分配给用户进程或应用程序。这些主要是用户选择安装的一些应用程序
作用:端口是tcp/ip协议中传输层的概念,用于区分同一台主机中的不同应用