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

例如:

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

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

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

总结

相关推荐
寻星探路4 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
曹牧6 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
爬山算法7 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
盟接之桥7 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
kfyty7257 小时前
集成 spring-ai 2.x 实践中遇到的一些问题及解决方案
java·人工智能·spring-ai
猫头虎7 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
李少兄7 小时前
在 IntelliJ IDEA 中修改 Git 远程仓库地址
java·git·intellij-idea
忆~遂愿7 小时前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能
会员源码网7 小时前
理财源码开发:单语言深耕还是多语言融合?看完这篇不踩坑
网络·个人开发