文章目录
- TCP与UDP的区别
- TCP三次握手和四次挥手
- 为什么要三次握手?
- 第二次握手传回了ACK,为什么还要传回SYN?
- 为什么要四次挥手?
- 为什么不能将服务器发送的ACK和FIN合并起来,变成三次挥手?
- TCP如何保证传输的可靠性?
- IP
- 什么是IP地址?IP寻址如何工作?
- 什么是IP地址过滤器?
- IPv4和IPv6有什么区别?
- NAT的作用是什么?
- ARP
- 什么是MAC地址?
- ARP协议解决了什么问题?
TCP与UDP的区别
- 是否面向连接:UDP 在传送数据之前不需要先建立连接。而 TCP 提供面向连接的服务,在传送数据之前必须先建立连接,数据传送结束后要释放连接。
- 是否是可靠传输:远地主机在收到 UDP 报文后,不需要给出任何确认,并且不保证数据不丢失,不保证是否顺序到达。TCP 提供可靠的传输服务,TCP 在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制。通过 TCP 连接传输的数据,无差错、不丢失、不重复、并且按序到达。
- 是否有状态:这个和上面的“是否可靠传输”相对应。TCP 传输是有状态的,这个有状态说的是 TCP 会去记录自己发送消息的状态比如消息是否发送了、是否被接收了等等。为此 ,TCP 需要维持复杂的连接状态表。而 UDP 是无状态服务,简单来说就是不管发出去之后的事情了。
- 传输效率:由于使用 TCP 进行传输的时候多了连接、确认、重传等机制,所以 TCP 的传输效率要比 UDP 低很多。
- 传输形式:TCP 是面向字节流的,UDP 是面向报文的。
- 首部开销:TCP 首部开销(20 ~ 60 字节)比 UDP 首部开销(8 字节)要大。
- 是否提供广播或多播服务:TCP 只支持点对点通信,UDP 支持一对一、一对多、多对一、多对多;
UDP一般用于即时通信,像语音视频,直播等,对数据传输准确度不是特别高。传输协议主要是DHCP协议、DNS主要是IP地址的配置
TCP用于准确性特别高的场景, 像文件传输,发送和接收邮件,远程登录等。
TCP三次握手和四次挥手
- 一次握手:客户端发送带有
SYN
标志的数据包到服务端然后客户端进入SYN_SEND
状态 - 二次握手:服务端发送带有
SYN+ACK
标志的数据包到客户端,然后服务端进入SYN_RECV
状态 - 三次握手:客户端发送带有
ACK
标志的数据包到服务端,然后客户端和服务端都进入ESTABLISHED
状态,完成TCP三次握手
当数据包丢失的几种情况:
- 当客户端发送到服务器的过程中SYN包丢失: 服务器没有收到客户端发送的SYN包,客户端没有收到服务器返回的数据包,客户端会周期性的超时重传,知道收到服务器的确认
- 当服务器发送到客户端的过程中SYN+ACK包丢失: 这时不是服务器超时重传,客户端没有收到服务器的确认,就回进行超时重传,知道收到服务器的确认
- 当三次挥手客户端发送到服务器的过程中ACK包丢失: 这时服务器没有收到客户端的确认,就回超时重传,直到收到客户端的确认
- 一次挥手:客户端发送一个
FIN
标志的数据包进入服务端用来关闭客户端到服务器的数据传送。然后,客户端进入FIN-WAIT-1
状态 - 二次挥手:服务器收到FIN标志的数据包,然后发送一个
ACK
标志的数据包到客户端。然后此时服务端进入CLOSE-WAIT
状态,客户端进入FIN-WAIT-2
状态 - 三次挥手:服务器关闭与客户端的连接并向客户端发送一个
FIN
标志的数据包,然后服务端进入LAST-ACK
状态 - 四次挥手:客户端发送
ACK
标志的数据包到服务端并且进入TIME-WAIT
状态,服务器在收到ACK
标志的数据包后进入到CLOSE
状态。此时如果客户端在等待2MSL
后让没有收到回复,就证明服务端已经正常关闭,随后客户端也可以关闭连接
为什么要三次握手?
三次握手的目的是建立可靠通信信道,同时提高了传输效率,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的
第一次握手:客户端什么都不能确定;服务器端确定了对方发送正常,自己接收正常
第二次握手:客户端确认了自己发送接收正常,对方发送接收正常;服务器端确定了对方发送正常,自己接收正常
第三次握手:客户端确认了自己发送接收正常,对方发送接收正常;服务器端确定了自己发送接收正常,对方发送接收正常
第二次握手传回了ACK,为什么还要传回SYN?
因为服务端收到了来自客户端的相应,如果只是传回了ACK那么将收不到客户端向服务端的接收响应。回传SYN则是为了建立并确认从服务端到客户端的通信。
- SYN是TCP/IP建立连接时使用的握手信号,在客户端建立TCP连接是,客户端会向服务器发送一个SYN请求,要求服务器回应一个ACK消息来确认收到了客户端的请求。
为什么要四次挥手?
TCP是可以双向传输数据。任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。
简单来说就是服务器发出了中断指令,客户端收到之后对服务端进行了回应,然后客户端发出中断指令,服务器收到之后进行回应。
为什么不能将服务器发送的ACK和FIN合并起来,变成三次挥手?
因为服务器在收到客户端发送的请求时,可能会有一些数据没有发送,这时候先回复ACK,表示接收到了断开连接的请求。等数据发完之后在发FIN,断开服务器到客户端的数据传送
TCP如何保证传输的可靠性?
- 基于数据块传输:应用数据被分割成TCP认为最适合发送的数据块,在传输给网络层,数据块被称为报文段或段
- 对失序数据包重新排序以及去重:TCP为了保证不发生丢包,就给每个包一个序列号,有了序列号能够将接收到的数据根据序列号排序,并且去掉重复序列号的数据就可以实现数据包去重
- 效验和:TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
- 超时重传:当发送方发送数据之后,接收端成功接收到后会返回一个确认消息(ACK)。如果在固定时间内未收到确认消息,那么就进行重传。
- 流量控制:TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送端发送的数据,能提示发送端降低发送速率防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议
- 拥塞控制:当网络拥塞时,减少数据的发送
IP
IP是TCP/IP协议中最重要的协议之一,属于网络层的协议,主要用于在互联网中定义数据包的格式,对数据包进行路由和寻址。目前有两种,一种是IPv4,另一种是IPv6。
什么是IP地址?IP寻址如何工作?
每个连接互联网的设备都会分配一个IP地址,每个IP地址都是一个字符序列。
当网络设备发送 IP 数据包时,数据包中包含了 源 IP 地址目的 IP 地址。源 IP 地址用于标识数据包的发送方设备或域,而目的 IP 地址则用于标识数据包的接收方设备或域。这类似于一封邮件中同时包含了目的地地址和回邮地址。
什么是IP地址过滤器?
简单来说就是限制或阻止特定的IP地址或IP地址范围的访问。IP地址过滤器是一种简单的网络安全措施,比如认证、授权、加密等仪器使用。单独使用IP地址过滤并不能完全保证网络的安全。
IPv4和IPv6有什么区别?
两者最突出的区别是地址长度不一样IPv4使用32位二进制数组,最多可以表示42亿个IP地址。IPv6使用128位二进制数字表示IP地址,可以表示的地址数量高达340万亿亿亿个,避免了IP地址短缺问题
IPv6还有一下有优点
- 无状态地址自动配置:主机可以直接通过接口标识和网络前缀生成全局唯一的IPv6地址,而无需依赖DHCP服务器,简化了网络配置和管理
- NAT称为可选项:IPv6地址资源充足,可以给全球每一个设备独立的地址
- 对标头结构进行了改进:允许在IPv6表头中添加不同的扩展头,用于实现不同类型的功能和选项
NAT的作用是什么?
NAT(网络地址转换)是一种用于将私有IP地址转换为公共IP地址的技术。从而实现局域网中的多个设备通过单一共有IP地址访问互联网。NAT不光可以缓解IPv4地址资源短缺问题,还可以隐藏内部网络的实际拓扑结构,使得外部网络无法直接访问内部网络中的设备,从而提高了内部网络的安全性。
ARP
ARP(地址解析协议,Address Resolution Protocol)是一种用于在网络层和数据链路层之间进行通信的协议。它主要功能是将网络层中的IP地址(逻辑地址)转换为数据链路层中的MAC地址(物理地址),以便支持实现网络通信。
什么是MAC地址?
MAC 地址的全称是 媒体访问控制地址(Media Access Control Address) 如果说,互联网中每一个资源都由 IP 地址唯一标识(IP 协议内容),那么一切网络设备都由 MAC 地址唯一标识。
MAC 地址有一个特殊地址:FF-FF-FF-FF-FF-FF(全 1 地址),该地址表示广播地址
ARP协议解决了什么问题?
ARP 协议,全称 地址解析协议(Address Resolution Protocol) 它解决的是网络层地址和链路层地址之间的转换问题。因为一个 IP 数据报在物理上传输的过程中,总是需要知道下一跳(物理上的下一个目的地)该去往何处,但 IP 地址属于逻辑地址,而 MAC 地址才是物理地址,ARP 协议解决了 IP 地址转 MAC 地址的一些问题。