TCP与UDP的区别
TCP是面向连接的可靠的传输层协议,UDP是面向无连接的不可靠的传输层协议
- 可靠性:TCP的连接需要经过三次握手、重新确认等连接过程,实时性差,过程复杂,UDP具有较好的实时性,工作效率高,适用于高速传输的通信;
- 有序性:TCP协议会为你排好序,UDP不提供任何有序的保证,尽最大努力交付,数据包以任何可能的顺序到达;
- 应用:每条TCP连接只能是点到点,UDP支持1对1,1对多,多队1和多对多的交互通信;
缺点:
TCP:为了实现网络通信的可靠性,使用了复杂的拥塞控制算法,建立了繁琐的握手过程,一旦发生丢包,TCP会将后续的包缓存起来,等前面的包重传并接受到后再继续发送,延时会越来越大,传输效率低、暂用系统资源高
UDP:不可靠、不稳定
三次握手和四次握手机制
关于握手类的问题
1、描述一下三次握手的过程
(1)由客户端发送建立TCP连接请求,其中包含由发送端随机产生的seq序列号x,将报文中的SYN字段设置为1,表示需要建立连接;
(2)服务端回复客户端的连接请求,包含回复端随机生成的seq序列号y,将SYN设置为1,产生ACK字段,ACK在客户端发送来的seq基础上+1回复;
(3)客户端在收到服务端的连接验证后,会使自己的seq序列号+1,并且再次回复ACK验证请求,在服务端发过来的seq上+1回复;
2、描述一下四次握手的过程
(1)客户端发送断开TCP连接的请求报文,报文包含发送端随机生成的seq序列号,且将报文中的FIN字段设置为1,表示需要断开连接;
(2)服务端回复客户端发送的报文,会产生ack字段,ack在客户端发来的seq基础上+1,且随机产生seq序列号;(以便客户端收到消息,知道自己的TCP断开请求得到验证,避免再次发送请求)
(3)服务端在回复完客户端后,不会马上进行TCP连接断开,服务端会先确保断开前,所有传输到A的数据是否已经传输完毕,一旦确认传输完毕,就会将回复报文的FIN字段设置为1,并随机产生序列号seq;
(4)客户端收到服务端的TCP断开请求后,会回复客户端的请求,ack是在服务端发来的seq基础上+1,且随机产生seq序列号,从而完成服务端的请求验证回复;
3、为什么要进行三次握手
(1)如果服务端直接创建了连接并返回数据包给客户端,这个数据包因为网络传输原因丢失了,导致客户端一直没有接收到,客户端可能设置了一个超时时间,时间到了就关闭连接创建的请求,而服务器并不知道客户端是否真正的接收到连接请求,服务器的端口就一直开着,而客户端因为超时严重又会重新发出请求,服务器就会重新开启一个端口连接,这样很多端口一直开着,造成服务器开销的严重浪费;
(2)已经失效的客户端发出请求信息,传输到服务端,服务端以为是客户端发出有效请求,接受后产生错误;
所以我们需要“第三次握手”来确认这个过程,让客户端和服务器端能够及时地察觉到因为网络等一些问题导致的连接创建失败,这样服务器端的端口就可以关闭了不用一直等待。
也可以这样理解:“第三次握手”是客户端向服务器端发送数据,这个数据就是要告诉服务器,客户端有没有收到服务器“第二次握手”时传过去的数据。若发送的这个数据是“收到了”的信息,接收后服务器就正常建立TCP连接,否则建立TCP连接失败,服务器关闭连接端口。由此减少服务器开销和接收到失效请求发生的错误。
4、客户端为什么在TIME_WAIT阶段等2MSL?
(1)目的:是确保服务器收到客户端发出的ACK确认报文
(2)原因:当客户端发出最后的ACK确认报文时,并不能确定服务端能够收到该报文,所以客户端在发送完ACK确认报文后,会设置一个时长为2MSL的计时器,MSL即Maximun Segment Lifetime, 一段TCP报文在传输过程中的最大生命周期,2MSL即是服务端发出为FIN报文和客户端发出ACK确认报文所能保持有效的最大时长;服务器在1MSL内没有收到客户端发出的ACK确认报文,就会再次向客户端发出FIN报文。
(3)补充:如果客户端在2MSL内,再次收到了来自服务器端的FIN报文,说明服务器端由于各种原因没有接收到客户端发出的ACK确认报文。客户端再次向服务器端发出ACK确认报文,计时器重置,重新开始2MSL的计时;否则客户端在2MSL内没有再次收到来自服务器端的FIN报文,说明服务器端正常接收了ACK确认报文,客户端可以进入CLOSED阶段,完成“四次挥手”。
TCP用什么方式来解决拥塞控制
拥塞控制:分组丢失,发送方继续重传,导致网络拥塞程度更高
TCP解决算法:慢开始、拥塞避免、快重传、快恢复
TCP/IP如何保证可靠性
1)三次握手
2)超时重发
3)丢弃重复数据
4)流量控制、拥塞控制
控制窗口滑动的过程是怎样的
(1)接收端将自己可以接收的缓冲区的大小,放入TCP首部中的“窗口大小”字段,通过ACK报文来通知发送端,滑动窗口是接收端用来控制发送端发送数据的大小,从而达到流量控制;
(2)其实发送方的窗口上限,是取值拥塞窗口和滑动窗口两者的最小值;
滑动窗口和拥塞窗口有什么区别
相同点:都是控制丢包的作用,实现机制都是让发送方发的慢一点
不同点:控制的对象不同
(1)流量控制的对象是接收方,怕发送方发的太快,使接收方来不及处理;
(2)拥塞控制的对象是网络,怕发送方发的太快,造成网络拥塞,使得网络来不及处理;
解决粘包和拆包的方法有哪些
(1)在数据尾部增加特殊字符进行分割
(2)将数据定为固定大小
(3)将数据分为两部分,一部分是头部,一部分是内容体,其中头部结构大小固定,且有一个字段声明内容体的大小
HTTP的请求,程序一般经历了哪几个步骤
用浏览器打开链接时,计算机的工作步骤
1)解析域名
2)发起TCP三次握手,建立连接
3)基于TCP发起HTTP请求
4)服务器响应HTTP请求,并返回数据
5)客户端解析返回数据
HTTP是安全的吗?怎么做到HTTP协议传输?
1)不安全,HTTP都是明文数据传输,容易被第三方截取;
2)安全传输可以使用HTTPS协议
HTTP和HTTPS的区别
HTTP协议的连接是无状态的,明文传输
HTTPS则是由SSL/TLS+HTTP协议构建的有加密传输、身份认证的网络协议
session和cookie的区别
1)存储位置,cookie是保存在客户端上的数据,session是保存在服务器上
2)存储方式,cookie只能保管ASCLL字段符串,session能够存储任何类型的数据
3)隐私方式,cookie只对客户端可见,session存储在服务器上,对客户端是透明的
4)存储容量,cookie保存的数据小,session没有上限
TCP短连接和长连接的区别
短连接:client向server发送消息,server回应client,然后一次读写就完成了,这时候双方任何一个都可以发起close操作,不过一般都是client先发起close操作,短连接一般只会在client/server间传递一次读写操作。
长链接:client与server完成一次读写之后,它们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接。
参考: