网络套接字基本概念

news2024/10/6 21:24:00

在这里插入图片描述

文章目录

  • 1. 认识IP地址
  • 2. 认识端口号
    • 2.1 理解 "端口号" 和 "进程ID"
    • 2.2 理解源端口号和目的端口号
  • 3. 认识TCP协议和UDP协议
  • 4. 网络字节序
  • 5. sockaddr结构

1. 认识IP地址

IP协议有两个版本,IPv4和IPv6。没有特殊说明的,默认都是指IPv4
IP地址是在IP协议中, 用来标识网络中不同主机的地址。对于IPv4来说,IP地址是一个4字节,32位的整数。我们通常也使用 “点分十进制” 的字符串表示IP地址, 例如 192.168.0.1,用点分割的每一个数字表示一个字节,范围是0 - 255。

2. 认识端口号

我们光有IP地址就可以完成通信了嘛? 想象一下发qq消息的例子,有了IP地址能够把消息发送到对方的机器上,但是还需要有一个其它的标识来区分出,这个数据要给哪个程序进行解析
实际上,在进行通信的时候,不仅仅要考虑到两台主机间的交互数据,本质上,交互数据的时候,是用户和用户在进行交互。用户的身份通常是用程序来体现的。而程序一定在运行中,那么就是进程。

主机间通信的本质是:在各自的主机上,两个进程在互相交互数据。IP地址可以完成主机和主机的通信,而主机上各自的通信进程,才是发送和接受数据的一方

那么IP是确保主机的唯一性,端口号(port)是确保该主机上进程的唯一性IP+端口号=标识互联网中唯一的一个进程。也被叫做socket。所以,网络通信的本质就是进程间的通信

1.端口号(port)是传输层协议的内容,是一个2字节16位的整数。
2.端口号用来标识一个进程,告诉操作系统,当前的这个数据要交给哪一个进程来处理。
3.IP地址 + 端口号能够标识网络上的某一台主机的某一个进程。
4.一个端口号只能被一个进程占用

2.1 理解 “端口号” 和 “进程ID”

我们之前在学习pid 表示唯一一个进程。此处我们的端口号也是唯一表示一个进程。那么这两者之间是怎样的关系?
1.如果我们用进程ID来网络通信,那么网络和进程管理就强耦合了。
2.可能会有些进程根本不需要通信,有端口号的说明是网络进程,没有的就不考虑网络功能。就像一名学生的学号和身份证号,学号可以代表你是一名学生并且是一个人,而身份证号不能代表你是一名学生。

另外,一个进程可以绑定多个端口号,但是一个端口号不能被多个进程绑定

2.2 理解源端口号和目的端口号

传输层协议(TCP和UDP)的数据段中有两个端口号,分别叫做源端口号和目的端口号。就是在描述 “数据是谁发的, 要发给谁”。

3. 认识TCP协议和UDP协议

此处我们先对TCP(传输控制协议)和UDP(用户数据报协议)有一个直观的认识,后面再详细讨论。
TCP:1.传输层协议,2.有连接,3.可靠传输,4.面向字节流。
UDP:1.传输层协议,2.无连接,3.不可靠传输,4.面向数据报

这里可靠传输和不可靠传输是什么意思呢
可靠传输是你发出的信息,可以确信这些数据被接受方收到。一般来说,可靠是通过确认和重传机制来实现的。但是需要的成本也是很高的。不可靠传输就是发出的数据不能保证接受方能够收到,这样的成本不高。

4. 网络字节序

我们已经知道:内存中的多字节数据相对于内存地址有大端和小端之分。以前我们在自己的主机里感觉没什么区别,但是在网络通信的过程中。如果我们发送方是小端,接受方是大端,那么在接受信息时,我们该怎么去判断对方是大端,还是小端呢?
网络数据流同样有大端小端之分,互联网上规定:网络中默认是大端

1.发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出
2.接收主机把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从低到高的顺序保存
因此,网络数据流的地址应这样规定:先发出的数据是低地址,后发出的数据是高地址。
3.TCP/IP协议规定,网络数据流应采用大端字节序,即低地址高字节
不管这台主机是大端机还是小端机,都会按照这个TCP/IP规定的网络字节序来发送/接收数据
4.如果当前发送主机是小端,就需要先将数据转成大端。否则就忽略,直接发送即可

为使网络程序具有可移植性,使同样的C代码在大端和小端计算机上编译后都能正常运行,可以调用以下库函数做网络字节序和主机字节序的转换。
在这里插入图片描述
h表示host,n表示network,l表示32位长整数,s表示16位短整数
第一种是将主机字节序转换成网络字节序。
第二种是将网络字节序转换成主机字节序。
如果主机是小端字节序,这些函数将参数做相应的大小端转换然后返回。如果主机是大端字节序,这些函数不做转换,将参数原封不动地返回。

