首页 > 编程语言 >java八股复习指南-计网篇

java八股复习指南-计网篇

时间:2024-07-18 15:56:10浏览次数:8  
标签:发送 UDP java 复习 ACK TCP 计网 服务端 客户端

网络分层模型

osi七层模型

osi七层模型2-1

tcp-ip四层模型

  1. 应用层
  2. 传输层
  3. 网络层
  4. 网络接口层

与osi七层模型对应为:

tcp-ip-4-model

应用层

主要提供两个终端设备上应用之间的消息交换的服务。它定义了消息交换的格式。

常见协议有:

application-layer-protocol

结合常见的协议,可以这样理解应用层:

应用层就是专门为特定的应用之间的通信提供服务

比如:http就是为web浏览器与web服务器提供服务,smtp就是为电子邮件从发送端到接收端提供服务。

传输层

负责向两台终端设备进程之间的通信提供通用的数据传输服务。

"通用的"即不指定特定的应用,正因如此,传输层作为应用层的下层,多种应用使用传输层向另一终端的应用进行通信。

常见协议

transport-layer-protocol

TCP(Transmission Control Protocol,传输控制协议 ):提供 面向连接 的,可靠 的数据传输服务。

UDP(User Datagram Protocol,用户数据协议):提供 无连接 的,尽最大努力 的数据传输服务(不保证数据传输的可靠性),简单高效。

网络层

负责为分组交换网上的不同主机提供通信服务

网络层的还有一个任务就是选择合适的路由,使源主机运输层所传下来的分组,能通过网络层中的路由器找到目的主机。

常见协议

nerwork-layer-protocol-VpGZIByy

网络接口层

我们可以把网络接口层看作是数据链路层和物理层的合体。

  1. 数据链路层(data link layer)通常简称为链路层( 两台主机之间的数据传输,总是在一段一段的链路上传送的)。数据链路层的作用是将网络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。
  2. 物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异

常见协议

network-interface-layer-protocol

网络分层的原因

  1. 各层之间相互独立:各层之间不需要关心其他层如何实现,只需要知道如何调用其他层的接口即可。
  2. 提供整体灵活性:高内聚、低耦合 。每一层都可以使用最适合的技术来实现,你只需要保证你提供的功能以及暴露的接口的规则没有改变就行
  3. 大问题化小:将复杂问题拆分成简单问题,进而处理和解决。

WebSocket

WebSocket 是一种基于 TCP 连接的全双工通信协议,即客户端和服务器可以同时发送和接收数据。

客户端和服务器仅需一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

WebSocket与Http的区别

WebSocket 和 HTTP 两者都是基于 TCP 的应用层协议,都可以在网络中传输数据。

区别

  1. WebSocket是一种双向的实时通信协议,而HTTP是单向的通信协议。HTTP只能由客户端向服务端发出请求
  2. WebSocket前缀是ws://或wss://,而HTTP前缀是http://或https://
  3. WebSocket 通信数据格式比较轻量,用于协议控制的数据包头部相对较小,网络开销小,而 HTTP 通信每次都要携带完整的头部,网络开销较大

TCP和UDP

TCP、UDP的区别

  1. 是否面向连接:UDP传输数据之前不需要建立连接,而TCP需要先建立连接,才开始传输数据,因此TCP是提供面向连接的服务。
  2. 是否可靠传输:UDP是不可靠的,TCP是可靠的
  3. 是否有状态:UDP是无状态的服务,简单说就是不管发出去之后的事情,不论是否收到或者是否有丢失。而TCP是有状态的服务,TCP会记录发出去的消息状态,如是否发送、是否接收等,因此TCP需要维持复杂的连接状态
  4. 传输效率:UDP不需要考虑连接等,而TCP需要考虑连接、确认、重传等机制,因此UDP效率比TCP高
  5. 传输形式:UDP是面向报文的,而TCP是面向字节流的
  6. 首部开销:UDP首部8字节,TCP首部20-60字节
  7. 是否提供广播或者多播服务:TCP仅支持1对1传输,而UDP支持1对1、1对多、多对1、多对多等
TCP UDP
是否面向连接
是否可靠
是否有状态
传输效率 较慢 较快
传输形式 字节流 数据报文段
首部开销 20 ~ 60 bytes 8 bytes
是否提供广播或多播服务

如何选择TCP与UDP

关键在数据传输的准确性

UDP:一般用于实时通信:比如语音、视频、直播

TCP:用于对准确性要求高的场景:比如文件传输、发送和接收文件

TCP三次握手与四次挥手

三次握手

tcp-shakes-hands-three-times

建立一个 TCP 连接需要“三次握手”,缺一不可:

三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。

  • 一次握手:客户端发送带有 SYN(SEQ=x) 标志的数据包 -> 服务端,然后客户端进入 SYN_SEND 状态,等待服务端的确认;

一次握手,客户端什么都没确认,服务端确认了客户端的发送以及服务端的接收功能

  • 二次握手:服务端发送带有 SYN+ACK(SEQ=y,ACK=x+1) 标志的数据包 –> 客户端,然后服务端进入 SYN_RECV 状态;

二次握手,客户端确认了自己的发送和接收功能、服务端的发送和接收功能;而服务端还是只确认了客户端的发送以及服务端的接收功能

  • 三次握手:客户端发送带有 ACK(ACK=y+1) 标志的数据包 –> 服务端,然后客户端和服务端都进入ESTABLISHED 状态,完成 TCP 三次握手。

