DAY2 NETWORK

①    什么是IP地址

 IP地址:是计算机在网络中唯一的标识,由两部分组成

 分别是表示网络区域的网络号,和该网络下的主机编号

 网络号:确定计算机所从属于哪个局域网络

 主机号:计算机在该局域网络下的一个编号

 ② IP的划分,有几类IP地址

 五类IP地址

 A类IP地址 1.0.0.0——————255.255.255.255   已经保留不在供给

 B类网络   128.0.0.0————191.255.255.255   名地址,网管中心

 C类网络   192.0.0.0————223.255.255.255   校园网或者企业网,家庭网

 D类网络   224.0.0.0————239.255.255.255   组播IP

 E类网络   240.0.0.0————255.255.255.255   保留或实验室使用

 ③  IP地址中200.0.0.0这个IP属于哪一类网络?

 C类网络,C类网络从192.0.0.0——————223.255.255.255

 ④  什么是端口号,端口号的作用?

   主机号是为了区分同一主机上的多个进程

   使用端口号来进行处理。端口号是一个无符号的2字节的整数

   取值范围为[0 -65535] 2^16-1

   其中[0 ——1023] 号端口号编程是不适用,已经被占用

   可以使用的是[1024 --49151]

   [49152 --65535]号端口号是临时端口号,这部分是客户端运行时动态选择的

⑤  对字节序的理解

 字节序引入主要是因为不同计算机架构选择了不同的存储方式

    主机字节序,存储多字节整数,主机字节序分为大端存储和小端存储

网络字节序,存储多字节整数,是大端存储

通过函数可以实现主机字节序和网络字节序之间的相互转换。

主机字节序决定了数据在主机内存中的排列方式,

对于主机内部的数据处理至关重要;而网络字节序

则确保了不同系统之间的通信能够正常进行,

通过统一的字节序规则,实现了数据的正确传输和解析

⑥   7层网络体系结构

     应用层 会话层 表示层 传输层

 网络层 数据链路层 物理层

 ⑦   TCP和UDP 通信的区别

        相同:同属于传输层的协议TCP:----->稳定   传输控制协议

TCP的优点

1》提供面向连接的,可靠的数据传输协议

2>> 传输过程中,数据无误,数据无丢失,无失去顺序,数据无重复

3>> 每个数据都需要数据应答包,若没有应答,会一直重复上面的包发送直到正确为止

缺点:

4>>数据传输效率地低,耗费资源多

5>>缺点:数据的收发不是同步的,

(1)为了提高效率, TCP会将多个较小,并且发送间隔短的数据包粘成一个数据包发送。

(2)粘包算法称之为 Nagle算法

6>>TCP的使用场景  对传输质量要求高,以及传输达礼郎数据的通信,在需要可靠通信的场合 (如账号登录,大型文件下载)

UDP  ----->快速  用户数据报协议

优点:1 传输速度快,实时性高

     2 收发是同步的,不需要粘包

缺点: 3 面向无连接的,不保证数据可靠性,尽最大能力传输,

4传输过程中不保证数据的丢失,重复,失序等现象

5限制每次传输数据的大小,超出部分直接忽略删除

6》》适用场景:广播,通讯软件等

⑧   TCP通信过程中,服务器端实现的流程

  <1>socket 函数创建一个用于连接的套接字文件描述符

  <2>bind 函数绑定IP和端口号

  <3>listen函数将套接字设置为被动监听模式,准备接收客户请求

