【C# 网络编程】基本概念

news2024/11/25 13:51:57

基本概念

OSI模型

背景:
为了统一和兼容不同计算机厂商的网络体系结构概念,国际标准化组织(ISO)在1979年提出了OSI参考模型(Open System Interconnection,)
结构
在这里插入图片描述

  1. 物理层(Physical Layer)
    要传递信息就要利用一些物理媒体,如双绞线、同轴电缆等,但具体的物理媒体并不在OSI的七层之内,有人把物理媒体当作第0层,物理层的任务就是为它的上一层提供一个物理连接,以及它们的机械、电气、功能和过程特性。如规定使用电缆和接头的类型,传送信号的电压等。在这一层,数据还没有被组织,仅作为原始的位流或电气电压处理,单位是比特。\
  2. 数据链路层(Data Link Layer)
    数据链路层负责在两个相邻结点间的线路上,无差错地传送以帧为单位的数据。每一帧包括一定数量的数据个一些必要的控制信息。和物理层相似,数据链路层负责建立、维持和释放数据链路的连接。在传送数据时,如果接收点检测到所传数据中有差错,就要通知发送方重发这一帧。
  3. 网络层(Network Layer)
    在计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网。网络层的任务就是选择合适的网间路由和交换结点,以确保数据及时传送。网络层将数据链路层提供的帧组成数据包,包中封装有网络层包头,其中含有逻辑地址信息(源站点和目的站点地址的网络地址)
  4. 传输层(TransporyLayer)
    传输层的任务是根据通信子网的特性来最佳地利用网络资源,并以可靠和经济的方式,为两个端系统(也就是源站和目的站)的会话层之间,提供建立、维护和取消传输连接的功能,并负责可靠地传输数据。在这一层,信息的传送单位是报文。
  5. 会话层(Session Layer)
    会话层也称为会晤层或对话层,在会话层及以上的高层次中数据传送的单位不再另外命名,都统称为报文。会话层不参与具体的传输,它提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制。如服务器验证用户登录便是由会话层完成的
  6. 表示层(Presentation Layer)
    表示层主要解决用户信息的语法表示问题。它将欲交换的数据从适合于某一用户的抽象语法,转换为合适于OSI系统内部使用的传送语法。即提供格式化的表示和转换数据服务。数据的压缩和解压缩,加密和解密等工作都由表示层负责。
  7. 应用层(Application Layer)
    应用层确定进程之间通信的性质以满足用户需要以及提供网络与用户应用软件之间的接口服务。

TCP/ IP模型

OSI模型提出是为了解决不同厂商、不同结构的网络产品之间互相连接时遇到的不兼容性问题。但是由于该模型的设计过于复杂,阻碍了其在计算机网络领域的实际应用。所以为了方便应用,一款由技术人员自己开发的传输控制协议/网际协议(Transfer Control Protocol/Internet Protocol, TCP/IP)模型应运而生。TCP/IP协议是目前因特网范围内运行的唯一一种协议。
在这里插入图片描述

OSI参考模型与TCP/IP模型

TCP/IP 包括两个协议,即传输控制协议(Transfer Control Protocol, TCP)和网络协议(Internet Protocol,IP),但实际上TCP/IP 是一系列协议的代名词,它包括上百个各种功能的协议,如:地址解析协议(ARP)、Internet控制消息协议(ICMP)、文件传输协议等,而TCP协议和IP协议只是保证数据完整传输的两个重要协议,所以也常称为TCP/IP协议族。该协议族分为四个层次:链路层、网络层、传输层、和应用层。
在这里插入图片描述

TCP/IP工作原理