5. sockaddr结构

socket API是一层抽象的网络编程接口,适用于各种底层网络协议,如IPv4、IPv6。然而,各种网络协议的地址格式并不相同。
这个套接字不仅要支持网络通信,也需要支持本地通信。网络通信默认叫做套接字,本地通信叫做域间套接字。
在这里插入图片描述
sockaddr_in这个结构就是网络通信,sockaddr_un这个结构就是本地通信。那么我们想既要包含网络通信,又要包含本地通信,设计socket API接口时就不能单单设计某一个,要把二者结合起来。就是sockaddr这个结构。不论传的是sockaddr_in还是sockaddr_un它们的前16位都是地址类型,那么我们先判断sockaddr的前16位是啥?然后再去强转成sockaddr_in或sockaddr_un。

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

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

相关文章

第五章 作业(149A)【计算机系统结构】

第五章 作业【计算机系统结构】 前言推荐第五章 作业148 补充910 最后 前言 2023-6-24 10:43:46 以下内容源自《【计算机系统结构】》 仅供学习交流使用 推荐 第三章 作业(7BF)【计算机系统结构】 答案参考: https://www.docin.com/p-8…

HTML 教程:学习如何构建网页||HTML 简介

HTML 简介 HTML 简介 现在您可以通过如下的一个 HTML 实例来建立一个简单的 HTML 页面&#xff0c;以此来简单了解一下 HTML 的结构。 HTML 实例 <!DOCTYPE html> <html> <head> <title>页面标题(w3cschool.cn)</title> </head> <…

中国电子学会2023年05月份青少年软件编程C++等级考试试卷四级真题(含答案)

1.怪盗基德的滑翔翼 怪盗基德是一个充满传奇色彩的怪盗&#xff0c;专门以珠宝为目标的超级盗窃犯。而他最为突出的地方&#xff0c;就是他每次都能逃脱中村警部的重重围堵&#xff0c;而这也很大程度上是多亏了他随身携带的便于操作的滑翔翼。 有一天&#xff0c;怪盗基德像…

混频器【Multisim】【高频电子线路】

目录 一、实验目的与要求 二、实验仪器 三、实验内容与测试结果 1、测试输入输出波形&#xff0c;说明两者之间的关系 2、测试输出信号的频谱(傅里叶分析法) 3、将其中一个二极管反接&#xff0c;测试输出波形&#xff0c;并解释原因&#xff1b;将两个二极管全部反接&am…

PID相关参数讲解:1、比例系数Kp与静态误差

PID的结构与公式 来研究静态误差的同学&#xff0c;应该是对PID的原理有一定理解了&#xff0c;简单的概念也不用过多重复。 比例控制时PID控制中最简单的一个&#xff0c;很多能用代码编写PID代码的同学&#xff0c;也不一定理解这个比例系数Kp的意义&#xff0c;以及比例控制…

C++进阶—多态

目录 0. 前言 1. 多态的概念 1.1 概念 2. 多态的定义及实现 2.1多态的构成条件 2.2 虚函数 2.3虚函数的重写 2.4 C11 override 和 final 3. 抽象类 3.1 概念 3.2 接口继承和实现继承 4.多态的原理 4.1虚函数表 4.2 变态选择题分析多态调用 4.3 多态的原理 4.4 动…

透过小说中的境界划分,看看你的能力处于哪个水平

文章目录 1. 写在前面2. 散修3. 练气期4. 筑基期5. 结丹期6. 元婴期7. 化神期8. 练虚期 1. 写在前面 当我们某天开始走出校园&#xff0c;踏入社会的时候&#xff0c;是否也会感到一丝恐惧与焦虑&#xff1f;当我们各自奔走加入到江湖大大小小的门派中&#xff0c;为了企业与老…

EL标签-给JSP减负

https://blog.csdn.net/weixin_42259823/article/details/85945149 安装使用 1. 通过命令行创建maven项目 2. 安装jstl包 <dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version> </depen…

仙境传说RO:服务器外网架设登陆教程

仙境传说RO&#xff1a;服务器外网架设登陆教程 大家好我是艾西&#xff0c;今天跟大家说一下自己编译的仙境传说RO服务端怎么开启外网让小伙伴和你一起玩。 目前开放的现成端有以下版本&#xff1a; 仙境传说ro守护永恒的爱 仙境传说ro爱如初见 仙境传说ro黑色派对 仙境…

