计算机网络学习笔记一、二章
——源自哈尔滨工业大学慕课mooc上的《计算机网络》。
1.1什么是网络协议
协议的三要素:
语法
语义
时序
1.2计算机网络结构
网络边缘
接入网络、物理介质
网络核心
1.3网络核心
数据交换的类型
电路交换:
最典型的电路交换网络:电话网络
三个阶段:1.建立链接 2.通信 3.释放链接
特点:独占资源
技术:多路复用。包括频分多路复用(FDM),时分多路复用(TDM),波分多路复用(WDM),码分多路复用(CDM)
FDM(Frequency-division multiplexing):频分多路复用的各用户占用不同的带宽资源(频率带宽),并且在通信过程中自始至终都占用这个频带。
WDM(Wavelength Division Multiplexing):波分复用就是光的频分复用。
TDM(Time Division Multiplexer):将时间划分为一段段等长的时分复用帧(TDM帧),每个用户在每个TDM帧中占用固定序号的时隙,每个用户所占用的时隙周期性出现。各用户可以使用相同频率载波。
CDM(code division multiplexing):广泛应用于无线链路共享。每个用户分配一个唯一的m bit码片序列,其中“0”用“-1”表示,“1”用"+1"表示。各用户使用相同频率载波,利用各自码片序列编码数据。编码信号=原始数据X码片序列。条件:各用户码片序列必须相互正交。
{报文交换和分组交换都采用存储-转发的交换方式}
报文交换:
报文:发送信息整体
分组交换:(统计多路复用,按需共享链路)
包括:数据包交换、虚电路交换
分组:报文拆分出来的一系列相对较小的数据包。(在数据前加上头部信息->分组)
分组交换需要报文的拆分与重组->产生额外的开销
传输延迟:
分组交换适用于突发数据传输网络->资源充分共享,简单、无需呼叫建立
可能产生拥塞:分组延迟和丢失->需要协议处理可靠数据传输和拥塞控制
1.4:计算机网络性能
速率:即数据率/数据传输速率/比特率->单位时间(s)传输信息(比特)量
K=103、M=106、G=109
速率往往指额定速率或标称速率
带宽:原本指信号具有的频带宽度,即最高频率与最低频率之差,单位是赫兹。在计算机网络中,
指数字信道所能传送的“最高数据率”
延迟/时延:传输延迟和其他延迟等
丢包:如果缓存满了,则到达分组被丢弃
分组交换发生丢包和时延的原因:分组在路由器缓存中排队。
四种分组延迟:
节点处理延迟(dproc):差错检测、确定输出链路...
排队延迟(dqueue):等待输出链路可用,取决于路由器拥塞程度(不确定)
传输延迟(dtrans):分组长度L(bits)、链路带宽R(bps),d=L/R
传播延迟(dprop):物理链路长度/信号传播速度
注:
传输延迟:完成一个分组需要的时间
传播延迟:信号在路上传播需要的时间
dnodal=dproc+dqueue+dtrans+dprop
时延带宽积/以比特为单位的链路长度=传播时延x带宽
分组丢失(丢包):队列缓存容量有限;分组到达已满,队列将被丢弃;丢弃的分组可能由前序结点或源重发(也可能不重发)
丢包率=丢包数/已发分组数
吞吐量/率:表示在发送端与接收端之间传送数据速率(b/s)。可以分为即时吞吐量与平均吞吐量
瓶颈链路:端到端路径上,限制端到端吞吐量的链路
1.5:计算机网络体系结构
分层结构:每一层完成一种特定的服务/功能
实体:表示任何可发送或接收信息的硬件或软件进程
协议:控制两个对等实体进行通信的规则的集合,协议是“水平的”。
下层协议的实现对上层的服务用户是透明的。
OSI参考模型:
物理层:
数据单位:比特
接口特性:机械特性、电气特性、功能特性、规程特性
传输模式:单工、半双工、全双工
数据链路层:
数据单位:帧
负责物理链路间结点-结点的数据传输
组帧:加头加尾等信息构成帧
物理寻址:在帧头中增加发送端和/或接收端的物理地址 标识数据帧的发送端和/或接收端
流量控制:避免淹没接收端
差错控制:检测并重传损坏或丢失帧,避免重复帧
访问(接入)控制:在任一给定时刻决定哪个设备拥有链路的控制使用权
网络层:
数据单位:数据报
负责源主机到目的主机的数据分组交付,可能穿越多个网络
逻辑寻址:全局唯一逻辑地址,确保数据分组被送达目的主机,如IP地址。
路由:路由器互连网络,实现路径选择
分组转发
传输层:
数据单元:段
负责源-目的(端-端)进程间完整报文的传输
功能:
报文的分段和重组
SAP寻址:确保将完整报文提交给正确进程,如端口号
连接控制(逻辑连接)
流量控制
差错控制
会话层:
对话控制:对话的建立、维护
同步:在数据流中插入“同步点”
最“薄”的一层
表示层:
处理两个系统间交换信息的语法和语义问题
数据表示转化:转换为主机独立的编码
加密、解密
压缩、解压缩
应用层:
数据单位:报文
支持用户通过用户代理或网络接口,使用网络服务
TCP/IP参考模型:
5层参考模型:
2.1:网络应用层
网络应用体系结构
客户机/服务器(C/S):
服务器:提供服务,永久域名,可扩展性
客户机:使用服务,间歇性,动态IP,不与其他客户机直接通信
P2P(peer to peer):
无永远在线的服务器,任意结点可直接通讯,间歇性,动态IP->高度可伸缩、难于管理
(存在客户机进程和服务器进程之分)
补充:P2P是指网上各台计算机有相同的功能,无主从之分,一台计算机都是既可作为服务器,设定共享资源供网络中其他计算机所使用,又可以作为工作站,没有专用的服务器,也没有专用的工作站。对等网络是小型局域网常用的组网方式。
P2P拓扑结构性能对比图:来源(https://www.cnblogs.com/linsanshu/p/5546948.html)
混合结构(hybrid):
特点:文件传输时采用P2P结构,文件搜索时采用C/S结构
优点:有效地节省了中央服务器的带宽消耗,减少了系统的文件传输延时。
网络应用的服务需求
可靠性:文件传输、金融等
带宽:看视频
时延:如网络电话、游戏
(安全性)
Internet传输层服务模型
TCP:
面向连接:客户机/服务器进程间需建立连接
传输可靠,流量可控,拥塞控制(网络负载过重时可限制发方的发送速度)
不提供:时延保障、最小带宽保障
UDP:->提供人们掌控数据传输的能力
面向连接:无
不可靠的数据传输
不提供:可靠性传输、流量控制、拥塞控制、延迟保障、带宽保障
简洁对比图:
特定网络应用及协议
(举例说明)
HTTP协议:
采用请求/响应的模式
web对象的寻址:host name + path name -> URL
采用C/S结构:
客户->Browser:请求、接收、展示web对象
服务器->Web Server:响应客户的请求,发送对象
使用TCP传输服务:
http协议是无状态的:服务器不维护有关客户端过去所发请求的信息。
RTT(Round Trip Time):从客户端发送一个很小的数据包到服务器并返回所经历的时间
HTTP连接的两种类型:
非持久性连接:每个TCP连接最多允许传输一个对象(HTTP1.0)
该例子中,消息的传输完成需要22个RTT(打开网页2个,完成10个图片的链接20个)
响应时间:
存在的问题:
1、每个对象需要2个RTT
2、操作系统需要为每个TCP连接开销资源->浏览器打开多个并行的TCP连接->服务器端开销较大
持久性连接:每个TCP连接允许传输多个对象
(发送响应后,服务器保持TCP连接的打开->后续的HTTP消息可以通过该连接发送)
分类:
无流水的持久性连接:客户端收到前一个响应后才发送新的请求->每个被引用的对象耗时1个RTT(总耗时12个RTT=2+10)
带有流水机制的持久性连接(http 1.1 默认模式):客户端只要遇到一个引用对象就尽快发出请求->理想情况下,收到所有的引用对象只耗时1个RTT(总耗时3个RTT=2+1)
(图片来源:https://blog.csdn.net/qq_34802511/article/details/81354654)
HTTP协议的消息分类:
请求消息(ASCII):
通用格式:
上传输入的方法:
POST方法:网页经常需要填写表格、在请求消息的Entity body中上传客户端的输入
URL方法:使用GET方法,输入信息通过request line的URL字段上传
其他的一些方法:
HEAD:请求Server不要将所请求的对象放入响应消息中
PUT:将消息体中的文件上传到URL字段所指定的路径(HTTP/1.1)
DELETE:删除URL字段所指定的文件(HTTP/1.1)
响应消息:
(status line)状态行示例:200 OK 、404 Not Found、...
(关于Cookie的内容推荐博客:http://www.cnblogs.com/jasonwang2y60/p/6563875.html)
HTTP中的Cookie技术:
Cookie技术:某些网站为了辨别用户身份、进行session跟踪而存储在用户本地终端上的数据(通常经过加密)
Cookie补充:从定义上来说,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。让我们说得更具体一些:当用户使用浏览器访问一个支持Cookie的网站的时候,用户会提供包括用户名在内的个人信息并且提交至服务器;接着,服务器在向客户端回传相应的超文本的同时也会发回这些个人信息,当然这些信息并不是存放在HTTP响应体(Response Body)中的,而是存放于HTTP响应头(Response Header);当客户端浏览器接收到来自服务器的响应之后,浏览器会将这些信息存放在一个统一的位置
Cookie中的组件:
(Cookie其实是HTTP头的一部分)
Cookie的原理:
Cookie的作用:身份认证、购物车、推荐...
缺点:隐私问题;会增加宽带,增加流量消耗
Web缓存/代理服务器技术:
功能:能在不访问服务器的前提下满足客户端的HTTP请求
优点:
1、缩短客户请求的响应时间
2、减少流量开销
3、在大范围内实现有效的内容分发
特点:缓存既充当客户端,也充当服务器
缓存上的内容更新:使用条件性GET方法
浏览器请求流程图(来源:https://segmentfault.com/a/1190000006741200)
浏览器第一次请求流程图
浏览器再次请求时
---------------------------------
| SMTP,POP,IMAP |
| DNS |
| P2P应用 |
| Socket编程 |
| TCP |
| UDP |
-----------------------------------
2.2网络应用层的基本原理:
进程:主机上运行的程序。不同主机上运行的进程通过消息交换进行通信
客户机进程:发起通信的进程
服务器进程:等待通信请求的进程
进程间的通信:通过socket(套接字)发送/接收消息实现,其中,传输基础设施向进程提供API(包括传输协议的选择,参数的设置)
socket:socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作 抽象为几个简单的接口(即对TCP/IP协议进行了抽象和实现),供应用层调用以实现进程在网络中通信。
(来源:https://blog.csdn.net/antony1776/article/details/73717666)
socket的通信过程:
来源(https://www.cnblogs.com/linsanshu/p/5546948.html)
寻址进程:
1,每个进程必须拥有标识符
2,主机通过IP地址进行寻址
3,每一个需要通信的进程都有一个端口号(Port Number)
4,区分进程的标识符:IP地址+端口号
补充:
端口号可以用来标识同一个主机上通信的不同应用程序
消息传输:
1,需遵循应用层协议
应用层协议的内容:
消息的类型:请求消息、响应消息
消息的语法/格式
字段的语义
规则:进程何时/如何发送/响应消息
2,公开协议->允许互操作
3,私有协议->p2p文件共享应用
2.4:Email应用
Email应用(异步)的构成组件:
邮件客户端:读写收发信息,与服务器交互
邮件服务端:存储发给用户的Email
消息队列:存储等待发送的Email
SMTP协议:邮件服务器之间传递消息所使用的主要协议
客户端:发送消息的服务器
服务器:接收消息的服务器
使用邮件服务器架构的优点:
1.易收。客户端难以保证7X24小时在线,可以通过邮件服务器代替客户端接收邮件。
2.易发。接收方难以保证7X24小时在线,若通过客户端发邮件,则需要不断尝试,直到接收方在线。故可以发往接收方的邮件服务器,使其为接收方代收邮件。
依赖于TCP协议(传输的可靠性)
传输过程的三个阶段:
1、握手
2、消息的传输
3、关闭
SMTP协议采用命令/响应交互模式:
命令:ASCII文本
响应:状态代码和语句
SMTP协议的特点:
1、使用持久性连接
2、Email消息必须由7位ASCII码构成
3、SMTP服务器利用CRLF.CRLF(回车换行)确定消息的结束
SMTP与HTTP的对比:
命令和状态代码都是ASCII码
HTTP:每个对象封装在独立的响应消息中
SMTP:多个对象在由多个部分构成的消息中发送
Email的消息格式:
多媒体扩展:MIME。在邮件头部增加额外的行来声明MIME的内容类型
邮件访问协议:从服务器获取邮件
POP(Post Office Protocol):认证/授权和下载
IMAP(Internet Mail Access Protocol):更多功能、更复杂
HTTP:163,QQ Mail
关于POP协议(ASCII)
是无状态协议
POP协议的模式:
"下载并删除模式":不同客户端无法重读邮件
“下载并保持”模式:不同客户端可以保留邮件消息的拷贝
IMAP协议:
是有状态协议
课堂问题:
1.
2.IMAP和POP3的不同?并调研主流Email服务对IMAP协议的支持情况
2.5:DNS应用(Domain Name System)
解决Internet上主机/路由器的识别问题.(在网络应用层实现)
域名解析系统DNS(Internet核心功能):IP地址<->域名
1、由多层命名服务器构成的分布式数据库
2、应用层协议:完成名字的解析
DNS的服务:
1、域名向IP地址的翻译
2、主机别名
3、邮件服务器别名
4、负载均衡:web服务器(?)
问题:为什么不使用集中式的DNS?
1、单点失败问题
2、流量问题->流量大、成本高
3、距离问题->RTT大
4、维护性问题
分布式层次式数据库示意图:
运作过程:
根域名服务器(Root DNS Servers):
本地域名解析服务器无法解析域名时,需要访问根域名服务器。若根域名服务器不知道IP映射,则需访问权威服务器,从而获得映射,接着向本地域名服务器返回映射。
顶级域名服务器TLD(top-level domain):负责com,org,net,edu等,国家顶级域名:如cn,uk,fr等。
权威域名服务器:组织的域名解析服务器,提供组织内部服务器的解析服务。可由组织自身负责维护或者服务提供商负责维护。
本地域名解析服务器:每个ISP(Internet Server Provider)都有一个本地域名服务器(默认域名解析服务器)。当主机进行DNS查询时,本地域名服务器作为代理,会将查询转发给层级时的域名解析服务器系统。
补充:
DNS查询示例:
迭代查询:
递归查询:
问题:递归查询和迭代查询的差别?对各个域名解析器的负载有何不同?
DNS记录缓存和更新:
只要域名解析服务器获得域名-IP映射,即缓存这一映射;本地域名服务器一般会缓存顶级域名服务器的映射
思考题:
DNS记录:
资源记录RR(resource records)
fomat:(name,value,type,ttl)
Type=A:
Name:主机域名
Value:IP地址
Type=NS:
Name:域
Value:该域权威域名解析服务器的主机域名
Type=CNAME:
Name:某一真实域名的别名
Value:真实域名
Type=MX:
Value是与name相对应的邮件服务器
DNS协议与消息格式:
DNS协议:查询/回复
消息格式(查询/回复格式相同):
详细解析推荐博客:https://blog.csdn.net/tianxuhong/article/details/74922454
DNS->TCP or UDP?
----------------------------------------------------------------------------------
原文:https://blog.csdn.net/csdn_felix/article/details/80115475
DNS占用53号端口,同时使用TCP和UDP协议。
DNS在区域传输的时候使用TCP协议,其他时候使用UDP协议。
DNS区域传输的时候使用TCP协议:
1.辅域名服务器会定时(一般3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,会执行一次区域传送,进行数据同步。区域传送使用TCP而不是UDP,因为数据同步传送的数据量比一个请求应答的数据量要多得多。
2.TCP是一种可靠连接,保证了数据的准确性。
域名解析时使用UDP协议:
客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。不用经过三次握手,这样DNS服务器负载更低,响应更快。理论上说,客户端也可以指定向DNS服务器查询时用TCP,但事实上,很多DNS服务器进行配置的时候,仅支持UDP查询包。
-----------------------------------------------------------------------------------
思考题:
2.6:P2P应用
纯P2P架构的特点:
P2P架构和C/S架构下载文件时花费的时间对比:(横轴为用户/结点数量)
P2P架构的典型应用:BitTorrent
BitTorrent:BitTorrent是一种用来在网络上传输文件的协议(Protocol),它本质上是分布式系统的P2P(点对点)传输文件协议,用户直接相连,然后互相发送和接收文件的各部分。
torrent:本质上是文本文件,包含Tracker信息和文件信息两部分。
tracker:协调各个用户之间的协作。Tracker服务器只是管理连接,对发布的文件内容并不关心,也不传输文件内容,因此Tracker可以用很少的带宽就可以支持大量的用户。
BT的下载过程:
如何获取chunk:
如何发送chunk:
即:上传速率高,则能够找到更好的交易伙伴,从而更快地获取文件
问题:BitTorrent技术对网络性能有哪些潜在的危害?
1、对版权的侵害
2、P2P应用是带宽的主要消耗者,易造成网络的极度拥塞
3、对硬盘的损害
P2P应用中的索引技术:
P2P系统的索引:信息到节点位置(IP地址+端口号)的映射
例如:文件共享(电驴)
例如:即时消息(QQ)
索引的设计:
1、集中式索引(Napster)
缺点:
2、分布式的索引(洪泛式查询query flooding)
覆盖网络:两个节点之间如果有TCP连接,则构成一条边,所有的活动节点和边构成覆盖网络
查询消息通过已有的TCP连接发送(Query),收到查询消息的节点继续转发查询消息。如果查询命中(Query Hit),则利用反向路径发回查询节点
缺点:会大量消耗网络带宽,导致网络拥塞
3、层次式覆盖网络
是介于集中式索引和洪泛查询之间的方法
节点的分类:超级节点和普通节点。
每个普通节点被分配一个超级节点。普通节点和超级节点间维持TCP连接,某些超级节点之间维持TCP连接。超级节点负责跟踪子节点的内容
局部内部->集中式;超级节点之间->分布式
应用案例:Skype
2.7:socket编程
应用编程接口API:应用进程的控制权和操作系统的控制权进行转换的一个系统调用接口
几种典型的应用编程接口:
套接字、Windows Socket Interface(WINSOCK)、TLI(Transport Layer Interface)
Socket API:
标识通信端点(对外):IP地址+端口号
操作系统/进程通过套接字描述符(socket descriptor)管理套接字(对内)
Socket抽象:
地址结构:
Socket API函数(WInSock):
WSAStartup:
Socket的应用程序在使用Socket之前必须首先调用该函数;
两个参数:
第一个参数:指明程序请求使用的WinSock版本,其中,高位字节指明副版本号、低位字节指明主版本。如0x102表示2.1版
第二个参数:返回实际的WinSock版本信息,指向WSADATA结构的指针
WSACleanup:
应用程序完成对Socket库的使用后,最后要调用WSACleanup函数->解除与Socket库的绑定,释放Socket库占用的系统资源
socket:
调用socket创建套接字,操作系统返回套接字描述符(sd)
其中,第二个参数的具体应用:
Closesocket:
性质:
bind:
服务器端在不同的网络中拥有不同的IP地址->通过 地址通配符 INADDR_ANY解决,不应该指定确定的IP地址
listen:
connect:
accept:
send,sendto:
recv,recvfrom:
setsockopt,getsockopt:
------------------------------------------------------------------------------------------------
小节:
--------------------------------------------------------------------------------------------------
网络字节顺序:
SocketAPI 调用基本流程:
解析服务器IP地址:
IP协议需要使用32位二进制IP地址。
将域名或IP地址转换位32位IP地址的函数:
解析服务器(熟知)端口号:
将服务名(如http)转换为熟知端口号的函数:
解析协议号:
需要将协议名转换为协议号:
TCP客户端软件流程:
UDP客户端软件流程:(客户端先发信息)
客户端软件的实现-connectsock()
客户端软件的实现-UDP客户端
客户端软件的实现-TCP客户端:
客户端软件的实现-异常处理
例:
访问DAYTIME服务的客户端(TCP):
(数据流传输)
访问DATTIME服务的客户端(UDP):
(数据报传输)
MSG:给DAYTIME服务器发送的消息
基于套接字编程的服务器端软件设计:
4种类型基本服务器:
循环无连接服务器基本流程:
数据发送:
客户的端点地址在调用recvfrom()函数接收数据时 自动提取:
循环面向连接服务器的基本流程:
并发无连接服务器基本流程:
并发面向连接服务器的基本流程:
服务器的实现:
passivesock:
passiveUDP():
passiveTCP():