由上述OSI参考模型可知,在因特网上源主机的协议层与目的主机的同层提供的服务实现对话。TCP/IP协议族模型也是按照这一原则来工作的。它们之间的对话实际上是在源主机上从上到下传递然后穿越网络到达目的主机后再从下到上到达相应层。
在这里插入图片描述

  1. 在信源上,利用应用层协议(HTTP)将需传输的请求数据流传送给信源上的传输层(TCP)。
  2. 信源上的传输层将应用层的请求数据流截成若干分组,并加上TCP首部形成TCP段,送交信源上的网络层(IP)。
  3. 信源的网络层给TCP段加上包括源、目的主机IP地址的IP首部,生成一个IP数据报,并将IP数据报送交信源的链路层。
  4. 信源的链路层在其MAC帧的数据部分装上IP数据报,再加上源、目的主机的MAC地址和MAC帧头,并根据其目的MAC地址,将MAC帧发往信宿或中间路由器,例如路由器R。
  5. 路由器是一个具有多个接口的网络互连设备,可以把数据从一个网络转发到另一个网络。当数据传输到路由器后,路由器将根据数据包中的目的地址进行传输路径的选择,并根据所选择的传输路径进行数据传输。通常,路由器只处理链路层和网络层的数据。在本实例中,路由器接收客户机A发送过来的IP数据并将该数据报转发给服务器B。
  6. 当数据传输到信宿,链路层将MAC帧的帧头去掉,并将IP数据送交信宿的网络层。
  7. 信宿的网络层检查IP数据报首部,假如首部在校验和与计算结果不一致,则丢弃该IP数据报;若校验和计算结果一致,则去掉IP首部,将TCP段送交信宿的传输层。
  8. 信宿的传输层检查顺序号,判断是否正确的TCP分组,然后检查TCP首部数据。若正确,则向信源发确认信息;若不正确或丢包,则向信源要求重发信息。
  9. 信宿的传输层去掉TCP首部,将排好顺序大额分组组成应用数据流送给信宿上相应程序。这样信宿接收到的来自信源的字节流,就像是直接接收到来自信源的字节流一样。
    在这里插入图片描述

套接字

在这里插入图片描述

简介

套接字就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口

类型

TCP/IP的Socket提供了3种类型的套接字

  1. 流式套接字(SOCK_STREAM)
    提供面向连接、可靠的数据传输服务,数据无差错、无重复的发送,且按发送顺序接收。内设流量控制,避免数据流超限;数据被看作是字节流,无长度限制。文件传输协议(FTP)即使用流式套接字。
  2. 数据报套接字(SOCK_DGRAM)
    提供无连接服务。数据包以独立包形式发送,不提供无差错保证,数据可能丢失或重复,并且接收顺序混乱。网络文件系统(NFS)使用数据报式套接字。
  3. 原始套接字(sock_raw)
    该接口允许对较低层协议,如IP、ICMP直接访问。常用于检验新的协议实现或访问现有服务中配置的新设备

工作原理

在这里插入图片描述
在这里插入图片描述
套接字可以像Stream流一样被视为一个数据通道,这个通道架设在客户端应用程序和服务器端之间,数据的读取(接收)和写入(发送)均针对这个通道来进行。因此要通过网络进行通信,就至少需要一对套接字,其中一个运行于客户端,称之为客户端套接字(ClientSocket),另一个运行于服务器端,称之为服务器端套接字(ServerSocket)。 当创建了这两个套接字对象之后,将这个套接字连接起来就可以实现数据传输了。

.NET中的Socket类

针对Socket编程,.NET框架的System.NET.Sockets命名空间为需要严密控制网络访问的开发人员提供了WinSock接口的托管实现。其中Socket类是WinSock32 API提供的套接字服务的托管代码版本,为实现网络编程提供了大量的方法。

//addressFamily用来指定网络类型
//SocketType用来指定套接字类型(即连接方式)
//ProtocolType用来指定网络协议
public Socket(AddressFamily addressFamily, SocketType socketType,ProtocolType protocolType)

addrressFamily,socketType和protocolType均为枚举类型。三者并不能任意组合,有特定的组合。如常规的IP通信网络,AddressFamily.InterNetWork,此时可用的SocketType和ProtocolType如下表所示

SocketTypeProtocolTyp描述
StreamTcp面向连接套接字
DgramUdp无连接套接字
RawIcmp网际消息控制协议套接字
RawRaw基础传输协议套接字

Socket类的常用方法

方法描述
Bing(EndPoint address)在服务器端,当一个套接字被创建后,需要将它绑定到系统的一个特定地址。可以使用Bind()方法来完成,其参数为一个IPEndPoint实例(包含IP地址和端口信息)
Listen(int con_num)服务器端的套接字完成了与地址的绑定后,就使用该方法监听客户发送的连接请求。con_num为整数值,该值表示服务器最大连接数目,超过这个数目的连接会被拒绝。con_num数值的设定会影响到服务器的运行,因为每个连接的接收都要使用TCP缓冲区,如果设置过大,收发数据的缓存数据将减少。
Accept()在服务器进入监听状态时,如有从客户端发来的连接请求,服务器将使用Accept()方法来接受连接请求。Accept()返回一个新的套接字,该套接字包含所建立的连接的信息并负责处理本连接的所有通信。而服务器刚开始创建的套接字仍然负责监听,并在需要时调用Accept()接受新的连接请求。
Send()当服务器接受了来自客户端的连接请求后,服务器和客户端双方就可以利用Send()方法来发送数据。Send有四种重载方法,
Receive()当服务器接收了来自客户端的连接请求后,服务器和客户段端双方就可以利用Receive()方法来接收数据。Receive()也有四种重载方法。
Connect(EndPoint remoteEP)同服务端一样,客户端的套接字建立后也必须与一个地址绑定。在客户端使用Connect()方法实现绑定,
Shutdown(SocketShutdown how)当客户端和服务器的通信结束时,必须关闭相应的套接字实例,可以使用Shutdown()方法来禁止该套接子上的发送和接收,shutdown()方法有一个枚举类型的参数,如SocketShutdown.Send表示禁用发送套接字,如SocketShutdown.Receive表示禁用接收套接字吗,SocketShutdown.Both表示禁用发送和接收的套接字。
close()禁止套接字上的发送和接收之后,使用Close()方法关闭套接字连接并释放所有相关资源。这样套接字会在系统内部缓冲区处理完毕后关闭套接字并释放资源。

