计算机网络笔记

因特网是成千上万个计算设备(主机)组成的系统
通信连路:有线和无线
带宽是速率的理想最大值
互联网的拓扑结构:星型(单点故障)、树形(星型的结连)、总线型(分布式,必须竞争,容易冲突,不存在单点故障)、网状、环形(数据传输的顺序固定,单点故障)
协议的功能:1、规定数据包的格式 2、规定发生了某件事之后会执行那些动作。
定义:网络协议是为进行网络中的数据交换而建立的规则、标准或约定的集合
网络协议的三要素:1、语法(数据与控制信息的结构或格式)
2、语义(需要发出何种控制信息,完成何种动作,做出何种相应) 
3、同步(事件实现顺序的详细说明(时序))

网络的结构
网络边缘:包含网络应用和主机
网络核心:路由器
接入网:链接网络边缘和网络核心的部分,有线无线的通信连路(带宽约束的地方)

交换:分为电路交换和分组交换

电路交换:建立连接,然后共享资源,都是固定资源分配方法
平分(FDM):横着切,带宽平均分配(电台广播)也可能浪费
时分(TDM):竖着切,分成多个时隙(要等到自己的时隙才能发信息,可能造成浪费)

分组交换:按需分配,按需分配(互联网使用)
基本策略:存储转发(先把数据包存下来,再发出去)。

分组交换可能有延迟丢包,但是电路交换没有这些问题。

性能指标:
造成延迟:路由器接受数据包的速率大于发送数据包的速率,形成队列,数据包也需要处理时间,发送时间等
延迟组成部分:1、节点处理延迟(如差错处理,很小),排队延迟(可能很大可能很小,取决于网络状态,主要),发送延迟(传输延迟=数据包大小/带宽),传播延迟(从一个节点到另一个节点的时间,=距离/速率)
流量强度:进来的数据量/发送的数据量,决定排队延迟

丢包:队列长到一定程度就会丢包
丢包率,到达率, 加和=1
吞吐量:单位时间内传输的比特(b/s),等于瓶颈带宽

宽带和窄带传输速率是一样的
宽带中两个数据包之间的间隔比较窄,窄带中两个数据包之间的间隔比较宽,两者发包的速率不一样
网络中数据传输都是串行的

延迟的变化叫做抖动

协议栈:
分层的好处:模块化独立,便于维护
因特网的协议栈分五层:第一层 物理层(physical),第二层 数据链路层(link),第三层 网络层(network),第四层 传输层(transport),第五层 应用层(application)
物理层:传输比特流
数据链路层:相邻节点的数据传输(PPP)
网络层:主机到主机的数据传输(IP)
传输层:进程到进程之间的数据传输(TCP,UDP)
应用层:运行网络应用程序 (FTP,SMTP,HTTP,DNS)
相同层之间通过协议,上下层之间通过接口

ISO/OSI:第一层 物理层(physical),第二层 数据链路层(link),第三层 网络层(network),第四层 传输层(transition),第五层 会话层(session),第六层 表示层(presentation),第七层 应用层(application)
应用层数据单位:报文或消息
传输层数据单元:报文段
网络层数据单元:数据报
链路层数据单元:帧        加首部加尾部
物理层数据单元:比特

交换机是二层设备:物理层,数据链路层
路由器是三层设备:物理层,数据链路层,网络层

应用层:
CS体系架构,
P2P架构(节点与节点是对等地位,各个节点可以是客户端也可以是服务器,可以相互通信,节点也可以随时加入或离开,可扩展性好,如Skype)
进程通信:发起的是服务器进程,获取的是客户端进程
socket可以让进程选择传输层的协议,是TCP还是UDP
IP地址可以标识主机,端口号可以标识同一主机上的不同进程

传输层对应用层提供了两种服务:可靠的(TCP)和不可靠的(UDP)

email的应用层协议:SMTP,依赖的传输层服务:TCP
Web的应用层协议:HTTP,依赖的传输层服务:TCP
文件传输的应用层协议:FTP,依赖的传输层服务:TCP

HTTP超文本传输协议,HTTP是无状态的,不保存历史信息
HTTP链接可以分为:1、非坚持的连接(每次连接最多下载一个object)
2、坚持的连接(可以在同一个连接中下载多个object)
HTTP的两种类型的报文:request、response

RTT:数据包一去一回的时间
cookie是服务器给浏览器的一个ID,来弥补HTTP无状态的不足
代理服务器(web缓存)如果有web页面的拷贝,当用户申请的时候他会直接把拷贝反馈回来,如果没有拷贝,就会向原始服务器把web页面缓存下来,再反馈给主机。
代理服务器可以使用有条件的GET,代理服务器每次都会都向原始服务器发送信息,如果没有被更新,就发送没更新信息,否则发送新页面。
FTP会建立两条TCP连接,第一条是登陆FTP服务器的时候,传输的是控制的命令信息(端口号21)。上传或下载文件的时候会建立一个TCP连接,专门用来传输文件数据(端口号20),但是每个这种连接只能传输一个文件

