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的可靠性机制, 在应⽤层实现类似的逻辑;

例如:

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

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

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

总结

相关推荐
国科安芯1 小时前
MCU芯片AS32A601与INA226芯片精确测量实现与应用
网络·单片机·嵌入式硬件·架构·安全性测试
一 乐2 小时前
健身达人小程序|基于java+vue健身达人小程序的系统设计与实现(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·小程序
u***42073 小时前
Ubuntu介绍、与centos的区别、基于VMware安装Ubuntu Server 22.04、配置远程连接、安装jdk+Tomcat
java·ubuntu·centos
charlie1145141914 小时前
从 0 开始:在 WSL + VSCode 上利用 Maven 构建 Java Spring Boot 工程
java·笔记·vscode·后端·学习·maven·springboot
tuokuac4 小时前
Maven中的属性占位符的用法
java·maven
芒克芒克4 小时前
Maven 项目管理从入门到进阶:基础与高级实战全解析
java·maven
憧憬blog7 小时前
【Kiro开发集训营】拒绝“屎山”堆积:在 Kiro 中重构“需求-代码”的血缘关系
java·开发语言·kiro
e***74957 小时前
Spring Security 官网文档学习
java·学习·spring