Send()、Receive()重载方法

方法说明
Send(byte[] data)将数据发送到连接的Socket
Send(byte[] date,SocketFlang sf)使用指定的SocketFlags将数据发送到连接的Socket
Send(byte[] data,int size,SocketFlags sf)使用指定的SocketFlags将指定字节数的数据发送到已连接的Socket
Send(byte[] data,int offset, int size,SocketFlags sf)使用指定的SocketFlags,将指定字节数的数据发送到已连接的Socket(从指定的偏移量开始)
Receive(byte[] data)从绑定的套接字接收数据,将数据存入接收缓冲区
Receive(byte[] data,SocketFlags sf)使用指定的SocketFlags,从绑定的套接字接收数据,将数据存入接收缓冲区
Receive(byte[] data,int size,SocketFlags sf)使用指定的SocketFlags,从绑定的套接字接收指定字节数的数据,将数据存入接收缓冲区

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java反序列化之CommonCollections6利⽤链的学习

一、源起 前文学习CC1链和URLDNS链的学习,同时学习过程中知道cc1受jdk版本的限制,故而进一步分析cc6链的利用过程,这个利用链不受jdk版本的限制,只要commons collections小于等于3.2.1,都存在这个漏洞。 ps&#xff1…

Flink 介绍(特性、概念、故障容错、运维部署、应用场景)

概述 特性 概念 数据流 状态 时间 savepoint 故障容错 运维部署 部署应用到任意地方 Flink能够更方便地升级、迁移、暂停、恢复应用服务 监控和控制应用服务 运行任意规模应用 应用场景 事件驱动型应用 什么是事件驱动型应用? 事件驱动型应用的优势 Flink如何…

对接外卖霸王餐api要遵循哪些步骤?

对接外卖霸王餐API接口的步骤通常包括以下几个关键环节: 选择服务提供商:根据需求、预算、服务内容、接口稳定性、覆盖范围(是否支持全国多个城市、是否支持主要外卖平台如美团和饿了么等)、技术支持等因素选择合适的霸王餐API服…

实现一个时钟

头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QPainter>//画家类 #include<QTime>//时间类 #include<QTimer>//定时器类QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget …

vue3.5系列之响应式props解构的几点技巧对比

在最新的版本3.5x中&#xff0c;对props的能力也进行了加强。下面&#xff0c;我们具体看下有哪些变化&#xff0c;给我们带来的新的体验&#xff01; 体验一 3.5之前解构props的效果 // 子组件 <template><div><h1>响应式props</h1><p>{{ co…

【储能优化】使用优化的微电网能源管理系统 (EMS)

摘要 本文介绍了一种基于优化的微电网能源管理系统&#xff08;EMS&#xff09;&#xff0c;通过储能优化实现电网、光伏发电、以及储能设备之间的智能调度。系统旨在降低能源成本、减少碳排放&#xff0c;并提高能源利用效率。利用该EMS系统&#xff0c;电网用户能够在满足负…

使用docker、编写dockerfile、httpd镜像,并启动镜像,创建httpd主页和分页。(2)

1.准备一台机子&#xff0c;准备源&#xff0c;下载docker-ce vi /etc/yum.repo.d/Centos-7.repo 加入以下内容[base] nameCentOS-$releasever - Base - mirrors.aliyun.com failovermethodpriority baseurlhttp://mirrors.aliyun.com/centos/$releasever/os/$basearch/http:/…

Midjourney中文版:创意无限,艺术之旅由此启程

Midjourney中文版——一个将你的文字想象转化为视觉艺术的神奇平台。无需繁琐的绘画技巧&#xff0c;只需简单的文字描述&#xff0c;你就能开启一场前所未有的艺术之旅。 Midjourney AI超强绘画 (原生态系统&#xff09;用户端&#xff1a;Ai Loadinghttps://www.mjdiscord.c…

