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

例如:

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

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

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

总结

相关推荐
qq_2518364573 小时前
基于java Web网络订餐系统设计与实现 源码文档
java·开发语言·前端
凡人叶枫3 小时前
Effective C++ 条款17:以独立语句将 newed 对象置入智能指针
java·linux·开发语言·c++·算法
飞天狗1113 小时前
零基础JavaWeb入门——第2课:让网页“活”起来 —— JSP是什么?
java·开发语言·前端·后端·web
2601_961963384 小时前
技术解剖:哈希值、区块链与CA认证如何守护电子合同安全?
网络·人工智能·安全·区块链·智能合约·政务
2601_961963384 小时前
从“电子化”到“自动化”:2026年智能合约与电子合同融合的技术逻辑与法律适配
网络·人工智能·区块链·智能合约·政务
梦@_@境4 小时前
面向 Spring Boot 的可观测业务流程编排引擎
java·spring boot·后端
云烟成雨TD4 小时前
Spring AI Alibaba 1.x 系列【77】执行取消
java·人工智能·spring
醇氧4 小时前
【Linux】Java 服务生产级部署指南:实现常驻后台、开机自启与系统服务化管理
java·开发语言
JAVA面经实录9175 小时前
Netty 全套系统化学习文档(零基础到高阶面试完整版)
java·后端
weixin_523185325 小时前
Java面试高频题:Integer缓存机制与 equals、== 区别
java·缓存·面试