计算机网络(2

计算机网络续

一. 网络编程

网络编程, 指网络上的主机, 通过不同的进程, 以编程的方式实现网络通信(或网络数据传输).
即便是同一个主机, 只要不同进程, 基于网络来传输数据, 也属于网络编程.

二. 网络编程套接字(socket)

socket: 操作系统提供的网络编程的 API 称作 “socket api”.
socket 原译: 插槽, 最初指的是主板上特定的插槽.

1. socket api

  1. 流式套接字
    给 TCP 使用 (TCP: 有连接, 可靠传输, 面向字节流, 全双工);
  2. 数据报套接字
    给 UDP 使用 (UDP: 无连接, 不可靠传输, 面向数据报, 全双工);

由于两个协议差异大, 所以搞两套 api 分别表示.

  1. Unix 域套接字
    不能跨主机通信, 是本地主机进程与进程之间的通信方式.(现在很少用);

2. TCP/UDP协议特点

在这里插入图片描述

( 1. 有链接和无连接
  • 有连接, 相当于电话打通了, 才能说话.
    通信双方保存对方信息
  • 无连接, 相当于发微信, 不需要接通就可以发信息.
    通信双方不保存对方信息

计算机中的连接是 各自保存对方的信息, 此时就认为建立了一个 “抽象的连接”

( 2. 可靠传输和不可靠传输

可靠 != 安全

  • 安全: 传输的数据是否易被黑客捕获, 造成严重影响。
  • 可靠: 要传输的数据, 尽可能 的传输给对方。
  • 为什么说 尽可能:因为网络环境太复杂了,A 传输给 B 中间会经历许多的交换机和路由器转发,若某个交换机 / 和路由器异常繁忙,要处理的数据量已经超出自身的硬件水平,此时就可能会出现 丢包 情况的发生。(所以 丢包 的发生和位置无法预知。为对抗丢包,就引入了TCP可靠性传输,但不能达到100%避免)
( 3. 面向字节流和面向数据报
  • 字节流:比喻成流水一样,读写非常灵活,文件操作就是 字节流。
    TCP 和 文件操作具有相同的特点
  • 数据报: 数据报是传输数据的基本单位, 是一个个的 UDP 数据报

网络传输数据的基本单位术语(0 和 1 的二进制数串)
( 1. 数据报 Datagram;UDP
( 2. 数据段 Segment;TCP
( 3.数据包 Packet;IP
( 4. 数据帧 Frame;数据链路层
无需刻意区分

( 4. 全双工和半双工

全双工:一条链路双向通信(TCP和UDP都是全双工,则既可以写也可以读)
半双工:一条链路单向通信
网线中的几根线,有些线负责信息是发送,有些线负责信息接收

3. UDP的 socket api

( 1. DatagramSocket
系统中本就有 socket 的概念,DtatagramSocket 就是对于操作系统的概念的封装
系统中的 socket 则可以理解成是一种 文件,而 文件 是一种广义的的概念,socket 文件,就可以视为是 “网卡” 的抽象表现。针对 socket 文件的读写操作,就相当于针对 网卡 这个硬件设备进行读写。
这样就可以很方便的操作硬盘,似遥控器远程操控一样,像这种具有 “遥控属性” 的这样概念,计算机中将其命名为 “句柄” (handle – 把手)
(2. DatagramPacket
针对 UDP 数据报 的一个抽象表示,一个 DatagramPacket 对象,就相当于一个 UDP 数据报。
一次发送 /一次接收,就是传输了一个 DatagramPacket 对象。


未完待续…

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构与算法】堆排序算法原理与实现:基于堆实现的高效排序算法

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《数据结构与算法》 期待您的关注 ​ 目录 一、引言 堆排序的简介 堆排序的特点 二、堆的概念 三、堆排序算法的原理 四、堆…

软件测试面试1000问(含答案)

1、自动化代码中,用到了哪些设计模式? 单例设计模式工厂模式PO设计模式数据驱动模式面向接口编程设计模式 2、什么是断言( Assert) ? 断言Assert用于在代码中验证实际结果是不是符合预期结果,如果测试用例执行失败会抛出异常并提供断言日志 3、什么是web自动化…

数据结构预科

在堆区申请两个长度为32的空间,实现两个字符串的比较【非库函数实现】 要求: 1> 定义函数,在对区申请空间,两个申请,主函数需要调用2次 2> 定义函数,实现字符串的输入,void input(char …

Jenkins容器的部署

本文主要是记录如何在Centos7上安装docker,以及在docker里面配置tomcat、mysql、jenkins等环境。 一、安装docker 1.1 准备工作 centos7、VMware17Pro 1.2 通过yum在线安装dokcer yum -y install docker1.3 启动docker服务 systemctl start docker.service1.4 查看docke…

Java传引用问题

本文将介绍 Java 中的引用传递,包括其定义、实现方式、通过引用修改原来指向的内容和通过引用修改当前引用的指向的区别 目录 1、引用传递的概念 2、引用传递的实现方式 3、传引用会发生的两种情况: 通过引用修改当前引用的指向 通过引用修改原来指…

《数据仓库与数据挖掘》 总复习

试卷组成 第一章图 第二章图 第三章图 第四章图 第五章图 第六章图 第九章图 第一章 DW与DM概述 (特点、特性) DB到DW 主要特征 (1)数据太多,信息贫乏(Data Rich, Information Poor)。 &a…

H2 Database Console未授权访问漏洞封堵

背景 H2 Database Console未授权访问,默认情况下自动创建不存在的数据库,从而导致未授权访问。各种未授权访问的教程,但是它怎么封堵呢? -ifExists 很简单,启动参数添加 -ifExists ,它的含义&#xff1a…

【机器学习】机器学习的重要方法——线性回归算法深度探索与未来展望

欢迎来到 破晓的历程博客 引言 在数据科学日益重要的今天,线性回归算法以其简单、直观和强大的预测能力,成为了众多领域中的基础工具。本文将详细介绍线性回归的基本概念、核心算法,并通过五个具体的使用示例来展示其应用,同时探…

CASS7.0按方向和距离绘制图形

1、绘制工具 2、按方向和距离绘制 (1)切换方向 (2)距离输入

Python函数缺省参数的 “ 坑 ” (与C++对比学习)

我们都知道Python函数的缺省参数可以降低我们调用函数的成本,但是一般我们的缺省参数都是不可变对象,如果是可变对象,我们对其多次调用会发生什么呢? def func(arr[]):arr.append(Hello)print(arr)func() func() func() 这貌似…

MongoDB-社区版-本地安装

系统:win10 1. 下载server:Download MongoDB Community Server | MongoDB 我选的zip包 2. 下载shell:MongoDB Shell Download | MongoDB 我选的zip包 3. 启动server 4. 启动shell, 完成

MYSQL函数进阶详解:案例解析(第19天)

系列文章目录 一、MySQL的函数(重点) 二、MySQL的窗口函数(重点) 三、MySQL的视图(熟悉) 四、MySQL的事务(熟悉) 文章目录 系列文章目录前言一、MySQL的函数1. 聚合函数2. group_c…

Redis 多数据源自定义配置 Spring Boot 升级版

文章目录 1.前言2.git 示例地址3.需求4.代码实现4.1 application.properties 配置文件4.2 获取 application.properties 中的 redis 配置4.2.1 Environment 对象来获取自定义 redis 配置 4.3 初始化 RedisTemplate 对象,并注册到 Spring IOC 容器4.3.1 初始化方法4.…

spring boot (shiro)+ websocket测试连接不上的简单检测处理

1、用前端连接测试的demo一切正常,但是到了项目中连接不上了 一开始以为是地址错,但是换了apifox测试也是不可以。 2、考虑是shiro进行了拦截了,所以就访问不到了地址,那么就放行。 3、再次用apifox测试,成功了。 当然…

马拉松报名小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,赛事信息管理,赛事报名管理,活动商城管理,留言板管理,系统管理 微信端账号功能包括:系统首页,赛事信息&…

C++:智能指针

目录 前言 1.内存泄漏及其危害 2.内存泄漏分类: 3.如何检测内存泄漏 4.如何避免内存泄漏 一、为什么需要智能指针? 二、智能指针的使用及其原理 1.RAII 2.智能指针 3.std::auto_ptr 4.std::unique_ptr 5.std::shared_ptr 6.std::weak_ptr…

SA 注册流程

目录 1. UE开机后按照3GPP TS 38.104定义的Synchronization Raster搜索特定频点 2.UE尝试检测PSS/SSS,取得下行时钟同步,并获取小区的PCI;如果失败则转步骤1搜索下一个频点;否则继续后续步骤; 3.解析Mib,…

从0到1构建渠道运营体系:实战案例与策略指南

引言 在当今竞争激烈的市场环境中,有效的渠道运营是企业实现产品或服务快速触达目标用户、提升市场份额的关键。从零开始构建一个高效的渠道运营体系,不仅需要深思熟虑的策略规划,还需要灵活应变的实战操作。本文将结合实战案例,…

JDK新特性之协程

在 JVM 中,java 线程直接映射内核线程,因此 java 线程的创建、销毁和调度都要依赖内核态的操作(系统调用)。而协程是真正的用户线程,如上图所示很多的协程可以映射很少的几个内核线程,并且协程的创建、销毁…

gitee代码初次上传步骤

ps. 前提是已经下载安装gitee 一、在本地项目目录下空白处右击,选择“Git Bash Here” 二、初始化 git init 三、添加、提交代码(注意add与点之间的空格) git add . git commit -m 添加注释 四、连接、推送到gitee仓库 git remote add …