图纸加密软件有哪些?2024好用的10款图纸加密软件推荐!

在保护企业设计图纸和技术文档的安全性方面&#xff0c;选择合适的加密软件至关重要。2024年&#xff0c;有许多优秀的图纸加密软件可供选择。以下是我们推荐的10款图纸加密软件&#xff0c;助您有效保障重要文件的安全。 1. Ping32图纸加密软件 Ping32图纸加密软件 是一款专业…

Linux环境下配置git

总共分为两个步骤&#xff1a;安装 配置&#xff0c;最终实现通过Git拉取代码。 1.安装Git yum install git## 查看版本 git --version得到返回信息 “git version XX.XX.XX.XX” 表明Git已经安装成功。 2.配置Git 分为两个步骤&#xff1a;初始化Git并生成授权证书 代码…

<OS 有关> Docker.Desktop - Unexpected WSL error #14030 不能启动, 问题已经解决 fixed

Windows Docker.Desktop 想用时报错&#xff1a; “deploying WSL2 distributions ensuring main distro is deployed: deploying "docker-desktop": importing WSL distro "WSL2 is not supported with your current machine configuration. Please enable th…

计组-浮点数运算

计算机中的浮点数&#xff0c;就是我们数学中的 科学计数法 那么2个浮点数相加&#xff0c;以科学计数法的形式&#xff0c;来怎么计算 其对应形式如下 不能直接尾数运算是因为两个数的指数都不一样 所以第一步是对阶&#xff0c;就是让两个数的指数变成一样的 指数一样后&am…

在 EC2 AWS 中开启防火墙后将自己锁定在 SSH 之外

在搭建ftp时&#xff0c;开启了系统防火墙的几个端口&#xff0c;并且设置了防火墙开机自启。当设置好之后&#xff0c;关闭了putty&#xff0c;再次连接SSH时&#xff0c;发现连接错误。仔细一想&#xff0c;防火墙没有开启22端口&#xff0c;这不嘎了么&#xff0c;自己把自己…

C++基础面试题 | 什么是内存对齐?为什么需要内存对齐?

文章目录 回答重点扩展知识 回答重点 内存对齐是指计算机在访问内存时&#xff0c;会根据一定规则将数据存储在合适的起始地址上&#xff0c;通常是数据大小的整数倍。这样做可以提升CPU的访问效率&#xff0c;特别是在读取和写入数据时。 为什么要内存对齐&#xff1f;主要有…

如何获取商品详情:发送HTTP请求的指南

一、了解API接口 开放平台提供了一系列的API接口&#xff0c;允许开发者获取商品的详细信息。这些信息包括商品标题、价格、图片、销量、评价等。在使用这些API之前&#xff0c;你需要在开放平台注册账号并获取相应的API密钥。 二、选择合适的API接口 对于获取商品详情&#…

Java利用itextpdf实现pdf文件生成

前言 最近公司让写一个数据页面生成pdf的功能&#xff0c;找了一些市面代码感觉都太麻烦&#xff0c;就自己综合性整合了一个便捷的工具类&#xff0c;开发只需简单组装数据直接调用即可快速生成pdf文件。望大家一起学习&#xff01;&#xff01;&#xff01; 代码获取方式&am…

RTP H264封包和解包分析

基础理论 RTSP RTP RTCP SDP基础知识-CSDN博客 RTP协议回顾以及网络知识补充 ​ ​ 举例&#xff1a;在客户端向服务器发送 1MB 数据的过程中&#xff0c;涉及到多个网络层次的概念&#xff0c;包括数据切割、最大传输单元&#xff08;MTU&#xff09;、最大段大小&#xf…

项目管理——Gantt图与Pert图

目录 前言相关知识点相关题目 前言 本文是在关于软考中软件设计师中的项目管理中的知识点&#xff0c;关于Gantt图与Pert图 相关知识点 甘特&#xff08;Gantt&#xff09;图 优点 可以清晰的描述每个任务从何时开始的&#xff0c;到何时结束&#xff0c;任务的进程情况以及…

服务端测试开发必备的技能:Mock测试!

什么是mock测试 Mock 测试就是在测试活动中&#xff0c;对于某些不容易构造或者不容易获取的数据/场景&#xff0c;用一个Mock对象来创建以便测试的测试方法。 Mock测试常见场景 无法控制第三方系统接口的返回&#xff0c;返回的数据不满足要求 依赖的接口还未开发完成&#…

分治算法(4)_快速选择_库存管理III_面试题

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 分治算法(4)_快速选择_库存管理III_面试题 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f…