当前位置: 首页 > news >正文

网络编程复习

 1.网络编程基础

  1.1引入

socket套接字实现主机之间的通信
cs通信模型基于socket实现,需要客户端软件来实现通信
bs通信模型基于http实现,是网页通信,不需要任何客户端软件

1.2通信协议

(1)OSI七层通信协议:物理层,链路层,网络层,运输层,会话层,表示层,应用层
(2)TCP/IP四层通信协议:网络接口层,网际层,运输层,应用层
(3)五层协议体系: 物理层,数据链路层,网络层,运输层,应用层

分层的好处:各层之间功能独立,每层的功能不需要通过上层或者下层间接得到,上层下层发生变化,不会影响这一层的功能,便于根据每层功能对每层进行查错和维护,促进标准化工作,结构上不可分割。
OSI和TCP/IP每层对比:

数据头:封包和拆包过程:

linux默认封装MTU一帧数据最大为1500字节。

1.3TCP和UDP区别

1.tcp面向有链接传输,有三次握手四次挥手机制,会给每个包编上序列号避免乱序,拥有确认包机制,有超时重传机制,有接收缓存区和发送缓存区,为了提高效率,会将多个小包数据沾成一个包发送,这种现象叫做粘包现象,具有网络拥堵检测,实时性较差,数据传输更稳定,不易造成数据丢失。
2.udp面向无连接传输,没有发送缓存区,有接收缓存区,尽最大努力传输,接收不及时会造成丢包,超过最大发送的数据大小会删掉多出的部分,实时性强,传输效率高,数据容易丢失乱序。

1.4字节序

网络字节序采用大端存储,数据低位存高地址,数据高位存低地址。

ip地址:网络号(三个字节)+主机号(一个字节),共四个字节,如:255.255.255.0
ip地址字节序转换函数:
       将主机字节序转为网络字节序: inet_addr(const char*)

        将网络字节序转为主机字节序:inet_ntoa(const char*)
端口号:占用两个字节,如:8888

端口号字节序转换函数:

        将两字节无符号整数的主机字节序转为网络字节序:htons(uint16_t hostshort)

        将两字节无符号整数的网络字节序转为主机字节序:ntohs(uint16_t hostshort)

1.5子网掩码

子网掩码是对主机号的二次划分,子网掩码将原ip划分为多个网段,每个网段绑定一定数量的子网ip地址。子网掩码会将一字节的主机号划分为四字节子网掩码:三字节网络号和一字节主机号,网络号全由1组成,主机号全由0组成。网络号可以向主机号借子网号,借来的子网号的值可以改变,因此可以将原ip划分为多个网段。C类网络默认子网掩码是255.255.255.0
子网地址 = 原ip地址&多个子网掩码(子网掩码个数取决于从主机号借用的可变的子网号的个数)

两个特殊的ip:

        主机号全为0:标识网络的起始地址,主机不可用

        主机号全为1:全网广播地址,主机不可用

划分后最大的网段个数:2^(子网中1的个数)
划分后最大可用的主机个数:2^(子网中0的个数)-2

1.6端口号

TCP和UDP的端口号是相互独立的

可以使用的:1024~49151,就是我们平时编写服务器使用的端口号

临时端口号:49152~65535,这部分是客户端运行时候动态选择的

1.7域名

一个域名可以绑定多个ip,域名ip可通过shell指令查看:ping www.baidu.com

展示:ubuntu@ubuntu:~/test$ ping www.baidu.com
PING www.a.shifen.com (180.101.50.188) 56(84) bytes of data.
64 字节,来自 180.101.50.188 (180.101.50.188): icmp_seq=1 ttl=128 时间=8.91 毫秒
64 字节,来自 180.101.50.188 (180.101.50.188): icmp_seq=2 ttl=128 时间=13.2 毫秒
ubuntu@ubuntu:~/test$ ping www.baidu.com
PING www.a.shifen.com (180.101.50.242) 56(84) bytes of data.
64 字节,来自 180.101.50.242 (180.101.50.242): icmp_seq=1 ttl=128 时间=22.5 毫秒
64 字节,来自 180.101.50.242 (180.101.50.242): icmp_seq=2 ttl=128 时间=11.0 毫秒
通过上面的结果,可以看到百度官网的域名绑定了多个ip地址

域名结构:

        例如域名 http: //www.baidu.com.cn 从右向左看

        cn为高级域名,也叫一级域名,它通常分配给主干节点,取值为国家名,cn代表中国

        com为网络名,属于二级域名,它通常表示组织或部门

        中国互联网二级域名共40个,edu表示教育部门,com表示商业部门,gov表示政府,军队mil

        baidu为机构名,在此为三级域名,表示百度

        www:万维网world wide web,也叫环球信息网,是一种特殊的信息结构框架。

        http:使用的是超文本传输协议

2.tcp和udp通信

 1.套接字

套接字socket,通信的载体,使用socket函数创建通信节点,返回该端点的文件描述符,端点中包含发送缓存区和接收缓存区。

2.tcp通信程序

1.服务器端

2.客户端

3.udp通信程序

1.服务器端

2.客户端

3.广播和组播

1.广播

2.组播

4.流式域套接字和报式域套接字

用于本地通信。

5.超时检测

6.抓包分析

7.数据库

8.静态库动态库

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 服务器模式
  • 【C++】-----多态及原理
  • 相机标定——小孔成像、相机模型与坐标系
  • 《数据结构(C语言版)第二版》第五章-树和二叉树(5.7 哈夫曼树及其应用)
  • 【AI学习】[2024北京智源大会]具身智能:具身智能关键技术研究:操纵、决策、导航
  • kafka 3.x 配置kerbos
  • 赋能未来园区:TSINGSEE视频AI智能管理平台如何引领园区管理智慧化转型
  • java selenium 设置代理,允许在其他环境中使用不同的IP访问
  • 分类预测 | Matlab实现PSO-XGBoost粒子群算法优化XGBoost的多特征分类预测
  • C# 方法的定义
  • JavaScript -- 总结 9 (小白)
  • k8s使用kustomize来部署应用
  • 排序算法1:堆排序,直接插入排序与希尔排序
  • System Verilog--$scanf应用举例
  • 学习日志8.7--防火墙安全策略
  • Android组件 - 收藏集 - 掘金
  • Babel配置的不完全指南
  • CSS 三角实现
  • Fastjson的基本使用方法大全
  • idea + plantuml 画流程图
  • Java 网络编程(2):UDP 的使用
  • node和express搭建代理服务器(源码)
  • oschina
  • React组件设计模式(一)
  • Webpack 4x 之路 ( 四 )
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 前端自动化解决方案
  • 前言-如何学习区块链
  • 时间复杂度与空间复杂度分析
  • 交换综合实验一
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #Spring-boot高级
  • #每日一题合集#牛客JZ23-JZ33
  • (~_~)
  • (23)Linux的软硬连接
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (MATLAB)第五章-矩阵运算
  • (Qt) 默认QtWidget应用包含什么?
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (二)PySpark3:SparkSQL编程
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (详细文档!)javaswing图书管理系统+mysql数据库
  • (学习日记)2024.01.19
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (一)u-boot-nand.bin的下载
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • *算法训练(leetcode)第四十天 | 647. 回文子串、516. 最长回文子序列