【JavaEE初阶】网络编程套接字概念及分类|TCP和UDP特点及区别|丢包

目录

Socket套接字

1.概念

2.分类

1.TCP和UDP:

特点:

(1)有连接 VS 无连接

(2)可靠传输 VS 不可靠传输

丢包:

为啥会出现丢包?

如何对抗丢包?

(3)面向字节流 VS 面向数据报

(4)全双工 VS 半双工 


💡 上篇文章网络原理学习了:

1.网络的核心概念

2.封装分用流程

3.TCP/IP哪五层+每层干啥的(需倒背如流)

问题:当数据交给上一层的时候,是由哪个协议负责进行解析的呢?eg:数据链路层到网络层传输时,是交给ipv4还是ipv6呢?网络层传输到传输层,交给TCP解析还是UDP呢?

答:每个协议报头中都包含对应的信息,告诉你上一层是要交给哪个协议来处理的,不能自己决定的


网络编程套接字,也就是跨主机通信

一、Socket套接字

1.概念

操作系统提供的网络编程的API称为‘socket api”

目前:见到socket这个词,就可以认为是”网络编程的API“的统称


2.分类

操作系统提供的socket api其实不只有一套,而是有好几套~~

(1)流式套接字 =》给TCP使用的

(2)数据报套接字 =》给UDP使用的

(3)Unix域套接字 =》不能跨主机通信,只是本地主机上的进程和进程之间的通信方式(现在使用的很少了)

1.TCP和UDP:

TCP和UDP都是传输层协议,都是给应用层提供服务的

但是由于这两个协议,特点,差异非常大,因此我们需要搞两套api,来分别表示

💡 特点:

TCP:有连接,可靠传输,面向字节流,全双工

UDP:无连接,不可靠传输,面向数据报,全双工


💡 (1)有连接 VS 无连接

有连接:好比打电话,得电话接通了,然后才能说话

        可以选择,接听,也可选择直接挂掉~

        通信双方保存对方的信息

无连接:好比发信息,不需要“先接通”,直接上来就发

        这个就无法拒绝了


💡易混淆概念:连接 VS 链接 

两者无任何关系

连接:connection 抽象的概念

        生活中的连接:拿个东西,把两个东西给栓起来

        计算机中的连接:要建立连接的双方,各自保存对方的信息,就认为是建立了一个抽象的连接(eg:结婚证是一式两份,证上分别保存了对方的信息)

链接:Link


💡(2)可靠传输 VS 不可靠传输

首先要区分 可靠 != 安全 

安全:你的传输的数据,是否容易被黑客截获掉,一旦被截获之后,是否会造成严重的影响

可靠:要传输的数据,尽可能的传输给对方

        其次,只是尽可能做到数据到达对方,而不是确保,不是100%

        在当前网络通信的过程中,可能会存在很多意外情况,比如,丢包


💡丢包:

A给B传输10个数据报,B实际上只收到9个(随机的过程)

无法预知,啥时候会丢包;哪个路由器/交换机会出现丢包

💡为啥会出现丢包?

网络环境太复杂,A传输给B,中间可能会经历很多的交换机和路由器,进行转发,这些交换机和路由器,也不只是转发你的数据,还有转发很多数据

比如,某个交换机/路由器,非常繁忙,繁忙到,要处理的数据量,已经超出了自身的硬件水平,此时,多出来的数据,就无法转发,会被直接丢弃掉

类似于交通网,某个路口,动不动就堵车

生活中,堵车,只能一点一点堵着

计算机中,出现上述拥堵的情况,可能直接把数据给丢弃

💡如何对抗丢包?

可靠传输:引入“可靠传输”,TCP就具备这样可靠的传输特点,内部提供了一系列的机制来实现可靠传输,即使如此,TCP也只能“尽可能”无法保证,数据报100%到达对端,极端情况下,会出现网线断开的i情况,即使你在软件上使用浑身解数,也无济于事

不可靠传输:UDP则是不可靠传输,传输数据的时候,不会关心对方是否收到,发就完了

💡易错点:TCP的可靠性归结于TCP是有连接的,这是错误的

两者没有必要的联系,互不相干 


💡(3)面向字节流 VS 面向数据报

面向字节流:文件操作,就是字节流的(比喻成水流一样,读写操作非常灵活),TCP和文件操作,具有相同的特点(在代码提现出来都是一样的)

