计算机网络(学习笔记)
看B站-中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程 学习笔记
概述
1.1什么是互联网
- 构建的角度来看
是由节点和边还有协议组成。 -----节点:分成主机节点(手机,PC…)和数据节点(路由器、交换机)。 -----边 :接入链路(连接主机的就叫接入链路)和骨干链路(数据节点之间连接的叫骨干链路) -----协议:两个或多个应用通信时遵守的标准,例如、字段、时序、语义、等。。。。 - 服务角度来看
1.分布式的应用 2.为分布式的应用提供通行服务的基础设置 分布式应用是网络存在的理由。(如果没有这些分布式应用互联网就没意义) - 结构系统角度来看
1.边缘系统:(主机、应用程序) 2.核心系统: 互联的路由器 3.接入网:有线或无线通信链路
1.2 网络边缘
边缘部分(主机、应用程序):端系统之间的通信可以分为两种方式——客户/服务器方式(CS方式,例如浏览器和服务器,获取资源的方式都是从服务器中获取),对等方式(P2P方式peer to peer,迅雷就是采用P2P模式,获取资源可以从不同的地方获取)
1.3 网络核心
线路交换:类似于电话线的连接方式例如这条线路支持的带宽是1.56Mbps,会采用分片的方式分成24片,每片的贷款就只有56kbps.先建立连接,再传输数据,在期间这条线路是独享的,关闭连接后再释放。综上:线路交换 好处:线路独享,但支持用户数量固定,资源存在浪费。 分组交换:占用这条线路的所有带宽。例如:A主机发送一个10M的文件到B主机,在这期间,当A主机通过接入网到路由器,路由器会将数据存储下来之后,再发送到另外一个路由器,另外一个路由同理,在这期间路由发送会有排队的情况,先来的先发送,后来的后发送,如果路由器的队列满了以后,会存在丢数据的情况。综上:分组交换好处是资源共享,坏处是排队延迟,和数据丢失。 计算机网络不适合采用线路交换 1.连接建立时间长 2.计算机之间的通信有突发性,如果使用线路交换,会浪费很多资源。(连接之后是不能被其它所使用) 3.可靠性不高?
总结 通信网络 —电路交换 --------FDM 平分 --------TDM 时分 —分组交换 --------数据报网络 (发送数据携带目标主机的ip,交换机通过ip查询路由表进行转发,不用维护路由器之间的线路) --------虚电路网络(会建立起一个连接,连接建立完成之后,发送数据会根据标记进行转发,每个路由器之间需要维护线路)
1.4 接入网和物理媒体
大致介绍了住户的网络边缘如何接入到网络核心的。
1.5 Internet结构和ISP
ISP ISP(Internet Service Provider) 因特网服务提供方(电信,联通,移动) IXP(Internet Exchange Provider) 因特网交换提供方(ISP之间数据交换) Regional I S P(Regional Internet Service Provider) 区域因特网服务提供方 (各个区域的ISP,重庆移动、北京移动都会接入到中国移动) ICP(Internet Context Provider) 因特网内容提供方(百度 Google) == 网络的网络 == ISP之间的连接
1.6分组延迟、丢失和吞吐量
检查bit级差错 检查分组首部和决定将分组导向出处 通常是微妙数量级或更少
在输出链路上等待传输的时间 依赖于路由器的拥塞程度 取决于拥塞程度
R=链路的带宽(bps) L=分组长度(bits) 将分组发送到链路上的时间=L/R 对低速率的链路而言很大,通常为微妙级到毫秒级
d=物理链路的长度 s=在媒体上传播的速度 传播延迟就=d/s 几微妙到几百毫秒
以上是一段所需的时间,节点处理延迟+排队延迟+传输延迟+传播延迟。
1.由上一个节点重新补发数据 2.由源主机补发数据 3.如果使用UTP不补发数据
A主机发送到B主机有效的数据,取最小的一个值,作为吞吐量。
1.7协议层次和服务模型
一个复杂的网络系统是通过分层来实现的,每层实现自己特有的功能,为上层提供更好的服务。对等层的通信是调用需要遵守协议,并下层总和提供的服务实现,通过自身逻辑处理,像上层提供更好的服务。
服务:低层实体向上层实体提供它们之间的通信能力 原语:上层使用下层服务的形式,高层使用低层提供的服务,以及底层向高层提供服务都是通过服务访问原语来进行交互的–形式。例如:应用层调用传输层,调用的方式是使用socket Api,那这个socket Api就是原语 服务访问点SAP(services access point):上层使用下层提供的服务通过层间的接口——地点: 一个服务实体可以为多个应用提供服务,服务访问点用来区域谁在使用。 例子:邮箱 地址(address):下层的一个实体支撑着上层的多个实体,SAP有标志不同上层实体的作用 可以有不同的实现,队列 例子:传输层的SAP,端口(port)‘
服务:底层实体向上层实体提供他们之间的通信能力,是通过原语来操作的,方向是垂直 协议:对等层实体质检在相互通信的过程中,需要遵守的规则。
本层协议的实体要靠下层提供的服务来实现 本层实体通过协议为上层提供更高级的服务
应用层:最顶层,达到app的功能,为人类提供服务。(例如:查询订单) 传输层:借助于网络层提供的端到端的服务,有两个作用:1将不可靠的信号变可靠,2.网络层只是主机到主机,还没有进程到进程,所以这层通过端口的方式实现进程到进程之间的通信。TCP/UDP 网络层:将源主机的分组传到目标主机(端到端)主要是转发和路由,但这层是不可靠的通信。转发是从哪个端口进到哪个端口出,路由是找到下一个节点.IP协议,路由协议 链路层:上层的分组变更为帧进行传输(帧头帧尾,中间这部分就是数据),提供相邻的两点之间的帧传输(相邻的两个路由器) 物理层:相邻两点之间将数字信号转换成物理信号发送,将接收到的物理信号转换成数字信号
1.8历史
这节主要讲了一下网络的发展史,当听故事了,没做笔记。
1.9总结
2.应用概述
2.1 应用层原理
udp的socket只要自己的ip和端口,状态也没有,因为是无状态连接。udp代表两个端的一端
- 问题3:如何使用传输层提供的服务实现应用
- 引用需要传输层提供什么样的服务
- UDP存在的理由
只靠ip协议只能定位到目标主机,但不能定位到目标进程,需要端口来确定。 - 安全性
例如:https 就是运行在SSL层之上的应用。
2.2 Web and HTTP
2.3FTP
这节主要介绍了FTP协议 相比其他协议,如 HTTP 协议,FTP 协议要复杂一些。与一般的 C/S 应用不同点在于一般的C/S 应用程序一般只会建立一个 Socket 连接,这个连接同时处理服务器端和客户端的连接命令和数据传输。而FTP协议中将命令与数据分开传送的方法提高了效率。 FTP 使用 2 个端口,一个数据端口和一个命令端口(也叫做控制端口)。这两个端口一般是21 (命令端口)和 20 (数据端口)。控制 Socket 用来传送命令,数据 Socket 是用于传送数据。每一个 FTP 命令发送之后,FTP 服务器都会返回一个字符串,其中包括一个响应代码和一些说明信息。其中的返回码主要是用于判断命令是否被成功执行了
- 主动模式
当控制连接连建立之后,客户端会开一个端口,由服务器来进行连接客户端,通过这个端口进行数据传输。 - 被动模式
第一个端口连接服务器的 21 端口,提交 PASV (被动)命令。然后,服务器会开启一个任意的端口 (P > 1024 ),返回如“227 entering passive mode (127,0,0,1,4,18)”。 它返回了 227 开头的信息,在括号中有以逗号隔开的六个数字,前四个指服务器的地址,最后两个,将倒数第二个乘 256 再加上最后一个数字,这就是 FTP 服务器开放的用来进行数据传输的端口。如得到 227 entering passive mode (h1,h2,h3,h4,p1,p2),那么端口号是 p1*256+p2,ip 地址为h1.h2.h3.h4。这意味着在服务器上有一个端口被开放。客户端收到命令取得端口号之后, 会通过 N+1 号端口连接服务器的端口 P,然后在两个端口之间进行数据传输。 上诉介绍来自于:https://blog.csdn.net/zhubao124/article/details/81662775?ops_request_misc=&request_id=&biz_id=102&utm_term=ftp%E5%8D%8F%E8%AE%AE&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-81662775.nonecase&spm=1018.2226.3001.4187
2.4EMail协议
我们发送邮件到这个邮件服务器是采用SMTP协议,邮件服务器发送对目标邮件服务器,也是采用SMTP协议,当对方查看邮件的时候是采用POP3或者HTTP协议都可以查看邮件。
2.5DNS
DNS应用是给应用所使用的应用
2.6P2P应用
- P2P架构
- 非结构化P2P
每个节点启动的时候向目录管理中心进行注册,汇报自己的ip和内容。当某个客户端需要获取某个资源的时候,就从目录管理中查询,目录管理中心返回有该资源的客户端,客户端就可以从对应的目标客户端获取数据。此时目标客户端就充当的是服务器。
存在的问题 单点故障,性能瓶颈,侵犯版权 - 结构化的P2P
每个perr加入进来之后,将ip进行hash运算
2.7CDN
采用CDN来解决上诉的问题
- 多媒体流化服务:DASH
视频播放的方式边下载变播放,而不是全部下载完在播放。一部视频被切分成不同的块,每一个部块又分成不同的解析度。用户播放前,会先下载一个告示文件,告示文件中描述了视频不同块的url和解析度,解析告示文件下载对应的视频块进行缓存。
- 存在的一些问题
服务器本身优化是足够的,但是无法保证链路上存在的问题,且资源重复下载的一个问题(两个人都在同时下载这一片段)。
2.8TCP编程
welcomeSocket=Socket(...);
bind(welcome,&sad);
connectionSocket=accept(welcomesocket,&cad);
read(connectionSocket);
write(connectionSocket,"发送内容...");
客户端
ClientSocket=Socket(...)
bind(ClientSocket,&cad);
connect(Clientsocket,&sad);
write(ClientSocket,"发送内容...");
read(ClientSocket);
close(ClientSocket);
2.9UDP编程
2.10小结
3.传输层服务
3.1概述和目标
- 概述
传输层提供的是进程到进程之间的通信,网络层是主机到主机的通信。 在传输层可以对IP层提供的服务进行进一步的加强,但是有些是不能加强的。 例如:无法将网络带宽变大,无法扩大吞吐量。
3.2多路复用/解复用
TCP:应用程序发送消息的时候,需要携带socket和消息内容,这里的socket里面已经包含了自己身的ip端口,目标的ip端口。到传输层,将数据封装成段,头部是目标端口和自身端口,传输层在将内容发送给网络层,网络层在封装头部包含了目标IP和源IP,这样就可以通过IP发送给目标主机。当目标主机收到后,在网络层将body部分取出,此时的body就是目标端口和源端口和报文,传输层通过IP和端口就可以找到哪一个应用进程了,从而将报文发送给它。
UDP:应用程序像传输层提供:消息、socekt、cad,socket包含了自己的ip和端口,cad就是目标的ip和端口,(如果忘了,看上面的2.8TCP编程),将整个数据报发送给目标主机,目标主机就可以通过端口来进行对应的进程,将数据发送给它.
- UDP例子
- TCP例子
3.3无连接传输:UDP
应用程序提交数据有多快,发送得就有多快,UDP不用考虑网络阻塞,和对方接收情况。
- UDP校验
3.4可靠数据传输原理
在传输层下面所提供的服务不是可靠的, 如何通过本层将下面不可靠的服务变成可靠,提供给上层可靠的服务
- 面临的问题
-
逐步处理的方式来解决 -
Rdt1.0管道是可靠的服务 当管道是可靠的,发送方就需要接收上层数据、封装数据、发送数据,接收方就需要解封装,交付数据 -
Rdt2.0就有比特的差错的信道 处理办法 发送方: ? 1.等待上层调用: 2.收到上层调用:备份数据,打包数据,发送数据,checksum加密 3.等待响应结果:如果是ACK 状态置换为等待上层调用,如果是NCK,则重复2,3步骤 接收方: 1.等待接收数据: 2.收到数据:checksum解密 3.验证通过:发送ACK 4.验证不通过:发送NCK -
Rdt2.0的缺陷和处理办法Rdt2.1 如果在接收方返回的这个ACK/NCK出错了,发送方这边无法解析,照成发送方不知所措 解决 发送方: ? 1.等待上层调用: 2.收到上层调用:备份数据,打包数据加上编号,发送数据,checksum加密 3.等待响应结果:如果是ACK 状态置换为等待上层调用,如果是NCK,则重复2,3步骤 4.如果返回的ACK/NCK无法识别,则再次发送之前的数据包 接收方: 1.等待接收数据: 2.收到数据:checksum解密,如果数据包的编号和之前的编号一致,则进行丢弃,也会返回ACK/NCK 3.验证通过:发送ACK 4.验证不通过:发送NCK -
2.1Rdt2.1的运行
- Rdt2.2无NAK
在之前2.1存在一个问题,如果一次发送多个报文,这会产生大量的ack和nak,在接收方返回的ack/nak中也无法确认是否有确认的确认,智能通过后续的数据编号来判断。由此出现了Rdt2.2 在原来的基础之前吧nck取消了,取而代之的是ack+编号,如果发送的是P1返回的也是ACK1,很好没问题继续发送后续内容。如果发送的P1返回的确实ACK0,那说明出现了问题,则重发。如果ack出错,与rdt2.1相同 发送方: ? 状态1.等待上层调用: 状态2.收到上层调用:备份数据,打包数据加上编号,发送数据,checksum加密 状态3.等待响应结果:如果是ACK+编号与发送的编号相同重新回到"状态2",不相同则重复状态2.3 状态4.如果返回的ACK/NCK无法识别,则再次发送之前的数据包 接收方: 1.等待接收数据: 2.收到数据:checksum解密,如果数据包的编号和之前的编号一致,则进行丢弃,也会返回ACK+编号 3.验证通过:发送ACK+编号 4.验证不通过:发送ACK+上一个编号 -
Rdt3.0信号有数据丢失 假设一种情况,如果发送方发出的消息丢失了,或者接受方返回的ack丢失了如何处理。 引入一个超时重传的机制 发送方: ? 状态1.等待上层调用: 状态2.收到上层调用:备份数据,打包数据加上编号,发送数据,checksum加密,开始超时重传 状态3.等待响应结果:如果是ACK+编号与发送的编号相同重新回到"状态2",不相同则重复状态2.3,如果时间超时了还没有接收到返回的ACK,则再次重复状态2.3。 状态4.如果返回的ACK/NCK无法识别,则再次发送之前的数据包 接收方: 1.等待接收数据: 2.收到数据:checksum解密,如果数据包的编号和之前的编号一致,则进行丢弃,也会返回ACK+编号 3.验证通过:发送ACK+编号 4.验证不通过:发送ACK+上一个编号 -
Rdt3.0的性能 在传输中:1KB=1000X8bits,L=1KB R=10Gbps,发送一个KB数据需要花费:1000*8/10^9=0.000008/秒,就等于8微秒
- 流水线协议
rdt3.0存在一个问题,就是利用率不高,一次发送一个,等待会来之后再次发送。处理这个问题采用流水线协议
发送一个数据后,存到缓冲区,用户重发。收到方的缓冲区用来收到内容后,放到缓冲区提交给上层应用。
- 发送窗口
是指已经发送出去,但是没有得到确认的区域是发送窗口,发送窗口是发送缓冲区的一部分或全部 例子:发送缓存区的大小是0-4,最开始发送缓冲区还没有已发送的数据,此时,滑动窗口的前沿和后沿是贴在一起的,当发送方发送了0号数据的时候,滑动窗口的前沿向前移动到1号数据,依次类推直到4号数据。如果0号数据收到之后,滑动窗口的后延向前一格到1号数据,整个缓冲区的就是从1-5号数据这么大,这时候的5号数据是空闲的可以接收应用发送的数据,进行发送。
- 接收方
累计确认:接收方窗口只能接收1个数据的时候,发送连续收到的最大的分组确认,因为在之前的数据已经是接收确认过了,所以是累计确认。
非累计确认:接收窗口可以接收多个数据的时候,因为不确认之前的分组是否有收到过,所以是非累计确认。
例子:
- 异常情况
例子:发送方先发送了0号数据,再发送了1号数据,但是0号数据被丢失了1号数据没有丢失。接收方等待接收的0号数据,但收到了1号数据,此时会丢弃1号数据,窗口不动。发送方这里由于超时机制,会把0号数据和1号数据都发送一遍,接收方收到了0号数据,返回ACK0,接收方窗口的后沿和发送缓冲区后沿都向前滑动。
例子:发送方发送了0,1,2号数据,但是0号数据丢失了,在接收方中,只收到了1,2号数据并返回了ACK,0号数据没有收到。当0号数据的超时后,会重新发送0号数据,1,2号数据不会进行重发。当接收方收到0号数据之后,接收缓冲区和滑动窗口整体向前滑动。
3.5面向连接的传输TCP
序号:是指的在body部分第一个字节流的编号,例如第一个mss的body中的需要是0,每个mss大小是1460,第二个mss头部的序号就是2920。编号的计算方式,第一个字节设置为X, x+mess*n =offset
确认号:从发送方角度来说,如果我收到了ACK155,那么说明,我发送的154及之前的数据都已经手打了,可以从155之后开始发送。
- 可靠数据传输
- 快速重传
如果接收到3个重复冗余的ack,此时超时定时器还没有到,也会发送这部分数据,避免超时定时器,过长,造成的延迟。
3.6拥塞控制原理
主要是依靠的网络设备提供自身的资源情况,如果轻度拥塞返回NI=1如果重度拥塞=CI=1,主机则不在增加发送。 ###3.7TCP拥塞控制 TCP是通过自身的判断来断定网络是否拥塞,不是采用网络设备提供的资源情况。
-
如何检测拥塞 超时:拥塞控制窗口设置成1个MSS大小,进入慢启动阶段,收到一个RTT,增加拥塞控制窗口大小增加原来的一倍。例如:收到超时收,拥塞控制窗口设置成1460byte,进入慢阶段,收到一个往返后窗口大小增加原来的一倍,也就是1460*2; 3个重复ack:拥塞控制窗口设置成1个mss,收到一个RTT之后拥塞控制窗口+1,也就是1460+1460;
4.网络层(数据平面)
4.1导论
- 目标
- 网络层的作用
- 转发和路由
转发:是从某个端口入合适的端口出,这是局部的在数据平面。 路由:是通过ip查询路由表,通过对应网卡发送出去,是觉得主机到主机之间的路径,是全局的在控制平面。 传统方式,每个路由器是单独查询路由表进行转发。如果升级的话所有的都要进行升级。 SDN方式:有路由控制器来通过不同的字段来决定干什么事,例如:转发,泛洪,拦截等,来了一个ip分到对应的路由器上进行处理。是可编程的
- 网络层的服务模型
best effort 尽力而为什么都保证不了。
4.2路由器组成
4.3 IP Internet Protocol
- ip分片
== 例子:一个4000字节的数据报传输,头部占用20个字节,3980的数据部分,MTU(最大传输单位):1500。第一节把上面的头部拷贝下来,数据部分就是3980-1480等于2500,偏移量是1480/8等于185,第二部分同样把头部保存来,2500-1480等于1020,偏移量是2960/8等于370;第三部分同理头部保存下来,剩下的1020就是数据部分。== 来了一个IP之后先根据IP与和Mask(子网掩码)进行&的操作,跟这个Destination进行匹配,找到NextHop找到下一条的接地,从对应的接口发出去。如果没有匹配上就执行默认的
运行在UDP上
-
作用 内网访问外网的时候,外网不能识别内网地址,NAT就把内网地址换成外网地址,端口也换成一个没有使用的端口,并记住这个映射关系。当请求回来的时候根据这个映射再返回给对应的内网主机 -
IPV6 ipv6不进行分片,通知源主机更改分组大小 -
IPV4过度到IPV6 如何解决ipv4到ipv6的通信: 现在把IPV4比喻成一篇海洋,全是ipv4,当出现了ipv6时,就像一块岛屿,当ipv4要和ipv6通信的时候,ipv4载荷(body)部分存放的是完整的IPV6信息,到目标之后再进行解封装。
4.4通用转发和SDN
- 实现的功能
5.网络控制平面
5.1导论
5.2路由选择算法
有两种算法
- link state (线路状态)
- distance vector(矢量距离)
路由选择算法
开始有两个容器分别是N[]和N1[],N存放已搞定的节点,N1[]存放未搞定的节点。先对N进行初始化,N容器第一个元素就是自己所以是{0,A},然后找到A的邻居,B、G他们的代价是{2,A},{5,E},因为A到G的代价是6,而A-B-E-G的代价是5所以是{5,E},依次循环得到最终的所有路径
5.3自制系统内部的路由选择
- RIP(采用距离矢量算法)
5.4 ISP之间的路由选择:BGP
内部网关关注的性能,外部网关关注的政策类和经济策略
5.5SDN控制平面
5.6总结
6.链路层和局域网
6.1 引论和服务
- 单点连接和多点连接
- 单点连接
一般用于广域网的路由器,这个节点到另一个节点只有一条链路。 - 多点连接
在局域网内部,例如交换机这样就是一天设备连接了多个点。
6.2 差错检测和纠正
6.3多点访问协议
- 面临的问题
多个设备使用同一个信道,如何处理多个设备同时发送消息,引发的消息碰撞的问题 - 解决办法
均分使用
ARP协议主要是将ip地址换成MAC地址,传到相应设备的网卡中。MAC地址是在同一个网络中,区分不同的设备,IP地址分层的,MAC地址是平面的。 主机到主机之间,N-1跳是IP在路由,从链路的角度来看,也是将IP地址转成MAC地址发送给不同的路由器。最后一条是将IP转成MAC地址交给对应的设备
6.4链路虚拟化
58秒是的视频,啥也没讲
6.5数据中心网络
机房中,一个机柜中服务器跟服务器或跟数据存储设备,的网络相比普通局域网带宽更大,更可靠。
6.6 Aday in the life of web request
把之前的5层说了一下。
7.未讲(后面看书补上)
8.网络安全
8.1 什么是网络安全
8.2 加密原理
8.3 认证
Alic告诉Bob 我是Alic,Bob 给Alic一个挑战码,这个挑战码之前没用过,这次用完之后就不用了。然后Alic用Key加密发给Bob,Bob用Key解密,如果成功就认证成功。(这里采用对称加密关于key的分发后面会介绍) 跟上面一样但是采用非对称加密的方式,Alic用私钥加密,Bob用公钥解密。 同上,Bob给一个挑战码,但是被Trudy劫获了,把自己的公钥给了Bob。Trudy然后告诉Alic挑战码,并给出公钥。当Alice发送消息的时候Trudy就通过Alic的公钥解密获取明文。然后再用自己的秘钥加密发送给Bob,在任何一方看来都是正常的。
综上的例子就是怎么样可靠拿到公钥
8.4 报文完整性
保证报文在传输的过程中或事后没有被修改。 如何签名: 报文使用私钥进行加密,得到的密文就是签名,然后通过公钥进行解密。 如果报文非常长,计算的代价非常大,所以摘取报文一部分H,进行加密。M(KbH(M)) 接收方先通过摘要算法,从报文中获取到摘要部分。然后通过公钥解密签名部分得到的报文摘要进行对比,如果相同那说明是完整没被改过。
8.5 秘钥分发和证书
8.6 各个层次的安全
8.7 防火墙
8.8 攻击和对策
|