电子邮件(Electronic Mail)
user agents(写电子邮件)
mail servers
协议:SMTP
user agents和mail servers之间,mail servers和mail servers之间使用的协议都是SMTP
SMTP端口号是25,使用的是直接传输:发送端服务器和接收端服务器直接传输,不中转
服务器之间传输的三个组成部分:
1、握手
2、发送信息
3、关闭
SMTP和HTTP使用的都是TCP协议,但是HTTP使用的是拉(pull)的过程,SMTP使用的是推(push)的过程
收邮件时使用的协议是POP、IMAP、HTTP
使用MIME来扩展SMTP

DNS可以是应用也可以是协议,是一种分布式的数据库
DNS的服务:
1、主机名到IP地址的映射
2、主机的别名
3、邮件服务器的别名
4、负载均衡

根域名服务器(13个)->顶级域名服务器->权威域名服务器--...->本地域名服务器
DNS协议规定两种报文类型:query和reply

p2p的定义都有共同之处:
1、P2P是用来共享资源的
2、节点与节点之间是直接通信的
3、没有中心的控制
CS架构:
1、难以扩展
2、可能会有单点故障
3、没有充分利用资源尤其是客户端的资源
P2P的特点:
1、所有节点既使客户端也是服务器,也可以充当路由器,来进行转发
2、没有中心数据源
3、节点具有自主性
4、网络是动态的
5、节点与节点之间是直接合作的关系
6、各个节点之间具有差异性或异构性

P2P的好处:
1、资源可以有效利用
2、可扩展性强
3、可靠性强(数据来源不仅仅在服务器上)

应用:文件共享,多人游戏,合作应用,分布性计算,自主网络

挑战:
1、太分散了,难以管理
2、系统不能无限扩展,扩展之后可能性能下降
3、匿名问题
4、公平性问题(重要)
5、安全性
6、容错性,健壮性
P2P的核心功能:
1、共享内容
2、查找内容(可以是集中性的,设立一个服务器做一个目录的index,也可以做一个分布式的,纯P2P的形式,也可以用混合式的)
问题:1、只下载数据不上传数据,或者不共享有用的数据(自私性) 2、不知道那些数据源是可信的。

BitTorrent是P2P曾经很流行的应用协议,是在P2P架构下的文件共享
tracker是服务器,torrent是种子文件,存储了tracker的相应信息,当应用端获得种子文件之后,解析获得tracker的IP地址等信息,之后就可以向tracker来查询所需要的数据,tracker会反馈回来一个节点列表
文件分成数据块来下载,采用流水线的形式来实现快速下载
上传数据的时候每个节点最多会给5个节点上传数据,来保证自身的性能。

UDP发送数据包的时候,要把自己的IP地址和端口号带上。

传输层:提供两个主机不同进程之间的逻辑通信,他负责将应用层的报文增加首部打包成报文段,发给网络层,或者将网络层的数据报去除首部之后传输给应用层
传输层协议主要是TCP UTP(不提供延时保障)
UDP使用的理由:
1、UDP是无连接的,没有建立连接的延迟,也不需要保存连接的状态信息,减少了开销
2、UDP首部开销比较小(8个字节),UDP没有流量控制和拥塞控制,发送端发包的速率可以不受限制

应用:DNS,SNMP(通常是进行重复性操作的会使用UDP,因为他们通常允许丢包)
一般的多媒体应用都是基于UDP的
使用UDP的时候可以在应用层使用相关的协议来确保可靠性传输
UDP报文包括的内容:源端口号,目的端口号,表体数据长度,校验和(不是100%准确)。(报文一行是32个比特)
计算方法:分成若干个16比特的片段,两个16比特相加,如果有进位的就加到最低位,得到最后加和的结果再取反得到的结果就是校验和。

基于不可靠的信道实现可靠的数据传输:
比特出错:引入差错检测,如校验和,两种反馈,一个是ACK正面反馈,另一个是NAK负面反馈。如果是NAK就重传(但是ACK或者NAK也会出错)。
序列号用于解决冗余数据包问题,接收端接收到数据包n之后,如果发送端继续发送冗余数据包,只回复ACKn
停等协议:发送端发送数据包之后停下来等待接收端的反馈,只有得到正面的反馈之后才会接着发送数据包
NAK可以被ACK取代。

