本文是根据韩立刚老师讲计算机网络整理的笔记,如有疏漏或不当之处,欢迎指正。
4.网络层
4.1.初步认知
- 链路层是把网络层拿来的ip数据报加上物理地址发给物理层,以比特流的方式传输;
网络层是把传输层拿来的数据加上ip地址,发给链路层;
局域网内是通过MAC地址标识主机地址的,在互联网上是以IP地址标识的;
网络层传输是不可靠的,发送分组时不需要先建立连接。 - 网络层实现了两种服务2种服务:数据报服务(主要);虚电路服务(往事如烟,已经很少用了)。
- 中继设备:连接网络的中间设备。物理层-转发器;链路层-网桥;网络层-路由器;网络层以上-网关,现在一般认为网关就是路由器接口。
- 网络层要解决的问题:寻址方案;最大分组长度‘网络接入机制;超时控制;差错恢复方法;状态报告方法;路由选择技术;用户接入控制;面向连接服务和无连接服务;不同的管理与控制方式。
- ip地址的编址方法经历了3个阶段:分类的IP地址(ABCDE类)——划分子网(把多个机器分在一个局域网内)——构成超网(CIDR).
- 网络层有4个主要协议:地址解析协议ARP;逆地址解析协议RARP;网际控制协议ICMP;网际组管理协议IGMP。
- 地址解析协议ARP:某个IP地址解析成对应的MAC地址,在路由器上。
- 逆地址解析协议RARP:MAC地址→IP地址。
- 网际控制协议ICMP:在IP主机、路由器之间传递控制消息。
- 网际组管理协议IGMP:用于组播,传送视频、大文件之类的东西,能节省带宽。将一个视频作为一个组发给一个次级的路由器,然后复制给再下面的单元,最后通过单播传给终端,像是“金字塔”模式。
- NAT :网络地址转换(很多电脑组成一个局域网,用一个ip访问互联网。它支持IPV4坚持到现在):本地是用子网地址,访问外部的时候,通过统一ip访问。交换机记录你连接的端口号,对应Mac地址。请求返回来的时候根据发送时候的端口去查找Mac地址,再查找到你自己的电脑。
ip是动态分配的,这次连和上次连的不一样。上网的时候的端口是随机的。
电脑请求的是一个端口,在路由替换为公共的,返回来给电脑查找该电脑。
NAT:不节省ip地址,能出去,外网的回不来。
PAT:节省ip地址,使用公共的ip进行通信。
虚拟机的网络可以通过NAT连接外网,vmnet相当于是物理网卡的一个网段。
4.2. IP地址进化史
4.2.1. 降生:IPV4
- 最开始使用IPV4地址,有32位,是2级IP地址{网络部分-主机部分}。被划分为5类:
- A类是 1-127
- B类是 128.1-191.255
- C类是 192.0.1-223.255.255
特殊的ip:
- 169.254.xx.xx 微软做的默认,局域网内自动获取ip的开头;不设置dhcp的话
- 127.0.0.1 本地环回地址
- 10.0.0.0 保留的私网地址:局域网内用的
- 172.16.0.0-172.31.0.0 保留的私网地址
- 192.168.0.0-192.168.255.0 保留的私网地址
4.2.2. 进化
- 后来主机越来越多,ip地址不够用了,出现了划分子网。就是在局域网内使用保留的私网地址,给多个主机进行标识。对外的话会使用一个统一的IP地址。A类地址默认子网掩码是 255.0.0.0,B类:255.255.0.0,C类:255.255.255.0。三级IP地址{网络号-子网号-主机号}
- 子网掩码:划分子网后,通过使用掩码,把子网隐藏起来,使得从外部看网络没有变化,这就是子网掩码。变长子网掩码VLSM.
- 划分子网:划分4个就把子网掩码在默认的基础上 向右移动几位,划分8个就移动3位,即log以2为底的对数。
- 子网掩码 与ip地址进行与运算,结果是主机位归零,得到网络部分。如果是3个255,就判断本地的前3位ip和目标是否一致,一致就直接发送,不一致就通过网关发送。
4.2.3. 超进化
- 采用无分类编址CIDR,即无分类域间路由选择,是无分类的两极编址{网络前缀-主机号}。
- 采用这种记法:192.168.0.101/26;26标识前26位是网络,后6位是主机地址。
- IPV4中采用32位的地址掩码,26标识前23位是1.
- CIDR基于VLSM。
- 判断192.168.0.101/26所属的网段:
- 主机地址:11000000 10101000 00000000 01100101
- 网络掩码:11111111 11111111 11111111 11000000 ——26代表有26个1;与上面的进行与运算
- 子网地址:11000000 10101000 00000000 01000000 —— 即192.168.0.64
4.2.4.究极进化:IPV6
- IPv6的地址长度为128位,是IPv4地址长度的4倍.“号称可以为每一粒沙子标号”,似乎借用了佛教的“恒河沙数”的意思。
- 详情可以看下百科的词条,不再赘述。传送门
4.3. IP数据报
- 版本:标识IPV4或者6;
- 首部长度:固定有20字节,还有一个可变长度的可选字段;最大为60——可变最多40个字节。
- 区分服务:数据报是不是紧急的;
- 总长度:首部和数据包部分的总和,最大是2^16-1;
- 标识/标志/片偏移:以太网规定最大传输长度MTU是1500字节,如果数据超了会在传输层分片,给网络层。标识是说这个分片是第几个,标志是说这个分片后面有没有继续的分片(最高位没有意义,中间DF=0不能分片,最低MF=1还有分片),片偏移是指这个分片相对原数据偏移位置(起始位置/8的结果记录在这里)。
- 生存时间:首部生存时间TTL。Windows系统是127 ;64是linux; 255是Unix; 可以改TTL。
- 协议:指示数据报是什么内容。
- 首部校验和:检查首部有没有错误。
- 源地址/目标地址都是ip地址。
4.4. 网络层协议
4.4.1 网际控制协议:ICMP
- 即Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息.
- ICMP询问报文4种:回送请求和回答报文,时间戳请求和回答报文。
- ICMP差错报告报文有5种:终点不可达 源点抑制、超时、参数问题、重定向(改变路由)。
- - 可以pathping命令跟踪数据包的路径;会计算丢包率-在哪比较堵。
C:\Users\admin>pathping www.taobao.com
通过最多 30 个跃点跟踪
到 www.taobao.com.danuoyi.tbcache.com [42.236.35.182] 的路由:
0 DESKTOP [192.168.0.100] //本地地址
1 192.168.0.4
2 192.168.1.1 //本地网关
3 111.192.96.1 //下面这些都是连上淘宝路过的一些站点
4 221.129.255.109
5 61.51.169.101
6 125.33.186.5
7 219.158.21.206
8 pc22.zz.ha.cn [61.168.25.22] //一个SEO网站
9 * * *
正在计算统计信息,已耗时 200 秒...
指向此处的源 此节点/链接
跃点 RTT 已丢失/已发送 = Pct 已丢失/已发送 = Pct 地址
0 DESKTOP[192.168.0.100]
0/ 100 = 0% |
1 0ms 0/ 100 = 0% 0/ 100 = 0% 192.168.0.4
0/ 100 = 0% |
2 0ms 0/ 100 = 0% 0/ 100 = 0% 192.168.1.1
0/ 100 = 0% |
3 1ms 0/ 100 = 0% 0/ 100 = 0% 111.192.96.1
0/ 100 = 0% |
4 2ms 0/ 100 = 0% 0/ 100 = 0% 221.129.255.109
0/ 100 = 0% |
5 2ms 0/ 100 = 0% 0/ 100 = 0% 61.51.169.101
0/ 100 = 0% |
6 7ms 0/ 100 = 0% 0/ 100 = 0% 125.33.186.5
0/ 100 = 0% |
7 16ms 0/ 100 = 0% 0/ 100 = 0% 219.158.21.206
0/ 100 = 0% |
8 15ms 0/ 100 = 0% 0/ 100 = 0% pc22.zz.ha.cn [61.168.25.22]
跟踪完成。
上面这个例子,我看出来的也就是:发送ip数据包的过程中,源地址和目标地址直接的连接路径不止一条,结果是我们能打开一个网站,但是这个过程中经过了谁的手我们是无法预判的。因为在这个过程中有些地址的延迟可能比较长,这样我们可能某一次连接需要很长时间,传输ip数据包的时候就可能出现第3个包到了第2个还在路上的情况,就需要校验和重传。
4.4.2 动态路由协议:RIP/OSPF/BGP
- 内部网关协议:在自治系统内部交换。目的是使数据包尽可能有效的从源地址传到目的地址,不考虑其他的策略。自治系统是由单一技术管理下的路由器,也可以理解为ISP运营商,
- RIP协议:最早的动态路由协议。让台电脑进行周期性广播(30s),然后根据广播到达路由器的跳数选择最佳路径,不考虑带宽。最大跳数16。如果几个周期不进行广播就认为宕机,告诉其他电脑“它不在服务区”。
- OSPF协议:全名是开放式最短路径优先,按照带宽选择最佳路径。支持多区域,触发式更新。
有3张主要的表。邻居表:发送hello包给邻居,确定它还活着;链路状态表:所有邻居表交换一下;计算路由表:防止产生环路。
- 外部网关协议:不同的自治系统策略不同,而且Internet那么大,总会有不合群的同学出现。因此我们只需要找一个比较好的路到达目标就行。条件放宽了,选择也就更多了。
- BGP-4协议:使用径向路由选择协议。2个自治系统进行数据交换时,选择1个或者几个路由器做为“发言人”,其他电脑只能通过他们进行连接。多个系统就按照这个策略继续加。发言人不宜过多,够用就行。
这样可以解释为什么我在联通的网里面玩电信区的游戏延迟会比玩联通区的高。因为玩联通区的是内部网关协议,大家都能连,路子比较多;玩电信的就只能通过几台路由器“发言人”去连,大家都在用,延迟就高了。所以还是少玩游戏的好。ε=(´ο`*)))唉
5.传输层
5.1.初步认知
- 传输层:两个协议的分工配合,共同组成这个层级:TCP和UDP.
- UDP是把个数据包直接传出去,不需要建立会话,无连接,不可靠传输。可以用来传输视频。UDP传的是UDP报文
基本思想是“给你就行了,差不多没问题就得了”。 - TCP是可靠的需要建立会话的连接,把数据包分组编号,传给网络层,让它发出去。可以重传,很尽力的保证了传给对面的东西和我本地的一样。TCP传的是TCP报文段。
- UDP是把个数据包直接传出去,不需要建立会话,无连接,不可靠传输。可以用来传输视频。UDP传的是UDP报文
- 应用层与传输层的关系:就是在传输层的协议前面加了端口号就变成了应用层的协议。就好像“7个他”里面张一山换身衣服就分裂一个人格似的。
用端口定位服务,用ip地址定位计算机;服务运行后在TCP或UDP的某个端口侦听客户端的请求。对外服务才会用到端口。
http=TCP+80
HTTPS=TCP+443
ftp=TCP+21
SMTP=TCP+25
pop3=TCP+110
RDP=TCP+3389
共享文件夹=TCP+445
SQLserver=TCP+1433
DNS=UDP+53/TCP+53
这是默认的服务和端口,如果更改服务的端口,只在自己内部的系统里面用,可以提高服务器的安全性,别人检测到你的服务器这个端口打开了,但是不知道是干嘛的,返送什么内容也不清楚,有减少攻击可能(??)。
5.2. UDP
5.2.1 特点
- 无连接;
- 面向报文的,应用层传来多大的报文就发给传输层多大的,传输层觉得太大就自己分组吧;
- 没有拥塞控制,可以丢一部分数据;
- 支持多对多的通信;
- 首部只有8个字节,开销小。
5.2.2 首部格式
5.3. TCP
5.3.1. 特点
- TCP是面向连接的传输层协议。有流量控制功能
- 每条TCP连接只能由2个端点,每一条TCP连接只能是点对点的(1:1)
- 提供可靠交付的服务。UDP和IP都是不可靠的。
- 提供全双工通信
- 面向字节流:文件中的字节流放到TCP缓存中,在缓存中的数据进行切片、加装头部,传给另外一台机器;另一台机器按照顺序组装起来。TCP是按照顺序传递的,接收包2之前需要接收1.
- TCP连接的端点叫做套接字-socket=(IP地址:端口号)
5.3.2. 首部报文
固定字节:20个字节的首部
- 序号:4个字节。TCP数据的开头是整个传输数据的第几个字节。
- 确认号:B回来让A继续发哪个报文。即下一个应该发送的数据的开头。
- 数据偏移:4个字节,选项部分会有多少字节。首部最长 15*4字节,固定20个字节,可变部分最长是40个字节。数据偏移就是指TCP首部会有多长。
- 可变字节:商量内容,加上选项。可能就没数据。
- 6个特殊的标志位:
- 紧急URG:=1时有效,表示加急的内容。=1时紧急指针里的内容才有效,紧急指针指出紧急数据的字节数;
- 确认ACK:=1时确认号才有效。建立连接后所有的ack=1;最重要的一个字段 。
- 推送PSH:=1时,收到信息后立即响应,少用为好;
- 复位RST:=1时,出现严重差错,必须释放连接;
- 同步SYN:=1时表明是一个连接请求(SYN=1 ACK=0)或者连接接受(SYN=1 ACK=1)报文。创建连接的时候用。
- 终止FIN:=1时发送数据已完毕,要求释放运输连接。
- 窗口值:接收方让发送方设置其发送窗口的依据。
5.3.3. 三次握手与四次挥手
5.3.3.1.建立连接:三次握手
建立连接时的通信情况:
建立连接时的状态:
第三次通信的原因:防止A因为延时发送多个请求,B同意建立多个连接,A却只需要用一个就行。A重新发送就是确认AB之间唯一的一个连接,减少网络上走的路太远造成重复发送连接请求造成的影响。A收到确认之后如果已经建立了连接就不第三次握手了,B过期了就消除了进程。
5.3.3.2. 断开连接:四次挥手
TCP的连接释放:4次连接:A发送要断开;B确认开始断开、B确认完全断开;A发送我已经断了。A等2MSL(默认4分钟才关闭)
四次挥手的原因:服务端收到要断开的信息时,先告诉客户端我知道了,但是他还有信息没有处理完,所以需要客户端再等会儿,然后再告诉客户端。客户端最后再通知一遍我走了,再见!!
5.3.4.TCP的灵魂三问
灵魂三问:如何实现可靠传输?如何实现流量控制?如何避免网络拥塞?
5.3.4.1. 使用停止等待协议实现可靠传输
-
基本思路:ARQ(自动重传请求)
- A向B发送:等待B接收一个并返回确认(ACK)之后再发下一个。
- 确认丢失:B认为传输的错了,A重发,B丢掉上一个。
- 确认迟到:A→B,确认迟到了,但是之前A发了,会收到2个确认。
- B没有通知确认,A就会重发。
APQ表明重传的请求是自动进行的,接收方不需要发送出错的信息。
优点:简单;缺点:信道利用率低。 -
连续ARQ协议:
提高信道利用率:数据包连续发送,不等确认-流水线传输。目前都是这样。 -
*最终答案: 真实的发送采用以字节位单位的滑动窗口技术。
- A给B发送。建立会话,B告诉A接收窗口的大小,发送窗口不能大于这个。窗口比TCP缓存小;缓存可以循环使用。
- A将发送窗口的数据挨个数据包的发送,没有收到确认之前不能删除窗口中的数据。A一共发了10个包。
- B接收,收到了3个;向A发送确认,发送第四个数据包,B的接收窗口向后移,B的应用程序读取已经确认的数据;A之前已经发过了,A的窗口后移,把新加进来的数据发送出去;
- B后续会受到提前发的4包,向A继续发送确认。A移动。
- 丢失的包B收不到,会向A发送选择性确认ACK,A会把没发送成功的数据包再次发送,不会影响后面的。(超时重传)
- 注意:超时重传时间的选择:发送一个报文会设置一个计时器,到点了还没有确认就重新发送。 α推荐是1/8
5.3.4.2.使用滑动窗口技术实现流量控制
- 发送过程可以参考上面的最终答案,只是关注点不同了而已。流量控制的目的是让接收方来得及接收,避免发送方发的太快。第一次发送时根据链路带宽的大小来决定窗口大小,后面会根据接收方的的要求重新设置。
- 允许发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输。
- 只有在接收窗口向前滑动时(与此同时也发送了确认),发送窗口才有可能向前滑动。
收发两端的窗口按照以上规律不断地向前滑动,因此这种协议又称为滑动窗口协议。
当发送窗口和接收窗口的大小都等于1时,就是停止等待协议。
发送窗口受到网络情况和接收方的双重控制。
5.3.4.3. 避免网络拥塞的方法
-
拥塞:指对资源的需求总和大于可用资源;互联网上的计算机都有积极避免堵塞;拥塞控制是一个全局的过程。
TCP模块为了防止过多的数据注入网络,使网络中的路由器或链路不致于过载。以此提高网络利用率,降低丢包率,并抱证网络资源对每条数据流的公平性而采取的控制手段。拥塞控制包含四部分内容:慢启动、拥塞避免、快速重传、快速恢复 -
慢开始算法:1988年提出
先发送数量为1,确认后发送2,第三次发送4,以指数形式增长;增长速度到达门限比如16后,以后每次发送的数量加1。
发送拥塞后,记录拥塞时发送包数量的大小,重新开始。涨到最大数量的一半时开始按照加1的方式增长。无法完全避免网络拥塞。 -
拥塞避免:是指在网络出现拥塞窗口时,把窗口按照线性增长而不是指数增长,让网络不容易出现拥塞。
-
快重传和快恢复:1990年
A和B通信,使用累计确认。发5个确认一次。收到了124,3丢了。B受到没有按照顺序来的,就知道3丢了,连发3个一样的确认让它发第三个。A收到连续的3个确认,此时的拥塞窗口变为最大的一半,按照加法增加——快恢复。
6.应用层常用协议
- 应用层协议依靠TCP/UDP协议,在后面加上端口号提供对外的服务。
- 常用的应用层协议有:
http=TCP+80
HTTPS=TCP+443
ftp=TCP+21
SMTP=TCP+25
pop3=TCP+110
RDP=TCP+3389
共享文件夹=TCP+445
SQLserver=TCP+1433
DNS=UDP+53/TCP+53
6.1.DNS:域名解析协议
将域名解析为ip地址,进行访问。默认使用53端口
域名:全球唯一。
根 . 在com后面应该还有一个点,但是一般不写。
顶级域名: com edu net cn org gov
二级域名:自己定义的;可以在前面继续加 XXX. 构成三级域名。
二级域名前面加协议名称:www mail ftp→构成一个完全域名。
- 域名解析的过程:根DNS→顶级域名DNS→二级域名的服务器。返回到根然后根据域名向下查找
C:\Users\admin>nslookup //使用命令查看域名解析过程
默认服务器: public1.114dns.com
Address: 114.114.114.114//默认DNS服务器
> ping www.baidu.com
服务器: www.a.shifen.com
Addresses: 61.135.169.125
61.135.169.121
Aliases: www.baidu.com
DNS request timed out.
timeout was 2 seconds.
DNS request timed out.
timeout was 2 seconds.
*** 请求 www.baidu.com 超时
6.2.DHCP:动态主机配置协议
在局域网内给连接的终端分配IP地址。动态的更方便灵活。客户默认使用68端口;服务器默认使用67端口。
DHCP客户端请求IP地址的过程:
- 客户端发送广播要IP,到多个DHCP服务器接收到了,都给他返回一个分配给它的ip地址(单播)
- 客户端选用一个,不用的IP被回收。客户端就可以联网了。
实际过程还是有点复杂,有兴趣的可以找资料。
6.3.FTP:文件传输协议
根据服务器如何获取数据可以分为主动模式与被动模式.
- 主动模式:FTP Server打开一个20端口,向客户端进行连接。打开端口有20 21 。如果有防火墙,就要打开20 主动去连客户daunt。
- 被动模式:FTP Server打开一个端口,让客户端来连接。打开端口没有20
port 21是FTP 命令的默认端口。
FTP可以传输文本或者二进制,还可以通过封装,利用更高级的软件实现断点续传等功能。
6.4.Telnet:远程终端协议
默认使用TCP 23端口,可以使用 telnet ip port 命令监听端口是否打开。
当然,像ping ip一样,服务器可以通过设置禁止ping 通。
6.5.HTTP:超文本传输协议
- 目的:访问万维网的网点。http使用了TCP协议,默认端口80.http是面向事务的超文本传输协议。http1.1使用持续连接。
- 格式:http://< host>:< port>/<路径>
- HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
- HTTPS:使用443端口。是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。详情请查看HTTP与HTTPS的区别
6.6.SMTP/POP3/IMAP:邮件协议
- 电子邮件发送过程:
- 简单邮件传送协议SMTP:不能匿名发送。
- 邮件读取协议POP3和IMAP:读取邮件时需要进行身份验证,保证你只能读到自己的邮件。POP3读取之后会在服务器端删除。IMAP会一直保存,除非你下命令删除。