计算机网络

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状态。


为什么会采用三次握手,若采用两次握手可以吗?

采用三次握手原因:防止接收端接收到失效的连接请求报文,因而产生错误。

若采用两次握手:

  1. 如果发送端有一条失效了很久的请求连接报文段,因为网络滞留导致连接结束才到达服务端,如果只两次握手,此时接收端就会直接建立连接,而服务端发送的确认报文段也无客户端响应,导致服务端浪费资源,一直等待客户端响应。

  2. 如果直接两次握手,只能说明发送端与接收端建立了正常通信,不能说明接收端与发送端建立正常通信。


TCP如何实现可靠连接

1. 序列号:防止数据乱序。

2. 确认应答机制/超时重传:防止数据丢包或重复包。

3. 检验和:检查包内数据是否正确。

4. 流量控制:通过滑动窗口动态控制数据传输速度。

5. 拥塞控制:防止网络瘫痪。


设计一个可靠的UDP协议应该怎么做?

UDP不可靠原因:UDP传输过程中会出现丢包、数据不完整、乱序等问题。解决问题:

  1. 防止丢包:加入确认应答机制和超时重传。

  2. 数据不完整:加个16或32位的CRC验证字段。

  3. 乱序:加个数据包序列号SEQ。

现有的:RUDP(Reliable UDP)


IP地址的作用,以及MAC地址的作用

MAC地址是硬件地址,定义网络设备位置,由数据链路层负责。IP地址由IP协议提供的统一的地址格式,为互联网的每一个网络和主机分配一个逻辑地址,来抵消物理地址的差异。


用户从输入URL到显示页面整个过程

  1. DNS解析URL,浏览器查询DNS,获取域名对应的IP地址。

  2. 浏览器向服务器请求连接(TCP三报文握手)。

  3. 浏览器向服务器发送HTTP请求。

  4. 服务器接收请求,根据路径参数映射到请求处理器处理,并将处理结果返回浏览器。

  5. 浏览器解析并渲染页面。


TCP拥塞控制?以及达到什么情况的时候开始减慢增长速度

拥塞控制:防止过多数据注入网络,导致网络瘫痪。

原理:

  1. 慢开始:最开始发送方拥塞窗口(cwnd)为1,每经过一次传输轮次RTT,拥塞窗口(cwnd)加倍,当cwnd超过慢开始门限,使用拥塞避免算法。

  2. 拥塞避免算法:每经过一次传输轮次RTT,拥塞窗口(cwnd)+1,一旦发现网络拥塞,将慢开始门限设置为当前值一半,重新慢开始。

  3. 快重传:接收方每收到一个失序报文段就立即发出重复确认,发送方只要收到3个重复确认就立即重传。

  4. 快恢复:当发送方连续收到三个重复确认,就将慢开始门限减半,将当前窗口设置为慢开始门限,并采用拥塞避免算法。


OSI网络体系结构

  1. 应用层:为用户的应用进程提供网络通信服务。

  2. 表示层:数据编码,压缩和解压缩,数据的加密和解密。

  3. 会话层:用户应用程序和网络之间的接口。

  4. 传输层:提供可靠的数据传输。

  5. 网络层:将网络地址翻译成对应的物理地址,并选择最适当的路径。

  6. 数据链路层:接收物理层的比特流数据,封装成帧。接收网络层的帧,拆装为比特流数据。

  7. 物理层:相邻计算机节点之间比特流的透明传送。


TCP/IP模型

4. 应用层

3. 传输层

2. 网络层

1. 物理链路层

使用 Hugo 构建
主题 StackJimmy 设计