JavaEE初阶-网络原理1

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • [1. 应用层](#1. 应用层)
  • [2. 传输层TCP/UDP](#2. 传输层TCP/UDP)
    • [2.1 UDP协议](#2.1 UDP协议)
    • [2.2 TCP协议](#2.2 TCP协议)
    • [2.3 TCP核心机制](#2.3 TCP核心机制)
      • [2.3.1 超时重传,确认应答](#2.3.1 超时重传,确认应答)
      • [2.3.2 三次握手,四次挥手](#2.3.2 三次握手,四次挥手)
      • [2.3.3 滑动窗口](#2.3.3 滑动窗口)
      • [2.3.4 流量控制](#2.3.4 流量控制)
      • [2.3.5 拥塞控制](#2.3.5 拥塞控制)
      • [2.3.6 延迟应答](#2.3.6 延迟应答)
      • [2.3.7 捎带应答](#2.3.7 捎带应答)
      • [2.3.8 面向字节流](#2.3.8 面向字节流)
      • [2.3.9 异常处理](#2.3.9 异常处理)
    • [2.4 TCP协议段格式](#2.4 TCP协议段格式)
  • [3. TCP/UDP对⽐](#3. TCP/UDP对⽐)
  • 总结

前言

简历上写:熟悉TCP协议的常见特性

1. 应用层

互联网中,主流的是TCP/IP五层协议

5G速度再快,也快不过有线网

组织数据的格式:xml,json,yml,google protobuffer(关注性能,用二进制来组织数据的,不关注可读性)

自定义应用层

1.确定传递的信息

2.确定传输的数据格式

2. 传输层TCP/UDP

在TCP/IP协议中, ⽤ "源IP", "源端⼝号", "⽬的IP", "⽬的端⼝号", "协议号" 这样⼀个五元组来标识⼀个通信(可以通过netstat -n查看);

端⼝号(Port)标识了⼀个主机上进⾏通信的不同的应⽤程序;

端⼝号范围划分

• 0 - 1023: 知名端⼝号, HTTP, FTP, SSH等这些⼴为使⽤的应⽤层协议, 他们的端⼝号都是固定的.

1024 - 65535: 操作系统动态分配的端⼝号. 客⼾端程序的端⼝号, 就是由操作系统从这个范围分配的.

• ssh服务器, 使⽤22端⼝

• ftp服务器, 使⽤21端⼝

• telnet服务器, 使⽤23端⼝

• http服务器, 使⽤80端⼝

• https服务器, 使⽤443

我们⾃⼰写⼀个程序使⽤端⼝号时, 要避开这些知名端⼝号

⼀个进程可以bind多个端⼝号

⼀个端⼝号不可以被多个进程bind


2.1 UDP协议

UDP协议端格式

• 16位UDP⻓度, 表⽰整个数据报(UDP⾸部+UDP数据)的最⼤⻓度;

• 如果校验和出错, 就会直接丢弃;

校验和:CRC循环冗余校验,MD5,SHA1

SHA1的特点和Md5是差不多的

UDP的特点

UDP传输的过程类似于寄信.

• ⽆连接: 知道对端的IP和端⼝号就直接进⾏传输, 不需要建⽴连接;

• 不可靠: 没有确认机制, 没有重传机制; 如果因为⽹络故障该段⽆法发到对⽅, UDP协议层也不会给应⽤层返回任何错误信息;

• ⾯向数据报: 不能够灵活的控制读写数据的次数和数量;

报文长度就是报头和正文的长度

2.2 TCP协议

TCP全称为 "传输控制协议(Transmission Control Protocol").

首部长度就是报头的长度

UDP协议的报头长度就是固定的8个字节

TCP报头长度可以变化


2.3 TCP核心机制

2.3.1 超时重传,确认应答

  1. 确认应答,感知对方是否收到,感知对方收到,要靠对方告诉你一声



















2.3.2 三次握手,四次挥手

三次握手和四次挥手是高频面试














2.3.3 滑动窗口









2.3.4 流量控制







2.3.5 拥塞控制








2.3.6 延迟应答



2.3.7 捎带应答






2.3.8 面向字节流








2.3.9 异常处理








2.4 TCP协议段格式

6位标志位:

◦ URG: 紧急指针是否有效

◦ ACK: 确认号是否有效

◦ PSH: 提⽰接收端应⽤程序⽴刻从TCP缓冲区把数据读⾛

◦ RST: 对⽅要求重新建⽴连接; 我们把携带RST标识的称为复位报⽂段

◦ SYN: 请求建⽴连接; 我们把携带SYN标识的称为同步报⽂段

◦ FIN: 通知对⽅, 本端要关闭了, 我们称携带FIN标识的为结束报⽂段

16位紧急指针: 标识哪部分数据是紧急数据

16位校验和: 发送端填充, CRC校验. 接收端校验不通过, 则认为数据有问题. 此处的检验和不光包含

TCP⾸部, 也包含TCP数据部分.

• 4位TCP报头⻓度: 表⽰该TCP头部有多少个32位bit(有多少个4字节); 所以TCP头部最⼤⻓度是15 *

4 = 60

3. TCP/UDP对⽐

TCP⽤于可靠传输的情况, 应⽤于⽂件传输, 重要状态更新等场景;

• UDP⽤于对⾼速传输和实时性要求较⾼的通信领域, 例如, 早期的QQ, 视频传输等. 另外UDP可以⽤

于⼴播;

⽤UDP实现可靠传输(经典⾯试题):参考TCP

参考TCP的可靠性机制, 在应⽤层实现类似的逻辑;

例如:

• 引⼊序列号, 保证数据顺序;

• 引⼊确认应答, 确保对端收到了数据;

• 引⼊超时重传, 如果隔⼀段时间没有应答, 就重发数据;

总结

相关推荐
亓才孓几秒前
[Maven]Maven基础
java·maven
hello 早上好4 分钟前
05_Java 类加载过程
java·开发语言
echoVic18 分钟前
多模型支持的架构设计:如何集成 10+ AI 模型
java·javascript
REDcker18 分钟前
埋点系统设计:从成熟工具到自建方案
运维·服务器·网络·用户分析·埋点·埋点系统
橙露19 分钟前
Java并发编程进阶:线程池原理、参数配置与死锁避免实战
java·开发语言
echoVic21 分钟前
AI Agent 安全权限设计:blade-code 的 5 种权限模式与三级控制
java·javascript
PPPPickup23 分钟前
easymall---图片上传以及图片展示
java
历程里程碑26 分钟前
Linux 库
java·linux·运维·服务器·数据结构·c++·算法
Wpa.wk26 分钟前
接口自动化 - 接口鉴权处理常用方法
java·运维·测试工具·自动化·接口自动化
Pluchon29 分钟前
硅基计划4.0 简单模拟实现AVL树&红黑树
java·数据结构·算法