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

例如:

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

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

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

总结

相关推荐
脸大是真的好~几秒前
计算机408基础相关面试题-备用,不推荐
java
小费的部落1 分钟前
Excel 在Sheet3中 匹配Sheet1的A列和Sheet2的A列并处理空内容
java·前端·excel
咘噜biu2 分钟前
多租户动态数据源插件dynamic-datasource简介
java·mybatisplus·动态数据源·多租户
漫漫求4 分钟前
Java内存模型【JMM】、JVM内存模型
java·开发语言·jvm
原来是好奇心4 分钟前
深入Spring Boot源码(五):外部化配置与Profile机制深度解析
java·源码·springboot
IT界的奇葩5 分钟前
OAuth2 单点登录流程图
java·流程图·oauth2·单点登录·sso
Bruce_Liuxiaowei13 分钟前
SSH主机密钥验证失败(Host key verification failed)深度解析与解决方案
运维·网络·ssh
ZHang......1 小时前
LeetCode 1114. 按序打印
java·开发语言·算法
程序员欣宸1 小时前
LangChain4j实战之四:集成到spring-boot
java·人工智能·spring boot
慧都小项1 小时前
Parasoft Jtest 如何用 JSON 文件驱动Java 测试自动化
java·自动化·json