三次握手,客户端确认了自己的发送和接收功能、服务端的发送和接收功能;同时服务端确认了客户端的发送和接收功能以及服务端的发送和接收功能

四次挥手

tcp-waves-four-times

断开一个 TCP 连接则需要“四次挥手”,缺一不可:

  1. 第一次挥手:客户端发送一个 FIN(SEQ=x) 标志的数据包->服务端,用来关闭客户端到服务端的数据传送。然后客户端进入 FIN-WAIT-1 状态。
  2. 第二次挥手:服务端收到这个 FIN(SEQ=X) 标志的数据包,它发送一个 ACK (ACK=x+1)标志的数据包->客户端 。然后服务端进入 CLOSE-WAIT 状态,客户端进入 FIN-WAIT-2 状态。
  3. 第三次挥手:服务端发送一个 FIN (SEQ=y)标志的数据包->客户端,请求关闭连接,然后服务端进入 LAST-ACK 状态。
  4. 第四次挥手:客户端发送 ACK (ACK=y+1)标志的数据包->服务端,然后客户端进入TIME-WAIT状态,服务端在收到 ACK (ACK=y+1)标志的数据包后进入 CLOSE 状态。此时如果客户端等待 2MSL 后依然没有收到回复,就证明服务端已正常关闭,随后客户端也可以关闭连接了。

只要四次挥手没有结束,客户端和服务端就可以继续传输数据!

为什么是四次挥手,比三次握手还要多一次?

TCP属于双向通信,当客户端发起断开请求时,在经过第一次、第二次挥手后,只是确认了服务端收到客户端的请求,但可能服务端还有数据没有发送完毕。因此,直到服务端发送完所有数据后,才会发起第三次挥手,而在客户端发出第四次挥手后,证明双方都收到了断开的请求,然后才真正断开连接。

也就是说第二三次之间,可能仍然有数据的传输。因此第二三次并不能合并


通过JavaGuide学习提炼,详情可访问 https://javaguide.cn/

标签:发送,UDP,java,复习,ACK,TCP,计网,服务端,客户端
From: https://www.cnblogs.com/forest-pan/p/18309703

相关文章

  • 基于SpringBoot的宠物领养系统-07863(免费领源码+开发文档)可做计算机毕业设计JAVA、PHP
    摘 要21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准确、快速、完善,并能提高工作管理效率,促进其发展。论文主要是对宠物领养系统......
  • 计网2
    ---title:计网第二章date:2023-04-2319:46:37.917updated:2023-05-2310:32:48.059url:/archives/jiwang2categories:tags:--->苟日新,日日新,又日新#物理层**物理层功能**:通过物理设备和物理介质之间的接口技术,实现物理设备之间的比特流透明传输。**物理层服务**:建立、维......
  • Java中的分布式任务调度与Quartz框架应用
    Java中的分布式任务调度与Quartz框架应用大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在现代软件开发中,分布式系统的任务调度变得越来越重要。本文将深入探讨如何利用Java中的Quartz框架来实现分布式任务调度,以及在实际应用中的一些最佳实践和设计考虑......
  • 如何在Java中实现基于Kafka的事件驱动架构
    如何在Java中实现基于Kafka的事件驱动架构大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!事件驱动架构在现代分布式系统中被广泛应用,它通过异步事件传递来解耦系统中的各个组件,提高系统的可扩展性和灵活性。ApacheKafka作为一个高吞吐量的分布式消息队......
  • Java中的大规模数据处理与MapReduce设计
    Java中的大规模数据处理与MapReduce设计大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!随着数据规模的不断增大,大规模数据处理变得越来越重要。在Java领域,MapReduce作为一种经典的数据处理模型,在处理海量数据时展现了强大的能力。本文将介绍如何在Java中......
  • 使用Java和Apache Thrift构建高效的RPC服务
    使用Java和ApacheThrift构建高效的RPC服务大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!ApacheThrift是一种开源的RPC框架,支持多种编程语言,能够高效地进行跨语言服务调用。本文将介绍如何使用Java和ApacheThrift构建高效的RPC服务,包括Thrift的基础配......
  • Java中的并发数据结构与多线程优化技术
    Java中的并发数据结构与多线程优化技术大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在多线程编程中,并发数据结构和优化技术是提高系统性能和可靠性的关键。Java提供了丰富的并发数据结构和多线程优化技术,本文将详细介绍常用的并发数据结构及其使用方法......
  • 使用Java和Hazelcast构建高可用的分布式缓存系统
    使用Java和Hazelcast构建高可用的分布式缓存系统大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在分布式系统中,缓存是提高系统性能和可扩展性的关键组件之一。Hazelcast是一种高性能、易用的分布式内存数据网格,支持多种数据结构和分布式计算。本文将介绍......
  • Java注解之元注解
    说明:介绍各种元注解的作用@Documented作用:指示使用此注解的元素(类、方法、字段等)应当被javadoc工具记录。详细说明:通常注解不会出现在生成的API文档中,但如果注解使用了@Documented,那么该注解将包含在javadoc中。这样可以使开发者在阅读文档时看到注解的存在以及......
  • Java中的异常处理与容错设计最佳实践
    Java中的异常处理与容错设计最佳实践大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在Java编程中,异常处理是一个非常重要的环节。良好的异常处理和容错设计可以提升系统的健壮性和可维护性。本文将介绍Java中的异常处理与容错设计最佳实践,包括异常的分类......