TCP服务端

 int main(int argc, const char *argv[]){//1 为通信创建一个端点int sfd=socket(AF_INET,SOCK_STREAM,0);//参数1 说明使用的是IPv4网络//参数2 说明使用的是TCP面向连接的通讯方式//参数3,由于参数2已经指定通信方式,直接为0if(sfd ==-1){perror("socket error");return -1;}printf("socket success sfd=%d\n",sfd);  // 3 (0 stdin ,stdout 1,stderr 2)// 2  绑定IP地址和端口号// 2.1  准备地址信息结构体struct sockaddr_in sin;sin.sin_family =AF_INET;sin.sin_port =htons(SER_PORT);sin.sin_addr.s_addr =inet_addr(SER_IP);//嵌入一个小的结构体//绑定工作if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))){perror("bind error");return -1;}printf("bind success\n");//  3  将套接字设置成被动监听状态;//if(listen(sfd,128)==-1){perror("listen error");return -1;}printf("listen success\n");//  4  阻塞等待客户端的连接//  4.1 定义用于接受客户端信息的容器struct sockaddr_in cin;socklen_t addrlen = sizeof(cin);int newfd =accept(sfd,(struct sockaddr*)&cin,&addrlen);if(newfd ==-1){perror("accept error");return -1;}printf("accept success\n");printf("[%s %d]发送来连接请求\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));// 5 与客户端进行相互通信char rbuf[128]={};   //用于读取消息内容的容器while(1){// 清空容器bzero(rbuf,sizeof(rbuf));//从套接字读取数据int res =read(newfd,rbuf,sizeof(rbuf));if(res == 0){printf("客户端已经下线\n");break ;}//将读取到的消息展示出来printf("[%s %d]:%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),rbuf );//将收到的消息处理一下,回复给客户端strcat(rbuf,"OK");//将消息发送给客户端write(newfd,rbuf,strlen(rbuf));printf("发送成功\n");}//  6  关闭套接字close(sfd);return 0;}

TCP客户端

​
// TCP 通信客户端实现    server-side 服务端  client-side 客户端   端口号 port number  int main(int argc, const char *argv[])
{//1 创建用于通信的套接字文件描述符int cfd=socket(AF_INET,SOCK_STREAM,0);if(cfd == -1){perror("socket error");return -1;}printf("socket success cfd =%d\n",cfd);//2   绑定IP地址和端口      对于客户端可以不必要绑定IP地址和端口 //2.1 填充客户端地址信息结构体struct sockaddr_in cin;cin.sin_family =AF_INET;cin.sin_port =htons(CLI_PORT);cin.sin_addr.s_addr =(inet_addr(CLI_IP));//2.2  绑定if(bind(cfd,(struct sockaddr*)&cin,sizeof(cin))== -1){perror("bind error");return -1;}printf("bind success\n");// 3.1 准备对端(对面)地址信息结构体struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port =htons(SER_PORT);sin.sin_addr.s_addr =inet_addr(SER_IP);//3.2连接服务器if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin)) == -1){                                                                                                          perror("connect error");return -1;}printf("connect success\n");//4 数据收发//char wbuf[128]="";char rbuf[128]="";while(1){//从终端上获取要发送的数据fgets(wbuf,sizeof(wbuf),stdin);wbuf[strlen(wbuf)-1]=0;printf("发送成功\n");//接收服务器发来的消息//bzero(rbuf,sizeof(rbuf));printf("服务器发来的消息为:%s\n",rbuf);}//关闭套接字close(cfd);return 0;
}​

UDP服务端

 #include <myheader.h>#define SER_PORT  8888#define SER_IP  "192.168.230.128"int main(int argc, const char *argv[]){/*  ****server-side ****  *///创建用于通信的套接字文件描述符  sfd -->service file descriptor  服务文件描述符int sfd =socket(AF_INET,SOCK_DGRAM,0);if(sfd == -1){perror("socket error");return -1;}printf("sfd=%d\n",sfd);//绑定IP地址和端口号// 2.1 填充地址信息结构体struct sockaddr_in sin;sin.sin_family =AF_INET;sin.sin_port =htons(SER_PORT);sin.sin_addr.s_addr =inet_addr(SER_IP);// 2.2  绑定if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin) )== -1){perror("bind erroe");return -1;}// 3 数据收发char rbuf[128]="";//准备接收对端的地址信息struct sockaddr_in cin;socklen_t addrlen =sizeof(cin);while(1){//清空容器bzero (rbuf,sizeof(rbuf));//读取数据//recvfrom(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&cin,&addrlen);printf("收到的消息为:%s\n",rbuf);//将收到的消息加上一个OKK回复过去strcat(rbuf,"OKK");if(sendto (sfd,rbuf,strlen(rbuf),0,(struct sockaddr*)&cin,sizeof(cin) == -1)){perror("sendto error");return -1;}printf("发送成功\n");}close(sfd);return 0;}                                                                                                               

UDP客户端

int main(int argc, const char *argv[])
{//  ①  创建用于通信的套接字文件描述符int cfd =socket(AF_INET,SOCK_DGRAM,0);if(cfd == -1){perror("socket error");return -1;}// ②  绑定IP地址和端口号// 2.1 填充地址信息结构体struct sockaddr_in  sin;sin.sin_family =AF_INET;sin.sin_port =htons(SER_PORT);sin.sin_addr.s_addr =inet_addr(SER_IP);//2.2 绑定if(bind(cfd,(struct sockaddr*)&sin,sizeof(sin)) == -1){perror("bind error");return -1;}printf("bind success\n");//③  数据收发char wbuf[128] ="";//填充服务器的地址信息结构体                                                         struct sockaddr_in sin;sin.sin_family =AF_INET;sin.sin_port =htons(SER_PORT);sin.sin_addr.s_addr =inet_addr(SER_IP);char rbuf[128] ="";while(1){//清空容器bzero(wbuf,sizeof(wbuf));bzero(rbuf,sizeof(rbuf));//从终端获取信息fgets(wbuf,sizeof(wbuf),stdin);wbuf[strlen(wbuf)-1]=0;//将消息发送给服务器sendto(cfd,rbuf,sizeof(rbuf),0,NULL,NULL);printf("接收到的服务器消息为:%s\n",rbuf);//④  关闭套接字close(cfd);}return 0;
}

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

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

相关文章

使用Flask ORM进行数据库操作的技术指南

文章目录 安装Flask SQLAlchemy配置数据库连接创建模型类数据库操作插入数据查询数据更新数据删除数据 总结 Flask是一个轻量级的Python Web框架&#xff0c;其灵活性和易用性使其成为开发人员喜爱的选择。而ORM&#xff08;对象关系映射&#xff09;则是一种将数据库中的表与面…

LeetCode题练习与总结:二叉树的最大深度--104

一、题目描述 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3示例 2&#xff1a; 输入&#xff1a;root […

ESP32开发环境搭建Windows VSCode集成Espressif IDF插件开发环境搭建 IDF_V5.2.1

一、安装Visual Studio Code 下载地址&#xff1a;Download Visual Studio Code - Mac, Linux, Windows 打开上方链接&#xff0c;选择页面中的Windows版本&#xff0c;单击下载 将下载好的VSCodeUserSetup-x64-1.89.1.exe。单击右键&#xff0c;选择以管理员身份运行&#xf…

雪花算法 代码

/*** author lwh* date 2023/9/5* description 批量插入&#xff0c;手动设置**/ public class IdWorker {//因为二进制里第一个 bit 为如果是 1&#xff0c;那么都是负数&#xff0c;但是我们生成的 id 都是正数&#xff0c;所以第一个 bit 统一都是 0。//机器ID 2进制5位 3…

jenkins自动化部署详解

一、准备相关软件 整个自动化部署的过程就是从git仓库拉取最新代码&#xff0c;然后使用maven进行构建代码&#xff0c;构建包构建好了之后&#xff0c;通过ssh发送到发布服务的linux服务器的目录&#xff0c;最后在此服务器上执行相关的linux命令进行发布。 此篇文章jenkins…

gsap笔记

1.gsap基础 gsap.to() //从初始位置到设定位置 gsap.from() //从设定位置到初始位置 gsap.from("h1",{stagger:1 //设定末状态repeate:2 //重复次数yoyo: true //来回动画scale&#xff1a;1 //缩放倍数 }) //stagger:相同元素的按序播放…

【iOS安全】BurpSuite iOS https抓包 | DNS Spoofing

BurpSuite 完整版安装 参考&#xff1a;Admin Team 小数智 的博客 下载 Burp Suite 2021.6 官网下载地址 https://portswigger.net/burp/releases &#xff08;下载并安装好&#xff09; jdk 使用的是11.0.10 https://www.oracle.com/java/technologies/javase-jdk11-downl…

实用css整理

网页一键变灰 body{filter: grayscale(1); } 一般用于特殊时期&#xff0c;网页变灰&#xff0c;只需要给body标签添加这行样式代码。 一键换主题色 body {filter: hue-rotate(45deg);} 给body标签设置这个属性样式&#xff0c;改变角度看看效果吧。 设置字母大小写 p {t…

麦克纳母轮(全向)移动机器人集群控制的Simulink/Simscape虚拟仿真平台搭建

麦克纳姆轮是一种常见的全向移动机构&#xff0c;可以使机器人在平面内任意方向平移&#xff0c;同时可以利用差速轮车的属性实现自转&#xff0c;能够在狭窄且复杂多变的环境中自由运行&#xff0c;因而被广泛应用于竞赛机器人和特殊工业机器人场景。 Ps:最新的BYD仰望U8也有一…

项目启动失败,【consul】

如题&#xff0c;启动时项目未能正常启动&#xff0c;但上次都一切正常&#xff0c;日志提示&#xff1a; Consul service ids must not be empty, must start with a letter 经过排查是因为consul的consulconfigservice服务假死&#xff0c;导致无法正常获取到配置文件&am…

【全开源】Java无人共享棋牌室茶室台球室系统JAVA版本支持微信小程序+微信公众号

开启智能共享新时代 一、系统源码概述&#xff1a;引领自助服务潮流 随着科技的不断发展和人们生活节奏的加快&#xff0c;自助服务已逐渐成为人们生活中的一部分。为了满足市场对无人共享棋牌室、茶室、台球室的需求&#xff0c;我们推出了全新的无人共享系统源码。这套源码…

使用决策树对金融贷款数据进行分析

使用决策树对金融贷款数据进行分析 在本篇博客中&#xff0c;我们将通过使用 Python、Pandas 和多种机器学习技术&#xff0c;对一组贷款数据进行全面分析。通过详细的步骤展示&#xff0c;你将学会如何进行数据预处理、可视化分析以及构建预测模型。 第一步&#xff1a;导入…

Sping源码(七)—ConfigurationClassPostProcessor —— 后续处理

序言 前面的文章中介绍了 parser.parse(); 方法的整体处理逻辑&#xff0c; 其中包括Bean、Import、Configuration、CompopnentScan、Component等注解的解析。 来看看注解解析完的后续工作都做了些什么&#xff1f; 源码片段 简单回顾一下主方法processConfigBeanDefinition…

如何在Python爬蟲中設置代理伺服器?

在實際應用中&#xff0c;爬蟲可能會遇到各種限制&#xff0c;如IP封鎖、訪問限制等。通過使用代理伺服器&#xff0c;可以有效地繞過這些限制&#xff0c;提升爬蟲的效率和隱私保護。本文將詳細介紹如何在Python爬蟲中設置代理伺服器&#xff0c;包括使用requests、urllib、Sc…

Windows10安装Docker Desktop - WSL update failed

按照提示更新wsl后&#xff0c;仍然会报错&#xff0c;github上没有找到解决方法。版本28、29、30都会报这个错。 经过尝试&#xff0c;将docker内的设置中&#xff0c;采用wsl禁掉即可。如下图&#xff1a;

《球》

描述 输入球体的半径r&#xff0c;类型为double&#xff0c;求球的体积&#xff0c;结果保留3位小数。 (注&#xff1a;球的体积计算公式为V4/3∗π∗r3&#xff0c;此处π3.1415&#xff09; 输入描述 输入球体的半径r&#xff0c;类型为double 输出描述 求球的体积&#xf…

55. UE5 RPG 处理当前功能在多人模式中的问题

在UE里面&#xff0c;我们运行项目可以设置多种网络模式&#xff0c;主要是分为三种&#xff1a; 运行Standalone 就是单人模式&#xff0c;没有网络交互以监听服务器运行&#xff0c;在界面里运行的游戏会作为服务器使用以客户端运行&#xff0c;UE会单独运行一个线程作为服务…

Java 解析 Linux 不同压缩文件的方法及注意事项

背景 commons-compress 包提供了归档压缩文件的工具类&#xff0c;java.util 里面包含了 Zip 和 gz 文件的解压方法&#xff0c;最终以按扁平方式&#xff0c;遍历到全部文件的文件&#xff0c;包括子目录下的文件。使用 Java 实现的日志采集系统涉及到对压缩文件的解析&#…

【Linux】套接字的理解 基于TCP协议的套接字编程(单/多进程 / 线程池|英汉互译 / C++)

文章目录 1. 前言1.1 网络方面的预备知识&#x1f447;1.2 了解TCP协议 2. 关于套接字编程2.1 什么是套接字 Socket2.2 socket 的接口函数2.3 Udp套接字编程的步骤2.4 sockaddr 结构 3. 代码实现3.1 makefile3.2 log.hpp3.3 tcp_server.hpp① 框架② service() 通信服务③ init…

记录docker ps查找指定容器的几个命令

1.docker ps | grep registry 查询包含registry的容器 2.docker ps | grep -E "reigistry\s" 开启正则匹配模式&#xff0c;匹配registry后面为空格的容器&#xff0c;若是匹配一整行可以这样写docker ps | grep -E "^([0-9a-f]{12})\sregistry\s.*" 这…