TCP和UDP区别
TCP(传输控制协议),是面向连接,可靠,基于字节流的传输协议,只支持单播,可以全双工通信,拥有拥塞控制,流量控制。建立连接使用三报文握手,断开连接使用四报文挥手。
UDP(用户数据报协议),是无连接,不可靠,基于报文流的传输协议,支持单播、多播、广播,不可以全双工通信。
TCP三报文握手
第一次握手:客户端–》服务端(数据包:SYN=1,seq=x),客户端进入SYN_SENT状态。
第二次握手:服务端–》客户端(数据包:SYN=1,ACK=1,seq=y,ack=x+1),服务端进入SYN_RCVD状态。
第三次握手:客户端检查数据包是否准确,客户端–》服务端(数据包:ACK=1,seq=x+1,ack=y+1),服务端检查数据包是否准确,两者进入ESTABLISHED状态。
TCP四报文挥手
第一次挥手:客户端–》服务端(数据包:FIN=1,ACK=1,seq=u,ack=v),客户端进入FIN_WAIT_1状态。客户端不再发送数据,但可以接收数据。
第二次挥手:服务端–》客户端(数据包:ACK=1,seq=v,ack=u+1),服务端进入CLOSE_WAIT状态。服务端开始处理剩下的数据(采用四报文握手的主要原因)。客户端接收ACK,进入FIN_WAIT_2状态。
第三次挥手:服务端–》客户端(数据包:FIN=1,ACK=1,seq=w,ack=u+1),服务端进入LAST_ACK状态。服务端不再发送数据。
第四次挥手:客户端–》服务端(数据包:ACK=1,seq=u+1,ack=w+1),客户端进入TIME_WAIT状态(防止最后的确认数据包丢失),服务端接收ACK,进入CLOSED状态,一段时间后,客户端也进入CLOSED状态。
为什么会采用三次握手,若采用两次握手可以吗?
采用三次握手原因:防止接收端接收到失效的连接请求报文,因而产生错误。
若采用两次握手:
如果发送端有一条失效了很久的请求连接报文段,因为网络滞留导致连接结束才到达服务端,如果只两次握手,此时接收端就会直接建立连接,而服务端发送的确认报文段也无客户端响应,导致服务端浪费资源,一直等待客户端响应。
如果直接两次握手,只能说明发送端与接收端建立了正常通信,不能说明接收端与发送端建立正常通信。
TCP如何实现可靠连接
1. 序列号:防止数据乱序。
2. 确认应答机制/超时重传:防止数据丢包或重复包。
3. 检验和:检查包内数据是否正确。
4. 流量控制:通过滑动窗口动态控制数据传输速度。
5. 拥塞控制:防止网络瘫痪。
设计一个可靠的UDP协议应该怎么做?
UDP不可靠原因:UDP传输过程中会出现丢包、数据不完整、乱序等问题。解决问题:
防止丢包:加入确认应答机制和超时重传。
数据不完整:加个16或32位的CRC验证字段。
乱序:加个数据包序列号SEQ。
现有的:RUDP(Reliable UDP)
IP地址的作用,以及MAC地址的作用
MAC地址是硬件地址,定义网络设备位置,由数据链路层负责。IP地址由IP协议提供的统一的地址格式,为互联网的每一个网络和主机分配一个逻辑地址,来抵消物理地址的差异。
用户从输入URL到显示页面整个过程
DNS解析URL,浏览器查询DNS,获取域名对应的IP地址。
浏览器向服务器请求连接(TCP三报文握手)。
浏览器向服务器发送HTTP请求。
服务器接收请求,根据路径参数映射到请求处理器处理,并将处理结果返回浏览器。
浏览器解析并渲染页面。
TCP拥塞控制?以及达到什么情况的时候开始减慢增长速度
拥塞控制:防止过多数据注入网络,导致网络瘫痪。
原理:
慢开始:最开始发送方拥塞窗口(cwnd)为1,每经过一次传输轮次RTT,拥塞窗口(cwnd)加倍,当cwnd超过慢开始门限,使用拥塞避免算法。
拥塞避免算法:每经过一次传输轮次RTT,拥塞窗口(cwnd)+1,一旦发现网络拥塞,将慢开始门限设置为当前值一半,重新慢开始。
快重传:接收方每收到一个失序报文段就立即发出重复确认,发送方只要收到3个重复确认就立即重传。
快恢复:当发送方连续收到三个重复确认,就将慢开始门限减半,将当前窗口设置为慢开始门限,并采用拥塞避免算法。
OSI网络体系结构
应用层:为用户的应用进程提供网络通信服务。
表示层:数据编码,压缩和解压缩,数据的加密和解密。
会话层:用户应用程序和网络之间的接口。
传输层:提供可靠的数据传输。
网络层:将网络地址翻译成对应的物理地址,并选择最适当的路径。
数据链路层:接收物理层的比特流数据,封装成帧。接收网络层的帧,拆装为比特流数据。
物理层:相邻计算机节点之间比特流的透明传送。
TCP/IP模型
4. 应用层:
3. 传输层:
2. 网络层:
1. 物理链路层: