当前课程知识点:基于Linux的C++ > 第十五讲 网络编程 > 15.2 Internet网络协议 > LinuxCPP1502
我们首先来看第一个部分
Internet网络协议
TCP/IP协议是Internet主要的协议组
它是主流的
我们现在用的基本上都是它
TCP/IP协议呢
它是一种分层的多协议的通讯体系
HTTP协议仅仅是TCP/IP协议
我们整个因特网上最顶层
应用层的协议中的一种
对于TCP/IP协议来讲
它把整个网络实际上分成了四层
首先最底层的就是数据链路层
它描述了网卡接口的网络驱动程序
和数据在物理媒介上的那个传输的特征
你要知道 不同的物理网络
它是具有不同的电器特性的
所以网络驱动本身
这些实现细节
对于不同的网络架构来讲肯定是不一样的
所以我们在设计数据链路层的时候
通过隐藏这些细节就可以为上层协议
提供一个一致的接口
在数据链路层使用到的最常用的协议
就是地址解析协议和反向地址解析协议
一个叫ARP 一个叫RARP
在数据链路层之上就是网络层
它将实现数据包的转发和路由
常用的协议就是IP和ICMP
那么IP协议是怎么回事呢
它是一种逐跳的发送模式
根据数据包一个目的地IP地址
它来决定这个数据包该如何去发送
如果它能够直接发给它
OK 它就发给它了
如果不能直接发给它呢
那么它就会选择一个中间人
给我做一个转发
就这个意思
中间有一个转发
你就称它为产生一次额外的一跳
那个转发者
如果发现能够直接发到目的地
它就直接发送
如果不行
它还得找下一个转发者
我们所有的数据的传输
都是按照这个模式去做的
那么它就是IP协议
这叫逐跳发送模式
第二种协议就ICMP协议
它是因特网的控制报文协议
主要是用于检测网络连接的
再上一层就是传输层
为两台主机 它们的应用程序
提供端到端的通讯机制
传输层使用到的最主要的协议
就是TCP和UDP
TCP就是传输控制协议
为应用层提供可靠的
面向连接的基于流的可靠服务
使用超时重发的机制
数据确认的方式来保证我们的数据流
能够被正确的发送到目的地
这是传输层TCP协议要做的事情
另外一个和它做相似功能的协议叫UDP
叫用户数据报协议
它呢 也是为应用层
提供一个基于流的服务
但是它提供的这个服务是不可靠的
无连接的
简单的基于数据报的一个服务
我不能够保证这个数据
能够被正确地发送到目的地
就这个意思
一个是可靠服务
一个是不可靠服务
所以显然你知道
如果是一个可靠服务
那么需要额外的控制和管理就多一些
不可靠服务呢
控制和管理就少一点
它不可靠 所以效率就会高一些
那个可靠的呢 效率就会低一点
就这个意思
正是因为TCP协议和刚才那个IP协议
在因特网协议中占了最主要的地位
所以我们才把因特网
我们现在用到的这个协议
统称TCP/IP协议 就这个意思
再上一层就是应用层
就是我们应用程序逻辑的实现
常用的协议有ping协议、telnet协议、
DNS协议、HTTP协议、FTP协议、DHCP协议
bla bla bla 一堆 好多种
每个都可能完成不同的应用程序的逻辑
这是我们因特网协议的
最主要的一些介绍
我们要开发的是Web服务器
所以我们简单地讨论一下HTTP协议
它是一种超文本的传输协议
当然是在应用层
HTTP协议的最主要特点就是
第一它支持客户服务器的模式
一个Web服务器架构好了以后
它可以生成或者得到一些信息
然后你可以通过网络上的一个浏览器
一般就是Web浏览器
来请求Web服务器替你提供服务
传递信息 就这个意思
你也可以把信息传递给它
这是双向的 都可以
这就是客户/服务器的模式
这是一个HTTP服务器的
最主要一个特点
第二个特点简单快速
HTTP服务器 它在处理的时候
客户向服务器发送一个请求
只需要传递它的请求方法
和它的路径就OK了
非常得简单
响应的速度呢实际上也快
请求的方法就那么几种
GET、HEAD、POST
我们一般让同学们写的代码
其实就只关心GET
其它的方法你不实现没关系
每一种这种传输的方法
它都规定了客户和服务器
联系的不同类型
HTTP协议本质上非常非常得简单
实现起来它的规模也比较小
通讯的速度 效率实际上是较快
也就说效果比较高
这就是非常重要的一个地方
第三个特点 HTTP协议非常灵活
允许你传输任意型的数据对象
什么东西其实都可以传
这是非常重要的一个东西
它操作起来特别特别得灵活
它用Content-Type去标记它的内容型
非常非常得灵活
第四个 HTTP协议是无连接的
无连接的意思是指
每次连接都只处理一个单一的请求
处理完这个请求以后连接就中断了
没了 下一次你再想连接
继续重新地新造一个连接
重新构造一个连接出来
这是很典型的
这个连接在客户请求的时候才会发生
此外的时间它是不存在的
所以它叫无连接的 很典型
它是无状态的
无状态的意思就是指这个协议
对于你的原先的事务处理的那个过程
它的历史没有记忆能力
它不管的 没有包袱
所以应答就比较快
但是每次传输的时候
数据量它就会比较大
因为它不知道你过去要了什么东西
每次都跟新的连接一样
当然传输的数据量就会大一点
所有的HTTP资源
都使用HTTPURL的方式去定位
也就是通过这个网址
来定位对应的网络资源
前面是协议 后面是主机
然后是端口
跟着的是一个绝对路径
就这个模式
协议中最重要就是
HTTP请求和HTTP应答
我们首先来看HTTP请求
它是由三部分组成的
请求行 消息报头和请求正文
格式基本上是固定的
Method Request-URI HTTP-Version CRLF
然后是HTTP的响应
响应也是由三部分来组成
第一个是状态行
第二是消息报头
第三个是响应正文
这个就是HTTP响应的三部分信息
当你在编写一个Web服务器的时候
那么别人发出一个Web请求
你要返回它一个Web信息
那么你的那个信息
就必须按照这个Web协议
就是我们的HTTP协议去构造
状态行 消息报头 响应正文
你必须按照这个模式去构造
因为你返回的是字节流 是字符串
就用这个模式去把它构造好
HTTP的状态码呢
由三位数字来组成
首数字就是定义它的响应的类别
你比如说1xx就表示它是个提示信息
像2xx就表示它成功
3xx就表示重定项 诸如此类
有一些常见的状态码
同学们使用网络很多的话就可能会遇到
比如讲200就表示OK 请求成功
400就表示坏请求
401就是未授权
500内部服务器错 等等
这就是基本的状态码
当你实现你的Web服务器的时候
如果一个用户发出了一个无效的请求
你要根据它请求的那个实际情况
返回它对应的状态码
特别注意这一点
-1.1 提纲
-1.2 程序设计的基本概念
-1.3 简单C/C++程序介绍
-1.4 程序设计的基本流程
-1.5 基本语法元素
-1.6 程序设计风格
-1.7 编程实践
-第一讲 C/C++基本语法元素--编程实践提交入口
-2.1 提纲
-2.2 结构化程序设计基础
-2.3 布尔数据
-2.4 分支结构
-2.5 break语句
-2.6 循环结构
-2.7 编程实践
-第二讲 程序控制结构--编程实践提交入口
-3.1 提纲
-3.2 函数声明、调用与定义
-3.3 函数调用栈框架
-3.4 编程实践
-第三讲 函数--编程实践提交入口
-4.1 提纲
-4.2 算法概念与特征
-4.3 算法描述
-4.4 算法设计与实现
-4.5 递归算法(一)
-4.6 递归算法(二)
-4.7 容错与计算复杂度
-4.8 编程实践
-第四讲 算法--编程实践提交入口
-5.1 提纲
-5.2 库与接口
-5.3 随机数库(一)
-5.4 随机数库(二)
-5.5 作用域与生存期
-5.6 典型软件开发流程(一)
-5.7 典型软件开发流程(二)
-5.8 编程实践
-第五讲 程序组织与开发方法--编程实践提交入口
-6.1 提纲
-6.2 字符
-6.3 数组(一)
-6.4 数组(二)
-6.5 结构体
-6.6 编程实践
-第六讲 复合数据类型--编程实践提交入口
-7.1 提纲
-7.2 指针基本概念
-7.3 指针与函数
-7.4 指针与复合数据类型(一)
-7.5 指针与复合数据类型(二)
-7.6 字符串
-7.7 动态存储管理(一)
-7.8 动态存储管理(二)
-7.9 引用
-7.10 编程实践
-第七讲 指针与引用--编程实践提交入口
-8.1 提纲
-8.2 数据抽象(一)
-8.3 数据抽象(二)
-8.4 链表(一)
-8.5 链表(二)
-8.6 链表(三)
-8.7 链表(四)
-8.8 函数指针(一)
-8.9 函数指针(二)
-8.10 抽象链表(一)
-8.11 抽象链表(二)
-8.12 编程实践
-第八讲 链表与程序抽象--编程实践提交入口
-9.1 提纲
-9.2 程序抽象与面向对象
-9.3 类类型
-9.4 对象(一)
-9.5 对象(二)
-9.6 类与对象的成员(一)
-9.7 类与对象的成员(二)
-9.8 类与对象的成员(三)
-9.9 继承(一)
-9.10 继承(二)
-9.11 继承(三)
-9.12 多态(一)
-9.13 多态(二)
-9.14 编程实践
-第九讲 类与对象--编程实践提交入口
-10.1 提纲
-10.2 四则运算符重载(一)
-10.3 四则运算符重载(二)
-10.4 关系与下标操作符重载
-10.5 赋值操作符重载(一)
-10.6 赋值操作符重载(二)
-10.7 赋值操作符重载(三)
-10.8 赋值操作符重载(四)
-10.9 赋值操作符重载(五)
-10.10 流操作符重载(一)
-10.11 流操作符重载(二)
-10.12 流操作符重载(三)
-10.13 操作符重载总结
-10.14 编程实践
-第十讲 操作符重载--编程实践提交入口
-11.1 提纲
-11.2 泛型编程概览
-11.3 异常处理机制(一)
-11.4 异常处理机制(二)
-11.5 运行期型式信息(一)
-11.6 运行期型式信息(二)
-11.7 模板与型式参数化
-11.8 题外话:术语翻译
-11.9 泛型编程实践(一)
-11.10 泛型编程实践(二)
-11.11 泛型编程实践(三)
-11.12 泛型编程实践(四)
-11.13 泛型编程实践(五)
-11.14 泛型编程实践(六)
-11.15 泛型编程实践(七)
-11.16 泛型编程实践(八)
-11.17 泛型编程实践(九)
-11.18 泛型编程实践(十)
-11.19 编程实践
-第十一讲 泛型编程--编程实践提交入口
-12.1 提纲
-12.2 程序执行环境(一)
-12.3 程序执行环境(二)
-12.4 程序执行环境(三)
-12.5 程序执行环境(四)
-12.6 输入输出(一)
-12.7 输入输出(二)
-12.8 文件系统
-12.9 设备
-12.10 库(一)
-12.11 库(二)
-12.12 makefile文件(一)
-12.13 makefile文件(二)
-12.14 makefile文件(三)
-12.15 编程实践
-第十二讲 Linux系统编程基础--编程实践提交入口
-13.01 提纲
-13.02 进程基本概念
-13.03 信号
-13.04 进程管理(一)
-13.05 进程管理(二)
-13.06 进程管理(三)
-13.07 进程间通信(一)
-13.08 进程间通信(二)
-13.09 进程间通信(三)
-13.10 进程间通信(四)
-13.11 进程池
-13.12 编程实践
-第十三讲 进程编程--编程实践提交入口
-14.1 提纲
-14.2 线程基本概念
-14.3 线程管理(一)
-14.4 线程管理(二)
-14.5 线程管理(三)
-14.6 线程管理(四)
-14.7 线程同步机制(一)
-14.8 线程同步机制(二)
-14.9 C++11线程库(一)
-14.10 C++11线程库(二)
-14.11 C++11线程库(三)
-14.12 C++11线程库(四)
-14.13 C++11线程库(五)
-14.14 编程实践
-第十四讲 线程编程--编程实践提交入口
-15.1 提纲
-15.2 Internet网络协议
-15.3 套接字(一)
-15.4 套接字(二)
-15.5 编程实践
-第十五讲 网络编程--编程实践提交入口