当前课程知识点:基于Linux的C++ >  第十五讲 网络编程 >  15.2 Internet网络协议 >  LinuxCPP1502

返回《基于Linux的C++》慕课在线视频课程列表

LinuxCPP1502在线视频

LinuxCPP1502

下一节:LinuxCPP1503

返回《基于Linux的C++》慕课在线视频列表

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服务器的时候

如果一个用户发出了一个无效的请求

你要根据它请求的那个实际情况

返回它对应的状态码

特别注意这一点

基于Linux的C++课程列表:

第一讲 C/C++基本语法元素

-1.1 提纲

--LinuxCPP0101

-1.2 程序设计的基本概念

--LinuxCPP0102

-1.3 简单C/C++程序介绍

--LinuxCPP0103

-1.4 程序设计的基本流程

--LinuxCPP0104

-1.5 基本语法元素

--LinuxCPP0105

-1.6 程序设计风格

--LinuxCPP0106

-1.7 编程实践

--LinuxCPP0107

-第一讲 C/C++基本语法元素--编程实践提交入口

第二讲 程序控制结构

-2.1 提纲

--LinuxCPP0201

-2.2 结构化程序设计基础

--LinuxCPP0202

-2.3 布尔数据

--LinuxCPP0203

-2.4 分支结构

--LinuxCPP0204

-2.5 break语句

--LinuxCPP0205

-2.6 循环结构

--LinuxCPP0206

-2.7 编程实践

--LinuxCPP0207

-第二讲 程序控制结构--编程实践提交入口

第三讲 函数

-3.1 提纲

--LinuxCPP0301

-3.2 函数声明、调用与定义

--LinuxCPP0302

-3.3 函数调用栈框架

--LinuxCPP0303

-3.4 编程实践

--LinuxCPP0304

-第三讲 函数--编程实践提交入口

第四讲 算法

-4.1 提纲

--LinuxCPP0401

-4.2 算法概念与特征

--LinuxCPP0402

-4.3 算法描述

--LinuxCPP0403

-4.4 算法设计与实现

--LinuxCPP0404

-4.5 递归算法(一)

--LinuxCPP0405

-4.6 递归算法(二)

--LinuxCPP0406

-4.7 容错与计算复杂度

--LinuxCPP0407

-4.8 编程实践

--LinuxCPP0408

-第四讲 算法--编程实践提交入口

第五讲 程序组织与开发方法

-5.1 提纲

--LinuxCPP0501

-5.2 库与接口

--LinuxCPP0502

-5.3 随机数库(一)

--LinuxCPP0503

-5.4 随机数库(二)

--LinuxCPP0504

-5.5 作用域与生存期

--LinuxCPP0505

-5.6 典型软件开发流程(一)

--LinuxCPP0506

-5.7 典型软件开发流程(二)

--LinuxCPP0507

-5.8 编程实践

--LinuxCPP0508

-第五讲 程序组织与开发方法--编程实践提交入口

第六讲 复合数据类型

-6.1 提纲

--LinuxCPP0601

-6.2 字符

--LinuxCPP0602

-6.3 数组(一)

--LinuxCPP0603

-6.4 数组(二)

--LinuxCPP0604

-6.5 结构体

--LinuxCPP0605

-6.6 编程实践

--LinuxCPP0606

-第六讲 复合数据类型--编程实践提交入口

第七讲 指针与引用

-7.1 提纲

--LinuxCPP0701

-7.2 指针基本概念

--LinuxCPP0702

-7.3 指针与函数

--LinuxCPP0703

-7.4 指针与复合数据类型(一)

--LinuxCPP0704

-7.5 指针与复合数据类型(二)

--LinuxCPP0705

-7.6 字符串

--LinuxCPP0706

-7.7 动态存储管理(一)

--LinuxCPP0707

-7.8 动态存储管理(二)

--LinuxCPP0708

-7.9 引用

--LinuxCPP0709

-7.10 编程实践

--LinuxCPP0710

-第七讲 指针与引用--编程实践提交入口

第八讲 链表与程序抽象

-8.1 提纲

--LinuxCPP0801

-8.2 数据抽象(一)

--LinuxCPP0802

-8.3 数据抽象(二)

--LinuxCPP0803

-8.4 链表(一)

--LinuxCPP0804

-8.5 链表(二)

--LinuxCPP0805

-8.6 链表(三)

--LinuxCPP0806

-8.7 链表(四)

--LinuxCPP0807

-8.8 函数指针(一)

--LinuxCPP0808

-8.9 函数指针(二)

--LinuxCPP0809

-8.10 抽象链表(一)

--LinuxCPP0810

-8.11 抽象链表(二)

--LinuxCPP0811

-8.12 编程实践

--LinuxCPP0812

-第八讲 链表与程序抽象--编程实践提交入口

第九讲 类与对象

-9.1 提纲

--LinuxCPP0901

-9.2 程序抽象与面向对象

--LinuxCPP0902

-9.3 类类型

--LinuxCPP0903

-9.4 对象(一)

--LinuxCPP0904

-9.5 对象(二)

--LinuxCPP0905

-9.6 类与对象的成员(一)

--LinuxCPP0906

-9.7 类与对象的成员(二)

--LinuxCPP0907

-9.8 类与对象的成员(三)

--LinuxCPP0908

-9.9 继承(一)

--LinuxCPP0909

-9.10 继承(二)

--LinuxCPP0910

-9.11 继承(三)

--LinuxCPP0911

-9.12 多态(一)

--LinuxCPP0912

-9.13 多态(二)