面向数据报:传输数据的基本单位,是一个一个的UDP数据报,一次读写,只能读写一个完整的UDP数据报,不能搞半个(对于写代码,影响非常明显)

💡 知识拓展:谈到,网络传输的基本单位,涉及到几个术语:

<1>数据报 Datagram  (用于UDP时这样叫)

<2>数据段 Segment   (用于TCP时这样叫)

<3>数据包 Packet      (用于IP时这样叫)

<4>数据帧 Frame       (用于数据链路层时这样叫)

其实这几个词是有区别的,但是一般程序员交流的时候都不会刻意的进行区分


 💡 (4)全双工 VS 半双工 

全双工:一条链路,能够进行双向通信(TCP,UDP都是全双工),后续代码中创建socket对象,既可以读(接受),也可以写(发送)

半双工 :一条链路,只能进行单向通信,要么接收,要么发送,不能同时进行

网络上,网线啥的,里面都是电信号,从这边进那边出,还是从那边进,这边出,都行

因为网线里头不是一根线,而是8根 

上述是列出了TCP和UDP最直观的区别,后面还会对两者进行详细的介绍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/580884.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

北京车展“第一枪”:长安汽车发布全球首款量产可变新汽车

4月25日&#xff0c;万众瞩目的2024北京国际汽车展览会在中国国际展览中心如期而至。作为中国乃至全球汽车行业的盛宴&#xff0c;本次车展也吸引了无数业内人士的高度关注。 此次北京车展以“新时代 新汽车”为主题&#xff0c;汇聚了1500余家主流车企及零部件制造商&#xff…

Laravel 6 - 第十七章 配置数据库

​ 文章目录 Laravel 6 - 第一章 简介 Laravel 6 - 第二章 项目搭建 Laravel 6 - 第三章 文件夹结构 Laravel 6 - 第四章 生命周期 Laravel 6 - 第五章 控制反转和依赖注入 Laravel 6 - 第六章 服务容器 Laravel 6 - 第七章 服务提供者 Laravel 6 - 第八章 门面 Laravel 6 - …

Kettle 中将图片url转换为Base64

背景 我遇到了一个应用场景需要将订阅kafka数据中的一个字段&#xff08;图片url&#xff09;转换为base64 然后进行下一步操作。 实现方式 我这边的实现方式是使用javaScript去实现的 图形化逻辑如下&#xff1a; 这一步就是实现url转换为base64 json input的步骤&#xf…

vulnhub靶场之driftingblues-6

一.环境搭建 1.靶场描述 get flags difficulty: easy about vm: tested and exported from virtualbox. dhcp and nested vtx/amdv enabled. you can contact me by email for troubleshooting or questions. 2.靶场下载 https://www.vulnhub.com/entry/driftingblues-6,6…

【Spring AI】聊天API-OpenAI-Function Call

文章目录 Function Calling工作原理快速上手将函数注册为 Bean纯 Java 函数实现&#xff08;Plain Java Functions&#xff09;FunctionCallback Wrapper Specifying functions in Chat OptionsRegister/Call Functions with Prompt Options 附录&#xff1a;Spring AI 函数调用…

MySQL使用Sequence创建唯一主键

目录 第一章、快速了解Sequence1.1&#xff09;是什么&#xff1f;为什么使用1.2&#xff09;Sequence和自增主键的区别 第二章、在MySQL中使用Sequence2.1&#xff09;创建mysql_sequence表2.1.1&#xff09;创建表2.1.2&#xff09;插入数据 2.2&#xff09;创建函数2.2.1&am…

Kubernetes学习-核心概念篇(三) 核心概念和专业术语

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Kubernetes渐进式学习-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 1. 前言 在前面两篇文章我们简单介绍了什么是K8S&#xff0c;以及K8S的…

Vue面试经验

Vue部分 Vue编译时声明周期的执行顺序 Vue中父子组件渲染顺序&#xff08;同步引入子组件&#xff1a;import Son from ‘/components/son’ &#xff09; 父子组件编译时的生命周期执行顺序 这里修改data数据时也修改了dom&#xff0c;如过知识通过按钮对数据进行操作&…

MySQL8.0 msi版本安装教程

