计算机网络之网尽其用
1 计算机网络概述
1.1 什么是计算机网络
- 计算机网络是通信技术与计算机技术紧密结合的产物
- 计算机网络就是一种通信网络
-
通过交换网络互连主机
-
什么是Internet?----组成细节角度
- 什么是Internet?—服务角度
1.2 网络协议
- 协议是计算机网络有序运行的重要保证
- 硬件(主机、路由器、通信链路等)是计算机网络的基础;
- 计算机网络中的数据交换必须遵守事先约定好的规则;
-
网络协议(network protocol)定义
- 网络协议是以进行网络中的数据交换而建立的规则、标准或约定;
- 协议规定了通信实体之间所交换的消息的格式、意义、顺序以及针对收到消息或发生的事件所采取的“动作”(actions);
-
协议三要素
-
协议是计算机网络的重要内容
-
Internet协议标准
- RFC(Request for Comments),
- IEIF:互联网工程任务组(Internet Engineering Task Force);
1.3 计算机网络结构
1.3.1 网络边缘
1.3.2 接入网络
- 1、接入网络:数字用户线路(DSL)(电话线)
- 2、接入网络:电缆网络(有线电视)
- 3、机构(企业)接入网络(Ethernet)
- 4、无线接入网络(WIFI和4G)
1.3.3 网络核心
- 网络核心解决的基本问题就是数据交换
1.4 Internet结构:网络之网络
- 总结目前网络状况-Internet网络
1.5 数据交换
- 网络核心解决的重要问题:数据交换
- 数据交换的类型
- 电路交换
- 报文交换
- 分组交换
1.5.1 电路交换
- 1、电路交换的特点
- 2、电路交换网络的链路共享?
- 3、多路复用技术
- 4、多路复用技术—频分多路复用FDM
- 5、多路复用技术—时分多路复用TDM
- 6、多路复用技术—波分多路复用WDM
- 7、多路复用技术—码分多路复用CDM
- 不同用户之间相乘(正交)只会得到0;
- 一个用户发送时:
- 多个用户发送时
1.5.2 报文、分组交换
- 报文是一个整体进行传输;
- 分组是拆分报文成小数据包(会加上一些信息)
- 1、分组交换:统计多路复用
- 并不是事先分配好的,随机分配,按需共享链路
- 2、存储-转发
- 为了比较以上报文交换和分组交换的优缺点,首先引入计算分组交换的传输延迟;
-
3、分组交换:传输延迟
-
4、报文交换 vs 分组交换
- 报文交换的方式,需要中间路由器缓存至少7.5Mbits
- 分组交换中间路由器缓存也少很多,目前主要以分组交换的方式为主;
- 5、分组交换的报文交付时间
- 6、分组交换(统计) vs 电路交换(复用)
- 电路交换需要提前建立连接,占用不释放是不可以被其他用户使用的;
- 分组交换,不预先分配,按需分配;
1.6 计算机网络性能
1.6.1 速率(b/s)
1.6.2 带宽(b/s)
1.6.3 延迟/时延(delay/latency)
- 四种分组延迟
- 传输延迟:发出去的时延;(整个车队通过收费站时间)
- 传播延迟:在路上传输的时延;
- 排队延迟(具有随机性)
1.6.4 时延带宽积
- 带宽(bps)最高传输速率
1.6.5 丢包率
- 分组丢失(丢包)
1.6.6 吞吐量/率(Throughput)
2 计算机网络体系结构
2.1 计算机网络体系
- 1、网络体系结构是从功能上描述计算机网络结构
- 2、分层结构
- 分层过多会导致效率降低;
- 3、分层网络体系结构基本概念
2.2 OSI参考模型
2.2.1 OSI标准
- 1、OSI参考模型解释的通信过程
- 实线连接的部分是真正传输物理的部分通路;
- 虚线是对等层之间的逻辑数据传输;
- 2、OSI参考模型数据封装与通信过程
- 3、为什么要数据封装?
2.2.2 物理层功能-1bit传输
2.2.3 数据链路层功能
- 同一物理链路直接相连的两个结点的数据传输;
- 地址信息在数据链路层;
- 两个结点为什么需要地址寻址,如下图所示:
- 只有自己地址匹配才会接收;
2.2.4 网络层功能
2.2.5 传输层功能
- 需要将完整报文分割成段;第一个端到端的控制;
2.2.6 会话层功能
- 插入控制信息,会话层功能单薄,实际是不单独存在的
2.2.7 表示层功能
2.2.8 应用层功能
2.3 TCP/IP参考模型
- 先实现后总结出的模型;
2.4 5层参考模型
2.4.1 5层模型的数据封装
- 此处可以很好地反映交换机和路由器的区别;
- 报文->段(拆分报文,加上段头)->数据报(网络层)-> 帧(链路层)->bit(物理层);
- 网络层功能:路由,逻辑寻址,分组转发
2.5 计算机网络与Internet发展历史
3 应用层
- 学习内容
3.1 网络应用概述
3.1.1 网络应用的三种体系结构
- 1、客户机/服务器结构
- 2、纯P2P结构
- 3、混合结构
3.1.2 网路应用进程通信
- 1、网路应用的基础:进程间通信
- 2、套接字:Socket
- 3、如何寻址进程::IP地址+端口号
- 4、应用层协议
- 5、应用层协议的内容
3.1.3 网络应用需求与传输层服务
- 1、网络应用的需求指标
- 2、Internet提供的传输服务
- 3、典型网络应用所使用的传输层服务
3.2 WEB应用(HTTP,Cookie)
3.2.1 WEB应用概述
- World Wide Web
- 1、Web与HTTP
- Web所遵循的协议就是HTTP协议;
- 超文本传输协议,HyperText Transfer Protocol
- 2、HTTP协议概述
- 使用传输层的TCP协议
- 无状态不维护过去的状态,不记录历史信息;
3.2.2 HTTP协议连接类型
- 1、非持久性连接(每次只允许传输一个对象)
- 2、响应时间分析与建模
- 3、持久性HTTP
3.2.3 HTTP请求消息格式
- 1、HTTP请求消息
- 请求行+请求头+请求空行+请求主体
-
2、HTTP请求消息的通用格式
-
3、上传输入的方法
- 4、方法的类型
3.2.4 HTTP响应消息格式
- 1、HTTP响应格式
- 状态行+头部行+空行+响应消息主体
- 2、HTTP响应状态代码
3.2.5 Cookie技术(HTTP拓展技术)
- HTTP协议无状态,但是很多服务需要记录(如购物);cookie用来记录状态;
- 1、Cookie的原理
- 2、Cookie的作用
3.2.6 Web缓存/代理服务器技术
- 1、Web缓存/代理服务器技术
- 2、Web缓存示例
- 扩大链路带宽,成本高;
- 使用代理服务器
- 代理服务器的更新问题;
- 3、条件性GET方法
3.3 Email应用(SMTP)
3.3.1 Email应用的构成
- 自己的客户端不会24小时一直开着,进行接收;
3.3.2 SMTP协议:RFC 2821
- SMTP:命令和响应的模式;
- HTTP:请求和响应的模式;
- Email应用示例(异步应用)
- SMTP交互示例
- SMTP协议
3.3.3 Email消息格式
- 1、Email基本格式
- 2、Email消息格式:多媒体扩展
- 3、邮件访问协议(POP和IMAP)
- 发送邮件、邮件服务器之间的通信都是SMTP,但是从服务器获取邮件是使用邮件访问协议;
- 4、POP协议
- POP3协议有多种模式,
- 4、IMAP协议
3.4 DNS(Domin Name System)
- 解决主机/路由器的识别问题;
- 域名与IP地址的映射;
3.4.1 DNS概述(域名解析系统)
- 为很多主机/路由不间断完成翻译任务;变得挑战性;
- 本身是DNS应用层协议;
- 提供核心功能,但在应用层实现;
- 1、分布式层次式数据库
- 缺点是需要进行三次查询;
- 2、DNS根域名服务器
- 3、TLD和权威域名解析服务器
- 4、本地域名解析服务器
- 不属于层级体系
- 5、DNS查询示例
- 迭代查询
- 先问本地Local,再问根域名服务器,root返回一个顶级地址,再问TLD域名服务器,再返回一个权威地址,再问权威域名服务器;获得IP地址;
- 递归查询
- 6、DNS记录缓存和更新
3.4.2 DNS记录和消息格式
- 1、DNS记录
- 2、DNS协议与消息
- DNS是查询和服务的模式,消息格式相同
- 3、如何注册域名?
3.5 P2P应用
- 以上学习的WEB应用和DNS应用都是C/S客户端/服务器模式;
- 下面学习P2P模式;
3.5.1 P2P应用_原理与文件分发
- 1、纯P2P架构
- 缺点是比较复杂;
- 2、文件分发:客户机/服务器 vs P2P
- 文件分发:客户机/服务器
- 时间跟随N线性增长;只能由服务器将副本分别发给N个节点,
- 文件分发:P2P
- 对于P2P,当服务器上传第一个副本给一个节点的时候,就可以开始了一个节点向其他节点开始传送;
- 可以看到,当节点数N不断增大,P2P的耗时趋于平稳,而服务器/客户端模式就线性增长;
- 3、文件分发:BitTorrent
- 典型协议Bit,P2P;
3.5.2 P2P应用_索引技术
- 1、P2P:搜索信息
- 2、集中式索引
- 虽然文件分发是P2P的,但是查询文件位置,是需要问中央服务器;
- 因此,存在以下问题:
- 3、洪范式查询:Query flooding
- 向它连接的所有节点发送查询消息,然后再节点转发查询消息,找到位置后,反向索引;
- 缺点:消息会像洪水一样泛滥在网络中,加重网络负担;
- 综合以上两种方式,产生以下层次式覆盖网络
- 4、层次式覆盖网络
- 5、P2P案例应用:Skype
3.6 Socket编程-应用编程接口
3.6.1 典型的应用编程接口
- 1、网络程序设计接口
- 2、应用编程接口API
- 应用进程控制与操作系统控制的传输层,之间的数据交互,就是通过接口API;
- 3、几种典型的应用编程接口
- 应用最广泛的就是套接字(socket)
3.6.2 Socket API概述
- socket套接字为服务器应用进程与客户端应用进程之间创建了一种抽象通信机制;
- 每一个服务器/客户端可能有多个进程,产生多个套接字;
- 当客户端的应用进程连接,怎么确定连接哪个套接字?
- IP地址+端口号(唯一确定对外)
- (对内是套接字描述符)
- 1、Scoket抽象
- 将Scoket看做一个特殊的文件;会有一个数据结构;
- 每一个进程的套接字都会维护这个数据结构;
- 2、地址结构
3.6.3 Socket API函数(WinSock)1
- 一般以WSA开头的API扩展函数
- 首先调用
WSAStartup
初始化,最后要调用WSACleanup
释放动态链接库;
- 1、WSAStartup
- 两个参数:一个是WinSock版本,一个是数据结构的指针;
- 2、WSACleanup
- 3、socket
- 第一个参数,是说明确定是哪个传输层协议簇;
- 第二个参数,创建哪种套接字;第三个参数
- 4、Socket面向TCP/IP的服务类型
- 套接字架起了传输层与应用层之间的数据交换;
- 还有跟网络层交互;称为SOCK_RAW原始套接字,一般需要特殊权限(root)
- 5、Closesocket
- 6、bind(绑定本地地址端口号)
- 服务端bind,客户端不需要,会自动调用分配;
- bind返回地址通配符,而不指定特定IP地址;
3.6.4 Socket API函数(WinSock)2
- 1、listen(服务端置监听模式,等待连接)
- 多个客户端发起套接字请求,就有等待队列;
- 2、connect(客户端专用)
- 3、accept(服务器专用,返回一个新套接字)
- 4、send,sendto(发送数据)
- 5、recv、recvfrom(接收数据)
-
6、setsockopt,getsockopt(设置套接字参数,读取套接字参数)
-
7、Scoket API函数小结
- 8、关于网络字节顺序
3.6.5 网络应用的Socket API(TCP)调用
- 1、Socket API(TCP)调用基本流程
3.6.6 Socket编程-客户端软件设计
- 1、解析服务器IP地址
- 2、解析服务器(熟知)端口号
- 3、解析协议号
- 4、TCP客户端软件流程
- 绿色是包含函数中自动完成的,不需要我们设置;
- 5、UDP客户端软件流程
- 6、客户端软件的实现-connectsock()
- 7、客户端软件的实现-UDP客户端
- 8、客户端软件的实现-TCP客户端
- 9、客户端软件的实现-异常处理
3.6.7 Socket编程-服务器软件设计
- 1、四种类型基本服务器
- 2、循环无连接服务器基本流程
- 循环:一次只处理一个客户端,结束之后再处理下一个,无连接:UDP
- 数据发送
- 参数分别是,
- socket:服务器(UDP)套接字;
- data:一个指针,指向存储待发送数据缓存的地址;
- length:缓存中数据字节数;
- flags:调试或控制选项;
- destaddr:指向结构sockaddr_in的指针(客户端端点地址);
- addrlen:地址结构长度;
- 获取客户端点地址
- 参数分别是:
- socket:(UDP)服务器套接字;
- buf:一个指针,指向存放数据报的缓存地址;
- length:缓存可用空间;
- flags:调试或控制选项;
- from:存放源地址的缓存地址,就是客户端点地址;
- fromlen:源地址长度
- 3、循环面向连接服务器基本流程
- 4、并发无连接服务器基本流程
- 创建新线程;
- 5、并发面向连接服务器基本流程
- 6、服务器的实现