网络知识
来源:互联网 发布:一个域名绑定多个ip 编辑:程序博客网 时间:2024/05/22 09:38
授课老师:秦山虎 279600648
4G、物联网、云计算
课程安排:1、网络基础 API函数(一般系统调用):函数干什么,输入参数,输出参数,注意点 TCP
2、TCP三次握手 网络抓包软件应用 UDP
3、I/O模型,并发服务器的实现
4、组播、广播、域套接字
项目:数据库学生管理系统 在线词典
0522 嵌入式第一节课 网络基础及API函数
计算机通信之间约定的格式,也就是协议
何为协议:
通信双方约定好的通信格式和内容
早期的协议是NCP,缺点:不能互联不同的类型计算机和不同的操作系统,还有没有纠错系统
TCP/ip协议是协议族,最重要的两个协议就是TCP和IP协议
TCP主要是纠错
IP解决不同网络进行互联
TCP/IP协议成为“世界语”
(1)网络的体系结构:网络的层次结构和每层所使用协议的集合
高内聚,低耦合思想:分层思想
(2)为啥分层:问题复杂,分儿治之
(3)对每层协议集合的理解:协议就是该层实现的功能。
(4)两大体系结构:
OSI:理想化的
TCP/IP:工业实现的
(5)网络体系结构中层与层之间的关系
每层向上层提供服务,同时使用下层提供的服务
OSI:的英文缩写:open systemintercontinent 开放系统互联 ISO组织
OSI模型一共有7层协议:必须记住 底层---》高层
IO分层的概念类似:用户空间、系统空间
应用、表示、会话(用户空间) 传输层、网络层、数据链路层、物理层(内核空间,已经在操作系统中实现了)
表示层位于OSI分层结构的第六层,主要为不同终端的上层用户提供数据和信息正确的语法表示变换方法。如文本文件的ASCII格式和EBCDIC,用于表示数字的1S或2S补码表示形式。
会话层所属现代词,指的是提供的服务可使应用建立和维持会话,并能使会话获得同步。
物理层: (1)物理接口,网卡,数据卡,最常见的是网卡
(2) 传输介质:双绞线、光纤、同轴电缆、无线,传输模式不一样了
发送和接受的是010101的比特流,是没有格式的
数据链路层:组包和拆包的。
格式:---协议实现的
包头MAC地址:唯一的
网络层:路由选择,要添加源和目的IP地址 ,写收件人和发件人的地址
传输层:差错处理,源和目的地端口号 ,相当于姓名
会话层:socket和网络设备的联系,
表示层:数据转换和加密
应用层:应用程序
OSI通信的保证:
1、通信的双方必须有相同的体系结构
2、对应的层数据格式是相同的,不能层与层之间进行通信
3、最后传输的格式是比特流,从高到低,再从低到高
TCP/IP协议的体系结构:
物理层 网络层(IP、ICMP、IGMP) 传输层(TCP、UDP) 应用层
注意前后的对比:前三后二 进行合并
数据链路层:ARP:通过IP地址得到MAC地址
RARP:通过MAC地址得到IP地址
MTU:规定了我的数据包的最大长度。单位是字节
网络层:IP 、 ICMP、
传输层:TCP、UDP
应用层:TFTP、HTTP、FTP、Telnet
DNS:域名解析协议,把网址名转换为IP。
不同点:多了路由器
1、路由器工作在网络层;
2、路由器有几层:三层:物理层、数据链路层、网络层
网桥工作在数据链路层,只有分包和拆包的功能:有两层体系结构:数据链路层和物理层
用户空间:应用层
系统空间:传输层、网络层、物理层
系统空间为用户空间提供Socket接口,供调用
传输层与应用层联系最近:
UDP:是不可靠的无连接协议,无需校验,传输效率高。
适用范围:语音和视频的传输即多媒体的传输。数据量很大
应用在局域网。可靠性的保证允许。
TCP:面向连接;数据无误、数据无丢失、数据无失序、数据无重复到达(并不是说不出错,而是说有校验机制,直到数据无误)
适用范围:对信息的安全性和可靠性要求比较高
TCP是流的传输,没有格式的
而UDP是数据包的传输
共同点:同为传输层协议;不同点:TCP有连接,可靠;UDP无连接,不保证可靠
面向连接:逻辑上的连接,有应答机制的。
QQ使用的是什么传输层协议?
登录信息会用到TCP协议;文本传输用到TCP协议;视频传输用到UDP协议
协议的选择没有最好,只有最合适的
TCP和UDP都会用:
===============预备知识socket====================
Socket:系统空间向用户空间提供的接口,一开始做进程之间的通信的接口,优先于网络
历史:1、本地间进程通信
2、网络通信接口(后来的应用)
1)socket本质是什么:
本质是一种文件,可以用IO进行操作,创建、读写、关闭
2)socket是一个通用的网络接口,跟具体的协议无关
socket类型:流式(TCP)、数据报(UDP)、原始()
3)socket的位置在OSI模型中:分情况讨论
TCP、UDP在应用层与传输层之间 原始套接字位于应用层与网络层之间
=========网络进程标识三元组:==========
1、协议:
2、IP:是哪台主机
形式:点分十进制,最后转换为32位无符号整数(包头)
IPV6技术:128位16个字节 IPV4
inet_addr();注意255.255.255.255转换后也会返回-1;
字符串与整型的转换:atoi,
3、端口号:哪一个进程
1)16位的无符号short 0—65535
端口号分为三类:0-1023系统征用 1024-5000大公司软件 5001-65535用户可用
字节序:字节与字节之间的顺序
C/S模型:
客户端/服务器模型:
服务器是建立好服务,公布自己的服务号码,被动接受客户端的请求,响应客户端的请求
但服务器不会主动打给你
客户端:主动发起连接,提出相应的请求。
作业:自己做一个服务器和客户端
0523 嵌入式第二节课 网络TCP、UDP
recv函数的返回值:在客户端关闭的时候,服务器的接收端也返回0
只有当莫一方关闭的时候,recv才会返回0,一定要注意
退出程序的时候:用goto语句,或者用两层while循环
三次握手是发生在connect和accept函数之间,总共发三次数据包,但数据包不包含任何用户信息
SYN:提问(同步)
ACK:应答
AYN和ACK为1才有效
包的序列号:测试回答的正确性
SYN = 1序列号1 ; ACK = 1,SYN = 1 回答的内容是上次的序列号+1 ; ACK = 1 ,回答的内容是上次的询问的序列号 + 1
常用调试工具:
telnet IP 端口号
lsof: list systemopen file
lsof -i 显示有关网络的打开文件
netstat 显示网络 netstat-napt 协议
wireshark:
1)你抓哪个网卡
2)你抓包的过滤条件
3)你显示包的过滤条件
网卡的驱动是在数据链路层
服务器起来-》运行-》运行客户端 抓获三次握手
作业:1、实现UDP客户端和服务器的模型
2、实现TCP的文件服务器
参考02day源码
0526 嵌入式第三节课 IO模型和并发服务器
复习内容:
1、如何标识一个网络进程,在网络程序中如何体现
2、TCP的三次握手的过程
3、UDP客户端和服务器的流程
bcd-lsp7种文件类型:
I/O其实就是一个文件:
=============4种I/O模型:=============
1、阻塞:实质是放弃CPU,进行睡眠,不等同于while(1),I/O操作默认为阻塞
效率低,后面的内容执行不到
2、非阻塞:实质上是直接错误返回,缺点是浪费资源,因为实现方式是循环方式,程序员是想读到它,一直查询占用CPU
3、I/O多路复用:允许对多个文件进行操作(重点)
4、信号驱动I/O:没有错误返回,待会信号通知
三种情况会发生阻塞:
读、写、操作(TCP的三次握手)
如果在进程阻塞过程中,对方发生故障,那这个进程将永远阻塞下去。(很危险的)
===========同时操作(监控)多路输入输出流:三种方法===========
用非阻塞模型:
用多进程fork:
I/O多路复用:select函数的使用
操作系统:API实现
任务:用fcntl函数实现非阻塞模式
参考03day的源码
========服务器的模型============
TCP的I/O多路复用是伪并发,可能造成其他客户端的无法请求,破坏并发性
任务:用fork和I/O多路复用(select)来实现并发服务器
参考03day的源码
0527 嵌入式第四节课 超时检测、广播
复习内容:
1、IO模型分为几种,都有哪些特点
2、常用通信的服务器模型
3、如何用程序实现文件的多路输入和输出流(三种方法)
非阻塞、fork、select
===========TCP/IP协议网络封包格式==============
===========gethostbyname函数的用法==============(该函数经常使用)
任务:实现网络信息检索函数,gethostbyname,从域名得到IP地址(掌握用法)
网络属性设置
参考04day的源码
============超时检测=============
网络超时检测:防止阻塞带来的一直等待
三种模式的区别:
socket一次设定管终身
select设定一次管一次,如果每次都用重新赋值
占用了alarm函数,如果其他地方用到,就不行了
以上三种方法参考04day的源码
=============广播、组播===========
应用在局域网,实现一对多的模式
作业:广播和组播的实现
参考04day的源码
0528 嵌入式第五节课 组播、域套接字及数据库(学生管理系统)
复习内容:
1、画出数据包的格式,指出MAC地址、IP地址、端口号分别位于哪部分
2、超时检测的三种方法
3、讲述广播的发送和接收流程
网络地址三元组:MAC、IP、端口号
广播地址分为两种:192.168.10.255 255.255.255.255
广播和组播应用于局域网内的
TCP和 UDP既可以在局域网也可以在外网。
=======流式域套接字与数据报套接字进程间的通信============
任务:实现流式与数据报式的进程通信代码:
源码参考:05day的源码TCP-UNIX 与UDP-UNIX
=============网络抓包===========
了解流程:参考05day源码
存储介质的比较:
数组、链表:存储速度快,但掉电易丢失。
文件系统:掉电不丢失、但格式不统一、程序和数据不分离
数据库:方便管理、数据备份
============数据库=============
关系型数据库
二维表excel 数据库
文件名 数据库名
表名 表名
行 记录
列 字段
基于嵌入式的linux的数据库有SQLite、Filebird;其中前者为关系型数据库,是磁盘型数据库中运行最快的.
存储在单一磁盘中的一个完整的数据库,支持数据库的大小为2TB。
=====创建SQLite数据库==============
手工创建:输入sqlite3可启动sqlite3工具
代码创建:程序运行时会尝试打开数据库,如果不存在会自动
安装sqlite3数据库:
1、拷贝sqlite3到家目录
2、解压unzip sqlite3
3、进入解压完成后的目录,执行sudo dpkg-i *.deb命令就可以完成安装
4、查看版本号,sqlite3 -version命令查看为3.7.2版本
sqlist3有两套命令:
sqlist3自己的命令:前面必须加 .(点)
sql语句:后面必须要有分号;
=========常用命令======================
.help 显示所有命令
.quit 退出sqlite3
.database 显示当前打开的数据库文件
.tables 显示数据库中所有的表名
.schema <table_name>查看表的结构
==========SQL语句,以分号结束===============
create table<table_name> (f1 type , f2 type); 创建新表 其中参数里面是列(记录)
drop table<table_name>; 删除表 通过.tables看是否删除成功
select * from<table_name>; 查询表中所有的记录
select * from<table_name> where <expression>;按指定条件查询表中记录
insert into<table_name> values (value1 , value2, ....); 向表中添加新记录
delete from<table_name> where <expression> 按指定条件删除表中记录
update<table_name> set <f1 = value1>, <f2 = value2> ... where<expression>; 更新表中记录
alter table<table> add column <field> <type> default..... 在表中添加字段
目前最新的版本不支持删除字段功能,出于保护机制
=========SQLite编程接口==============
任务:学生管理系统(数据库的操作)
参考文档 参考05day的源码
0529 嵌入式第六节课 数据库(在线词典)
复习内容:
1、组播的流程,以及组播和广播权限的问题
2、流式域套接字 与用户数据包套接字的流程以及区别
前台进程与后台进程间的通信
注意:流式域套接字的listen函数如果大于接听的数目就会出错返回,而TCP处于等待但不处理状态。
3、数据库和二维表的对比以及sqlite_exec函数的讲解
任务:在线词典的制作:
参考文档: 参考06day的源码
问题:1、listen函数的等待的最大队列长度是什么意思,是在并发服务器时同时处理的请求的最大数目,还是循环服务器处理的最大请求?
- 网络知识
- 网络知识
- 网络知识
- 网络知识
- 网络知识
- 网络知识
- 网络知识
- 网络知识
- 网络知识
- 网络知识
- 网络知识
- 网络知识
- 网络知识
- 网络知识
- 网络知识
- 【网络知识】
- 网络知识
- 网络知识
- [Ahoi2008]Rectangle 解题报告
- 02@设计模式概览
- Linux Nginx安装以及可能出现错误
- LeetCode 217 Contains Duplicate II java
- iframe间传值
- 网络知识
- java安全-类加载器
- C++实验4—乘法口诀表
- Java多线程面试问题
- 稀疏向量计算优化小结
- 源代码设计、实践、控制
- iOS开发 ☞ Simulator(模拟器)
- lintcode之数组划分
- poj 3090 Visible Lattice Points 欧拉函数打表求和