TCP和UDP的区别在哪?
1.TCP是面向连接的可靠传输,UDP是无连接的不可靠传输。
2.TCP只能一对一进行通信,UDP支持一对一、一对多、多对一、多对多通信。
3.TCP是面向字节流的,UDP是面向报文的。
4.TCP首部最小20字节,最大80字节;UDP首部8字节。
TCP为什么要进行流量控制,如何实现流量控制?
1.流量控制是为了让发送方发送速率不要太快,让接收方来得及接收,以免造成数据的丢失。
2.流量控制是利用窗口滑动机制实现的。
TCP中什么是拥塞,为什么要进行拥塞控制,如何实现拥塞控制?
1.对网络中某一资源的需求超过了资源能提供的可用部分,进而导致网络性能变坏,这就是拥塞。
2.如果出现拥塞不控制,整个网络的吞吐量将随着输入负载的增大而减小,最终造成死锁(吞吐量为0)。
3.通过慢开始、拥塞控制、快重传、快恢复4种算法进行拥塞控制。
慢开始是指一开始向网络注入的报文段少
拥塞控制并不是能完全避免拥塞,是在该阶段拥塞窗口控制按线性增长,使网络不易出现拥塞。
如何设置超时重传时间?
超时重传时间RTO=RTTs+4xRTTD
RTTs为加权平均往返时间,RTTD为RTT偏差的加权平均
出现超时重传时,新RTO=2倍旧RTO
TCP三次握手过程
最初,客户端和服务器处于关闭状态。
一开始,TCP服务器进程首先创建传输控制块,用来存储TCP连接的重要信息。
之后就准备接受TCP客户进程的连接请求,TCP服务器进入监听状态。
TCP客户进程也是首先创建传输控制块,在打算建立TCP连接时,向TCP服务器进程发送TCP连接请求报文段,进入同步已发送状态。
请求报文段中的SYN为1,表明这是一个TCP连接请求报文段。客户进程初始序号字段seq被设置为x。
TCP服务器进程收到TCP连接请求报文段后,如果同意连接,就向客户进程发送TCP连接请求确认
报文段,并进入同步已接收状态。
该报文段首部中的SYN和ACK都为1,表明这是一个TCP连接请求确认报文段。服务器进程初始序号字段seq被设置为y,确认号字段ack=x+1,这是对连接请求报文段的确认。
TCP客户进程接收到TCP连接请求确认报文段后,还要向TCP服务器发送一个普通的TCP确认报文
段,并进入连接已建立状态。
该报文段首部中的ACK被设置为1,表明这是一个普通的TCP确认报文段。序号字段为x+1,因为
客户进程发送的第一个TCP报文段的序号为x,确认号字段ack=y+1,这是对服务器进程的连接请求确认报文段的确认。这种普通报文段可以携带数据,而最初的两个报文段不可以携带数据。
TCP服务器进程收到确认号报文段后也进入连接已建立状态。
发送普通确认报文段的目的是防止失效的连接请求报文段突然又传到TCP服务器,导致服务进程
一直等待客户进程发来数据,造成网络资源的浪费。
(图片内容出自bilibili的up主:胡科大教书匠)
TCP四次挥手过程
假设使用TCP客户进程的应用进程通知其关闭TCP连接,TCP客户进程会发送TCP连接释放报文段,进入终止等待1状态。
该报文段中的FIN,ACK被设置为1,表明这是一个TCP连接释放的报文段。seq的值为u,等于TCP客户进程发送数据的最后一个字节序号+1,ack的值为v,等于客户进程收到数据的最后一个字节序号+1。
TCP服务器收到TCP客户发送的连接释放报文段后,会发送一个普通的TCP确认报文段,并进入关闭等待状态。
该报文段中的ACK被设置为1,表明这是一个普通的TCP确认报文段,seq的值为v,等于服务器进程发送数据的最后一个字节序号+1,这也与连接释放报文中的ack相匹配。ack的值为u+1,这是对连接释放报文段的确认。
此时TCP服务器进程应通知高层应用进程:TCP客户进程要断开与自己的TCP连接。
此时,TCP客户进程到TCP服务器进程的连接就释放了,TCP连接处于“半关闭”状态,TCP服务器进程到TCP客户进程的连接并没释放。也就是说客户进程没有数据要发送了,如果服务器进程还有消息要发送,客户进程仍要接收。
客户进程收到服务器进程发送的TCP普通确认报文段,会进入终止等待2状态。等待服务器进程发送的TCP连接释放报文段。
若服务器没有数据要发送,应用进程就通知其服务器进程释放连接。
TCP服务器发送连接释放报文段并进入最后确认状态。
该报文中的FIN,ACK被设置为1,表明这是一个TCP连接释放的报文段。seq的值为w,等于服务器进程发送数据的最后一个字节序号+1,ack为u+1,这是对之前收到的TCP连接释放报文段的重复确认。
客户进程收到TCP连接释放报文段后,会发送普通的TCP确认报文段,并进入时间等待状态。
该报文的ACK被设置为1,表明这是一个普通的TCP报文段,seq的值为u+1,这是因为客户进程向服务器进程发送的TCP释放报文段的序号为u,ack的值为w+1,这是对收到TCP连接释放报文段的确认。
TCP服务器进程收到该报文段后进入关闭状态。
而TCP服务器进程要经过2MSL后才进入关闭状态,一个MSL被建议为2分钟。如果发送普通TCP确认报文段后就进入关闭状态,若该报文段在发送过程中丢失了,服务器进程就会对之前发送的连接释放报文段的超时重传,而客户进程处于关闭状态,并不会理会重传的报文段,服务器就会不断重传,服务器就一直无法处于关闭状态。经过2MSL后,可以使本次连接的报文段不会滞留在网络中。
(图片内容出自bilibili的up主:胡科大教书匠)
TCP和UDP的使用场景
TCP 是可靠的但传输速度慢,若通信数据完整性比通信实时性重要时,则应该选用TCP 协议,如文件传输、重要状态的更新等。
UDP 是不可靠的但传输速度快。若通信实时性比数据完整性重要时,则使用UDP协议,如视频传输、实时通信,游戏等。
http的请求过程
1.域名解析
2.客户进程发起与服务器进程的TCP连接
3.客户进程向服务器进程发送http请求报文
4.服务器收到后,执行相应操作,向客户进程发送http响应报文
5.浏览器解析并渲染相应报文中的内容呈现给用户
http的状态码
(图片内容出自bilibili的up主:胡科大教书匠)
http和https的区别
1.https协议要申请CA认证。
2.http是明文传输,https是加密传输。
3.http端口号是80,https的端口号是443。
4.https是SSL+http构建的可以进行加密传输,身份认证的协议,安全性比http高。