--LinuxCPP0913

-9.14 编程实践

--LinuxCPP0914

-第九讲 类与对象--编程实践提交入口

第十讲 操作符重载

-10.1 提纲

--LinuxCPP1001

-10.2 四则运算符重载(一)

--LinuxCPP1002

-10.3 四则运算符重载(二)

--LinuxCPP1003

-10.4 关系与下标操作符重载

--LinuxCPP1004

-10.5 赋值操作符重载(一)

--LinuxCPP1005

-10.6 赋值操作符重载(二)

--LinuxCPP1006

-10.7 赋值操作符重载(三)

--LinuxCPP1007

-10.8 赋值操作符重载(四)

--LinuxCPP1008

-10.9 赋值操作符重载(五)

--LinuxCPP1009

-10.10 流操作符重载(一)

--LinuxCPP1010

-10.11 流操作符重载(二)

--LinuxCPP1011

-10.12 流操作符重载(三)

--LinuxCPP1012

-10.13 操作符重载总结

--LinuxCPP1013

-10.14 编程实践

--LinuxCPP1014

-第十讲 操作符重载--编程实践提交入口

第十一讲 泛型编程

-11.1 提纲

--LinuxCPP1101

-11.2 泛型编程概览

--LinuxCPP1102

-11.3 异常处理机制(一)

--LinuxCPP1103

-11.4 异常处理机制(二)

--LinuxCPP1104

-11.5 运行期型式信息(一)

--LinuxCPP1105

-11.6 运行期型式信息(二)

--LinuxCPP1106

-11.7 模板与型式参数化

--LinuxCPP1107

-11.8 题外话:术语翻译

--LinuxCPP1108

-11.9 泛型编程实践(一)

--LinuxCPP1109

-11.10 泛型编程实践(二)

--LinuxCPP1110

-11.11 泛型编程实践(三)

--LinuxCPP1111

-11.12 泛型编程实践(四)

--LinuxCPP1112

-11.13 泛型编程实践(五)

--LinuxCPP1113

-11.14 泛型编程实践(六)

--LinuxCPP1114

-11.15 泛型编程实践(七)

--LinuxCPP1115

-11.16 泛型编程实践(八)

--LinuxCPP1116

-11.17 泛型编程实践(九)

--LinuxCPP1117

-11.18 泛型编程实践(十)

--LinuxCPP1118

-11.19 编程实践

--LinuxCPP1119

-第十一讲 泛型编程--编程实践提交入口

第十二讲 Linux系统编程基础

-12.1 提纲

--LinuxCPP1201

-12.2 程序执行环境(一)

--LinuxCPP1202

-12.3 程序执行环境(二)

--LinuxCPP1203

-12.4 程序执行环境(三)

--LinuxCPP1204

-12.5 程序执行环境(四)

--LinuxCPP1205

-12.6 输入输出(一)

--LinuxCPP1206

-12.7 输入输出(二)

--LinuxCPP1207

-12.8 文件系统

--LinuxCPP1208

-12.9 设备

--LinuxCPP1209

-12.10 库(一)

--LinuxCPP1210

-12.11 库(二)

--LinuxCPP1211

-12.12 makefile文件(一)

--LinuxCPP1212

-12.13 makefile文件(二)

--LinuxCPP1213

-12.14 makefile文件(三)

--LinuxCPP1214

-12.15 编程实践

--LinuxCPP1215

-第十二讲 Linux系统编程基础--编程实践提交入口

第十三讲 进程编程

-13.01 提纲

--LinuxCPP1301

-13.02 进程基本概念

--LinuxCPP1302

-13.03 信号

--LinuxCPP1303

-13.04 进程管理(一)

--LinuxCPP1304

-13.05 进程管理(二)

--LinuxCPP1305

-13.06 进程管理(三)

--LinuxCPP1306

-13.07 进程间通信(一)

--LinuxCPP1307

-13.08 进程间通信(二)

--LinuxCPP1308

-13.09 进程间通信(三)

--LinuxCPP1309

-13.10 进程间通信(四)

--LinuxCPP1310

-13.11 进程池

--LinuxCPP1311

-13.12 编程实践

--LinuxCPP1312

-第十三讲 进程编程--编程实践提交入口

第十四讲 线程编程

-14.1 提纲

--LinuxCPP1401

-14.2 线程基本概念

--LinuxCPP1402

-14.3 线程管理(一)

--LinuxCPP1403

-14.4 线程管理(二)

--LinuxCPP1404

-14.5 线程管理(三)

--LinuxCPP1405

-14.6 线程管理(四)

--LinuxCPP1406

-14.7 线程同步机制(一)

--LinuxCPP1407

-14.8 线程同步机制(二)

--LinuxCPP1408

-14.9 C++11线程库(一)

--LinuxCPP1409

-14.10 C++11线程库(二)

--LinuxCPP1410

-14.11 C++11线程库(三)

--LinuxCPP1411

-14.12 C++11线程库(四)

--LinuxCPP1412

-14.13 C++11线程库(五)

--LinuxCPP1413

-14.14 编程实践

--LinuxCPP1414

-第十四讲 线程编程--编程实践提交入口

第十五讲 网络编程

-15.1 提纲

--LinuxCPP1501

-15.2 Internet网络协议

--LinuxCPP1502

-15.3 套接字(一)

--LinuxCPP1503

-15.4 套接字(二)

--LinuxCPP1504

-15.5 编程实践

--LinuxCPP1505

-第十五讲 网络编程--编程实践提交入口

课程文档

-课程PDF文件

LinuxCPP1502笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。