丢包:接收端根本收不到数据包,此时没有反馈,可以使用定时器超时重传。
流水线性协议(或背靠背型):允许多个数据包在网络上跑,提高了物理带宽的使用效率。
典型的流水线型协议:回退N步(累积确认)、选择重传(单独确认)
回退N步:是累计确认,只有一个定时器,如果超时了,会把所有在网络上跑的数据包都重传。
有N个数据包在网络上跑,N也称为窗口大小,在回退N步中,ACK(n)表示数据包n以及n以前的数据包都被正确收到了

选择重传:是单独确认,每个数据包都有一个定时器,那个数据包超时了,就重传那一个数据包。
乱序的数据包会被缓存下来,接收端的窗口大小不一定和发送端的窗口严格相等。只有正确顺序的数据包才会被往上传。

TCP是一对一,点对点的数据传输方式,如果需要使用一对多的传输方式需要使用UDP。
因此广播和组播只能使用UDP。
TCP将信息以字节流的方式传播
TCP还是全双工的,即可以同时收发数据
TCP是流水线型的,允许多个数据包同时在网络上跑
TCP还是面向连接的
TCP需要三次握手,有流量控制和拥塞控制
TCP报文格式:(每一行是32个比特)
第一行是源和目的端口号,各占16位
第二行是序列号
第三行是确认号
第四行...
第五行...
第六行可选
所以TCP至少有五行,20个字节
TCP会对报文段的每个字节都进行编号,每个报文段的编号是它占用的所有序列号中最小的序列号(seq)。
TCP的ACK确认号是希望从对方收到的下一个数据包的序列号

TCP采用流水线的形式,使用累积确认和单一的定时器,如果定时器超时了,他会重传编号最小的那个数据包。
冗余数据包是丢弃还是缓存并没有规定
接收端在收到乱序数据包的时候,会稍微等待一些时间,如果确实没有数据包了,就发送累积确认。
快速重传:TCP里面如果收到三次冗余ACK之后,不需要等待计时器超时就重传数据包。(减少因为定时器等待时间过长而导致的延迟)

流量控制:通过调节发送端发包速率,避免接收端的缓存溢出。
方法:接收端读取空余缓存,将数值放在ACK确认数据包里面的RcvWindow里面,反馈给发送端,发送端再根据RcvWindow里面的值来调节发送端发包窗口的大小(设置为不大于该值)。

三次握手:
1、客户端向服务器发送一个SYN数据包(SYN比特位置1的数据包),同时为SYN数据包分配一个初始化序列号(Seq=x)。虽然SYN数据包是空的,但是他依然会占用一个序列号。
2、服务器向客户端发送一个SYNACK数据包(即SYN比特位和ACK比特位都置1的数据包,但是不携带数据),服务器也会为他初始化一个序列号(Seq=y),还会发送一个确认号ACKnum=x+1。
3、客户端再向服务器发送一个普通的ACK数据包(即可以选择携带数据),这个ACK数据包不占用序列号,数据包里面还会有一个确认号ACKnum=y+1。

关闭连接:
客户端需要关闭:客户端发送一个FIN数据包(FIN比特位置1的数据包,占用一个序列号)给服务器,服务器收到之后回复一个ACK数据包(普通的ACK数据包)。
服务器端同理。
谁先关闭,顺序没有严格规定。
客户端和服务器只有一边关闭的时候称为半关闭状态。关闭的一方无法再向另一方发送数据,但是收到数据的时候依然可以回复ACK数据包。

拥塞控制:通过调节发送端发包的速率,来避免路由器缓存的溢出。(不关注接收端,只关注网络本身)
拥塞控制造成的问题:较长的延迟,资源的浪费。
方式:端到端,网络辅助(路由器根据自己的缓存情况告诉发送端来进行调节,Internet里不适用)。

TCP中发送窗口会设置为 流量控制窗口 和 拥塞控制窗口 的最小值。
TCP发包速率约 = 拥塞窗口/RTT。
调节拥塞窗口大小:
(加性增乘性减)
初始化时使用慢启动机制:congWin设置为一个MSS大小,之后每收到一个ACK,窗口就增加之前的两倍个MSS(指数增长)。
当速率达到阈值之后,发包的速率就会变成线性增长
发生了丢包:
    1、定时器超时:属于比较严重的拥塞状态,TCP会把congWin重置为1,再使用慢启动,和初始化是一样的。
    2、三次冗余ACK(快速恢复):数据不那么严重的状态。TCP会把窗口大小设置为之前的二分之一(相当于新定的阈值),然后重新线性增长。

网络层:实现主机到主机之间的通信,最主要的协议是IP协议。
网络层还有一个协议是ICMP,只报告(不处理)差错,在丢包发生之后,会通知发送端相关的情况。
很多路由协议或路由算法,如RIP,OSPF,BGP并不在网络层实现,而是在应用层实现
主要的功能:转发和路由
路由:确定一条从发送端到接收端的路径的过程
转发:在路由器内部执行,路由器把数据包从入口转移到出口的过程。
路由器如何进行转发:路由器内部维护着一个转发表,表中包含了header value和output link的键值对,进来的数据包首部的特定比特位和表中的键进行匹配,从而得到该数据包对应的发送口编号。
网络层提供连接服务的网络,称为虚电路网络,不提供连接服务的网络,如Internet称为数据报网络。