docker-compose把微服务部署到centos7

前言 这里主要记录以下微服务使用docker、docker-compose部署遇到的一些问题&#xff0c;大佬可以绕道去看看自动化集成这篇文章 部署之前你需要准备一些内容 微服务 这里feign-api是用来做服务之间相互调用的&#xff0c;单独抽离成了一个模块&#xff0c;gateway是服务网关&…

中国电子学会2023年05月份青少年软件编程C++等级考试试卷三级真题(含答案)

1.找和为K的两个元素 在一个长度为n(n < 1000)的整数序列中&#xff0c;判断是否存在某两个元素之和为k。 【输入】 第一行输入序列的长度n和k&#xff0c;用空格分开。 第二行输入序列中的n个整数&#xff0c;用空格分开。 【输出】 如果存在某两个元素的和为k&#xff0c…

CentOs中文件权限命令

文件权限&#xff1a; ls -l命令查看文件详情&#xff0c;前十位就是文件的类型和权限 第一位&#xff1a;类型&#xff1a; - 普通文件 d 目录 l 链接文件&#xff08;快捷方式&#xff09;link 2~4位&#xff1a;所有者的权限 5~7位&#xff1a;所有者所在组其它用户的权限 …

AI绘图-StableDiffusion安装

AI绘图-StableDiffusion安装 安装Python 1、去官网 https://www.python.org/downloads/ 下载Python3.10.10版本&#xff0c;网上建议下载3.10.6版本。 2、安装Python,打开安装界面&#xff0c;注意把Add Python to PATH选项勾上&#xff0c;然后选择自定义安装 3、点击WinR…

【数据结构与算法】2、链表(简单模拟 Java 中的 LinkedList 集合,反转链表面试题)

目录 一、链表基本概念和基本代码实现二、链表、动态数组整合&#xff08;面向接口编程&#xff09;三、clear()四、add(int index, E element)(1) 找到 index 位置的节点(2) get(int index) 和 set(int index, E element)(3) add(int index, E element) 五、remove(int index)…

基于Java+Swing+Socket实现中国象棋-网络版

基于JavaSwingSocket实现中国象棋-网络版 一、系统介绍二、功能展示1.系统登陆2.选择黑色方进行对局3.整体页面4、保存棋谱5、认输 三、其他系统四、获取源码 前言 中国象棋是起源于中国的一种棋&#xff0c;属于二人对抗性游戏的一种&#xff0c;在中国有着悠久的历史。由于用…

员工管理业务开发 -- 手把手教你做ssm+springboot入门后端项目黑马程序员瑞吉外卖(三)

文章目录 前言六、员工管理业务开发1.开发功能预览2.新增员工功能1&#xff09;需求分析2&#xff09;数据模型&#xff08;表&#xff09;3&#xff09;代码开发4&#xff09;功能测试5&#xff09;编写全局异常处理器 3.员工信息分页查询1&#xff09;需求分析2&#xff09;代…

VS Code的下载安装,及其简单使用

目录 前言 一.下载 二.安装 三.VS Code的插件安装 &#x1f496;插件正常安装 &#x1f496;插件安装异常 四.VS Code的配置 五.VS Code的基本使用 总结 &#x1f381;个人主页&#xff1a;tq02的博客_CSDN博客-C语言,Java领域博主 &#x1f3a5; 本文由 tq02 原创&#…

Redis 分布式锁实现

Redis 分布式锁 分布式锁&#xff1a;满足分布式系统或集群模式下多进程可见并且互斥的锁 特点&#xff1a; 多线程可见互斥高可用高性能&#xff08;高并发&#xff09;安全性、可重入性、重试机制、锁超时自动续期等 … 加锁之后&#xff0c;对整个分布式集群都有效 基于…

多线程之常用线程安全类型分析

写在前面 本文一起看下在日常工作中我们经常用到的线程安全的数据类型&#xff0c;以及一些经验总结。 1&#xff1a;常用线程安全数据类型 1.1&#xff1a;jdk集合数据类型 jdk的集合数据类型分为两类&#xff0c;一种是线性数据结构&#xff0c;另外一种是字典结构&#…

【系统架构】第五章-软件工程基础知识(一)

软考-系统架构设计师知识点提炼-系统架构设计师教程&#xff08;第2版&#xff09; 软件工程 一、软件过程模型 1、瀑布模型 特点&#xff1a;前一个阶段工作的输出结果&#xff0c;是后一个阶段工作的输入 缺点&#xff1a; 软件需求的完整性、正确性等很难确定&#xff0c…