MySQL8.0 msi 版本安装教程 1> 官网下载安装包 2> 安装MySQL 2.1双击打开下载的安装包&#xff0c;进入到下面这个页面&#xff0c;选择 Custom 选项&#xff0c;之后&#xff0c;点击next 说明&#xff1a; 2.2 选择所需产品&#xff0c;更改安装位置(当然也可以默认安…

springCahe框架

基于springboot项目 介绍:Spring Cache 是一个框架&#xff0c;实现了基于注解的缓存功能&#xff0c;只需要简单地加一个注解&#xff0c;就能实现缓存功能。 Spring Cache 提供了一层抽象&#xff0c;底层可以切换不同的缓存实现&#xff0c;例如&#xff1a; EHCache Caff…

Java-字符集-Unicode字符集

1 需求 Unicode 字符集UTF-8、UTF-16、UTF-32字符编码 2 接口 3 示例 4 参考资料

新媒体运营-----短视频运营-----PR视频剪辑----软件基础

新媒体运营-----短视频运营-----PR视频剪辑-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/138079659 文章目录 1.1 PR软件重置与初始化设置1.2 新建项目及序列设置1.3 PR工作区的管理方法1.4 导入4K超高清视频并与ME配合工作1…

【C语言】编译与链接

1.翻译环境与运行环境 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境。 1.翻译环境&#xff0c;在这个环境中源代码被转换为可执行的机器指令&#xff08;二进制指令&#xff09; 2.执行环境&#xff0c;它用于实际执行代码 2.翻译环境 那么翻译环境是怎么将源代码…

Linux(文件系统和日志分析)

目录 1.inode & block​编辑 1.1 inode的内容 1.3 inode的号码 1.4 inode的大小 1.5 inode的特殊作用 1.6 模拟inode号被占满 2. 链接文件 3.文件恢复 3.1 修复EXT类型的文件 3.1.1 EXT类型文件恢复步骤 3.2 修复XFS类型的文件 1.inode & block 1.1 in…

算法应用实例:最大子列和问题

给定N个整数的序列{A1,A2,……AN}&#xff0c;求函数的最大值。 分析&#xff1a;求该序列中最大的连续子列和&#xff0c;若函数最后为负数&#xff0c;返回0作为程序结束。 1.算法1 /*命名为MaxSubseqSum1&#xff0c;A[]:输入整数序列&#xff0c;N&#xff1a;整数序列里面…

7-29 删除字符串中的子串

题目链接&#xff1a;7-29 删除字符串中的子串 一. 题目 1. 题目 2. 输入输出样例 3. 限制 二、代码&#xff08;python&#xff09; 1. 代码实现 str1 input().split(\n)[0] str2 input().split(\n)[0] while str2 in str1:str1 str1.replace(str2, "") // 删…

第4篇:创建Nios II工程之Hello_World<三>

Q&#xff1a;接着我们再来完成Nios II软件工程设计部分。 A&#xff1a;从Quartus Tools选择Nios II Software Build Tools for Eclipse&#xff0c;打开Nios II SBT软件&#xff0c;Workspace指定到hello_world工程的software文件夹路径&#xff1b;再从File-->New-->…

使用STM32CubeMX对STM32F4的CAN1/2/3配置及接收中断开启

目录 1. CAN配置1.1引脚&#xff08;STM32F413VGT6-LQFP100&#xff09;1.2 时钟1.3 RCC配置1.4 CAN1配置1.5 CAN2配置1.6 CAN3配置1.7 输出设置 2. CAN代码2.1 CAN初始化2.2 CAN滤波器设置2.3 CAN使能2.4 激活中断2.5 CAN发送函数2.6 CAN回调函数2.7 main之后的代码 1. CAN配置…

数据分析:生存分析原理和应用实例

介绍 生存分析的目的是分析某个时间点的“生存概率”是多少。基于这样的研究目的,需要提供生存数据,它是一种由不同的开始时间和结束时间组成的事件-时间的数据,比如在癌症研究领域,研究手术到死亡的过程、治疗到疾病进展等等。 在开展生存分析前,需要了解什么是删失(c…

二维码门楼牌管理应用平台建设:隐患统计与智能管理

文章目录 前言一、二维码门楼牌管理应用平台概述二、隐患统计功能的重要性三、隐患统计的实现方式四、隐患统计的实践应用五、面临的挑战与未来发展 前言 随着城市管理的不断升级&#xff0c;二维码门楼牌管理应用平台已成为现代城市管理的重要工具。该平台通过集成先进的信息…
最新文章