因特网的网络层使用数据报通信,没有应答,重传等保证机制,所以提供的是一种不可靠的网络服务。
因特网的可靠传输服务主要由TCP协议来完成,TCP协议不仅保证可靠传输,还提供流量控制和拥塞控制等服务,这样TCP与IP协议的结合就可以完成可靠的网络传输服务。

路由器组成:出入端,输出端,交换单元,处理器。路由器能够执行路由算法。
路由器能够通过 *共享内存* *总线型* *crossBar*的方式将输入端的数据包传输到输出端。

IP数据报首部的开销也是至少20个字节。第四行和第五行是32比特的源和目的端口号。第三行的校验和只对首部进行。
第一行中的Total Length标识了本分段的长度
第二行用于分片,identification字段就可以用来标识那些分片属于同一个数据包,
DF位表明是否允许分片,置1则可分片,置0则不分片,丢包。
MF表明后面有没有分段,如果置1,表示还有,置0表示没有。
Fragment Offset:为前面分段的数据部分(长度减去二十个字节)除以8。

每个数据包含有首部(20个字节)不需要进行切分,切分的时候总共数据需要减去首部20个字节。
分片的时候,每一片都包含首部20个字节。
IPV4一般规定在接收端进行组装。

IP地址都是32位的,高位是子网地址,低位是主机地址。
IP地址目前使用的表示方式:CIDR(无类别的域间路由)或VLSM(变长子网掩码)。
即a.b.c.d/x,其中x表示子网地址部分占用的位数。

IP地址的分类:,A类是首位为0的,B类是前两位为10的,C类是前三位为110的,D类是前四位为1110的,E类为前五位是1111的。
A:0.0.0.0~127.255.255.255        前八位是网络地址
B:128.0.0.0~191.255.255.255        前16位是网络地址
C:192.0.0.0~223.255.255.255        前24位是网络地址
D:224.0.0.0~239.255.255.255        多播地址
E:240.0.0.0~255.255.255.255        以后使用

网络地址部分全0,只剩下主机地址部分,这样的IP地址为主机地址。反之则为网络地址
主机地址部分全设置为1,网络地址部分不变,表示在该网络进行广播。
凡是前八位是127的IP地址,都是回送地址。
子网掩码(网络掩码):把网络地址部分全置1,主机地址部分全置0,再转换成点分十进制的形式。

DHCP协议(动态主机配置协议):用于动态分配IP地址。
分配方法:
1、主机广播“DHCP discover”消息,寻找提供IP地址的DHCP服务器。
2、DHCP服务器收到信息后广播“DHCP offer”信息,表示能提供IP地址。
3、主机选择一个IP地址,广播“DHCP request”信息,表明自己选择的IP地址。
4、DHCP广播“DHCP ack”信息。
DHCP服务器能够给其他子网的主机分配IP地址。

NAT技术(网络地址转换):
私有IP地址:10开头的,172开头的,196开头的
路由器处在私网和外网之间,当内网需要向外网传输数据报的时候,源端的IP地址和端口号会转换成路由器的共有IP地址和一个新的端口号,路由器内会维护一个NAT转换表,记录着他们的映射关系。
转换表根据新分配的端口号来区分不同的私网主机。(受质疑)

IPV6:
把IP地址长度增加到了16个字节(128个比特)。
增加了Anycast通信方式的支持(可以把数据包发送给某一组里面的某一个主机)。
IPV6将首部长度变成固定的40字节,称为基本首部。
IPV6报文:
版本号为6
每一行长度依然是32个比特。

IPV6使用冒号16进制记法。
兼容IPV4:前面80位置0,中间16位置1,最后32位为IPV4地址。
双协议栈、隧道技术。

路由:确定一条从发送端到接收端的一条路径。路由算法即找到这样的一条路径。
集中式:链路状态路由算法
分散式:距离向量路由算法
静态路由
动态路由
Dijkstra(迪杰斯特)路由算法,是一种集中式的路由算法,需要所有节点广播它和附近节点的路径代价信息。
算法执行后得到最佳路径,确定了每个路由器内部的转发表。

距离向量路由算法是分散式的路由算法。

路由协议(在应用层实现):RIP(基于距离向量路由算法)。
规定了最大跳数为15跳(从源到目的经过的子网的个数),用跳数来衡量距离。

OSPF基于链路状态路由算法
自治系统间的路由协议:BGP,传达的是子网的可达性信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值