admin 管理员组

文章数量: 887021

第四章 网络层

网际协议IP
提供的服务:无连接和面向连接。 插一嘴,数据链路层的PPP协议是面向字节的,因此帧必须是整数字节(64~1508长度)
与ip协议配套使用的还有三个协议:地址解析协议ARP 网际控制报文协议ICMP 网际组管理协议IGMP


A类地址 net-id 1字节 host-id 3字节
B类地址 net-id 2字节 host-id 2字节
C类地址 net-id 3字节 host-id 1字节

数据链路层和物理层使用硬件地址(物理地址)
网络层和以上各层使用的地址使用IP地址(逻辑地址)
都放在首部
ip数据报首部占4位

地址解析协议ARP(给IP地址,解析硬件MAC地址)自动进行的

通信使用两个地址:IP地址(网络层地址),MAC地址(数据链路层地址)
ARP解决同一个局域网的主机或路由器的ip地址和硬件地址的映射问题,如果不在同一个局域网,通过arp找到一个位于本局域网的某个路由器的硬件地址,然后分组发送给这个路由器,让这个路由器把分组转发给下一个网络。
网络接口软件使用ARP负责将下一跳路由器的ip地址换成硬件地址,并将硬件地址放在MAC帧的首部,然后根据这个硬件地址找到下一跳路由器

划分子网

IP地址划分子网后,变成了三级结构,不改网络号,划分ip地址的本地地址:子网号和主机号

使用子网掩码可以找出ip地址中的子网部分,子网掩码长度32位
某位=1,ip地址中的对应位为网络号和子网号
某位=0,ip地址中的对应位为主机号

国际控制报文协议ICMP

应用举例 ping 是应用层直接使用网络层ICMP 没有通过运输层的TCPorUDP
允许主机或路由器报告差错情况和提供有关异常情况的报告。非高层协议,因为icmp报文装在ip数据报里

报文分为两种:icmp差错报告报文 和 icmp询问报文
三个字段:类型,代码,检验和
ICMP差错报文分为四种:终点不可达,时间超过,参数问题,改变路由(重定向)
不发送ICMP差错报告报文的几种情况:
1.iCMP差错报告报文 2.具有多播地址的数据报 3.对具有特殊地址的数据报 4.第一个分片的数据报片都不发送
ICMP询问报文:
回送请求和回答报文,时间戳请求和回答报文

网络层的主要工作 转发分组(路由器)

路由器结果划分:
1.路由选择部分:根据选定的路由选择协议构造路由表,和相邻路由器交换路由信息
2.分组转发部分:交换结构(根据转发表对分组进行处理),输入端口(硬件),输出端口(硬件)

IPv6和IPv4

ipv4的32位地址已经耗尽,于是采用更大地址空间的ipv6,仍然支持无连接的传送,也不保证数据报的可靠交付,因为路由器可能会丢弃数据包(ipv6需要ICMP来反馈一些差错信息),但将协议数据单元PDU称为分组(数据报)
首部长度变为固定的40字节
ipv6 地址解析协议ARP和网际组管理协议IGMP协议都合并到ICMPv6中

ICMPv6 协议 面向报文

利用报文来报告差错,获取信息,探测邻站或管理多播通信

第五章 运输层

TCP/UDP
TCP:传输控制协议TCP 数据单位:TCP报文
UDP:用户数据报协议UDP 数据单位:UDP报文/用户数据报

5.1 进程之间的通信

两台主机进行通信即两台主机中的应用进程进行通信
网络层和运输层之间的区别:网络层为主机之间提供逻辑通信(IP协议的作用范围),运输层为应用进程之间提供端到端的逻辑通信(TCP和UDP协议的作用范围)
因为在一台主机中有多个应用进程同时分别和另一台主机中的多个应用进程通信,所以运输层需要有 分用 和 复用的功能,根据不同需求,分为面向连接的TCP和无连接的UDP

UDP和TCP

UDP(面向报文):

1.无连接协议,提供无连接服务,传送数据之前不需要先建立连接
2.数据单位:UDP报文or用户数据报
3.对方的运输层收到UDP报文后,不需要给出确认
4.虽然提供不可靠交付,但UDP某些情况很有效

UDP在IP的数据报功能上增加:1.复用和分用 2.差错检测
面向报文(不拆分不合并,保留边界,一次交付一个完整的报文),无拥塞控制,支持一对一,一对多,多对多的交互通信
首部开销小,只有8个字节(比TCP的20个字节要短)

伪首部仅仅是为了计算检验和

UDP基于端口的分用:(从网络层IP层收到UDP数据报给应用层)
根据首部的目的端口,将UDP数据报通过相应端口,上交应用进程。(虽然有端口,但因无连接,因此不需要使用套接字socket)

TCP(面向字节流):

1.面向连接的协议,全双工通信,提供面向连接的服务,此连接是一条虚连接
2.传送数据单位:TCP报文段
3.每一条连接只能由两个端点,只能点对点,不提供广播或多播服务
4.提供可靠的有连接服务,增加开销,数据单元首部增大(20个字节),占用处理资源

TCP不保证接收方应用层应用程序收到的数据块和发送方应用程序发出的数据块具有相同的大小(也就是发的和收的数据块大小无法保证)
TCP可以保证收到的字节流和发送方发出的字节流完全一样。(也就是发的和收到的字节流一样)

TCP不关心应用进程一次把多长的报文发送到TCP的缓存中,会对连续的字节流进行分段,形成TCP报文段
TCP根据对方给出的窗口值和当前网络拥塞的程序决定一个报文段应该包含多少个字节(UDP发送的报文长度是应用进程给出的),TCP也可把太长的数据划分短一些再传送,也可以等待积累足够多的字节后再构成报文段发送。

TCP的连接

每一条TCP的连接有两个端点,端点即socket套接字,端口号拼接到IP地址即勾成了套接字。
套接字 socket = (IP地址 : 端口号)
TCP 连接 ::= {socket1, socket2}= {(IP地址1: port1),(IP地址2: port2)}
同一个IP地址可以多个不同的TCP连接,同一个端口号可以出现在多个不同的TCP连接。

TCP可靠传输的工作原理(停止等待协议,连续ARQ协议)

”停止等待“每次发送完一个分组就停止发送,等待对方的确认,收到确认后再发送下一个分组;
全双工通信的双方既是发送方也是接收方

停止等待协议(简单,信道利用率太低)

无差错情况:
A发送分组M1给B,等待B的确认(ACK),B收到分组m1,向A发送ACK,A收到确认ACK后,再发送下一个分组m2.
出现差错情况:(B不会发送任何信息)
1.B接收分组M1时检测出了差错,丢弃M1(但不通知A) 2.分组M1在传输过程中丢失(B不知,A也不知)
解决方案超时重传,A设置超时计时器,超时器到期之前收到确认ACK,就撤销超时计时器,继续发送M2分组
确认ACK丢失B发送给A的确认ACK丢失,导致A超时重传M1,B收到重传的分组M1,B采取两步措施:1.丢弃这个重复分组M1(因为之前已经接收并且交付给上层,只是因为发送的ACK丢失导致A没有收到ACK发生了超时重传)2.向A发送确认ACK
确认ACK迟到:过程无差错,但是B发送的确认ACK迟到,A超时重传,B仍然会受到重复的M2,同时采取两部措施:1.丢弃重复分组 2.向A发送确认ACK 。然后A收到重复的ACK,丢弃该ACK。

自动重传请求ARQ

如果A不断重传分组但总是收不到确认,说明通信太差,不能进行通信,因此使用ARQ自动重传请求传输协议(重传请求自动进行),就可以在不可靠的传输网络实现可靠通信。

停止等待协议效率低,使用流水线传输(发送方可以连续发送多个分组,不必每发完一个分组就停顿等待确认ACK)

连续ARQ协议(滑动窗口协议,tcp的精髓)

发送方每收到一次确认,窗口就向前滑动一个分组的位置

接收方一般采用累计确认,不必对收到的分组逐个发送确认,对按序到达的最后一个分组发送确认(表示到这个分组为止的所有分组都已正确收到)
即使确认丢失,也不必重传,但是不能向发送方反映接收方已经正确收到的所有分组信息

接送方也可采用:Go-back-N,需要再退回来重传已发送的N个分组
发送了前五个分组,中间3个分组丢失了,接收方只确认前两个分组,发送方重传后三个分组

TCP报文段的首部格式

TCP面向字节流,但传送的数据单元仍然是TCP报文段,一个TCP报文段分为首部和数据两部分,首部(20个字节固定,后面有4n个字节根据需要而增加)
源端口,目的端口各2字节,序号字段4字节(tcp传送的数据流没一个字节都边上序号,序号字段的值是本报文段所发送的数据的第一个字节的序号),确认号字段,4个字节(是期望收到对方的下一个报文段的数据的第一个字节的序号),数据偏移(即首部长度)4位

TCP可靠传输的具体实现

TCP连接的每一端都必须设有两个窗口(发送和接收
可靠传输机制字节的序号进行控制,因此TCP所有的确认都是基于序号,而非报文
必须要有累计确认的功能

1.以字节为单位的滑动窗口

A收到B发送的确认报文段,其中窗口20字节,确认号31(表示B期望收到的下一个序号是31,30为止 的数据已经收到),根据窗口20字节和确认号31,A构造从31开始窗口为20大小的数据滑动窗口(31-50),即序号31-50对于B来说就是允许接收的序列号



发送窗口属于发送缓存的一部分,发送方的应用进程把字节流写入TCP的发送缓存,接收方的应用进程从TCP的接收缓存中读取字节流

发送缓存用来暂时存放:
应用程序传送给发送方TCP准备发送的数据
TCP已发送出但尚未收到确认的数据
接收缓存用来暂时存放:
按序到达的,但尚未被接收应用程序读取的数据
不按序到达的数据

A的发送窗口和B的接收窗口不一定一样大(时间滞后)
TCP没有规定对不按序到达的数据如何处理,通常先临时存放在接收窗口,等到字节流中所缺少的字节收到后,再按序交付给上层的应用进程
TCP要求接收方必须要有累计确认的功能,减少传输开销

2.超时重传时间的选择

记录一个报文段发出的时间,以及收到相应的确认的时间,时间之差就是报文段的往返时间RTT
超时重传时间算法的选择:
Karn算法
:计算平均往返时间RTT,只要报文段重传,就不采用往返时间样本

3.选择确认SACK

若收到的报文段无差错,只是未按序号,中间缺少一些序号的数据,使用选择确认SACK只传送缺少的数据而不重传已经正确到达接收方的数据。
工作原理:接受方收到和前面的字节流不连续的两个字节块,且这些字节的序号都在接收窗口内,那么接收方就先收下这些数据,但要把这些信息准确的告诉发送方,使得发送方不再重复发送这些已经送达的数据。(不管序号对不对,先接受,然后再告诉发送方不需要重复发送这些已经接收的数据)

TCP的流量控制
利用滑动窗口实现流量控制

A向B发送数据,连接建立时,B告诉A”我的接收窗口rwnd=400字节“,该报文段在传输过程中丢失,A一直等待B发送的非零窗口的通知,B也一直等待A发送的数据,发生死锁:
解决方案:设置持续计时器,收到窗口为零窗口通知,启动计时器,到期就发送零窗口探测报文段,对方确认该探测报文段给出现在的窗口值,若窗口仍是0,继续重新设置持续计时器,窗口不是0,则打破死锁

TCP的拥塞控制

资源需求超过可用资源,即发送拥塞控制,增加资源不能解决拥塞控制(比如会大大增加排队等待时间,引起超时重传)
拥塞控制和流量控制的区别:
拥塞控制:防止过多的数据注入到网络中,是网络中的路由器不过载,即使得网络能够承受现有的负荷
流量控制:点对点通信量的控制(端到端控制,接收端控制发送端),以便接收端来得及接收

TCP拥塞控制方法(慢开始,拥塞避免,快重传,快恢复)

拥塞的判断:
1.重传定时器超时(现在通信质量嘎嘎好,因为传输出错而丢弃分组的概率太小,所以只要超时,很可能是出现拥塞)
2.收到三个相同(重复)的ACK(个别报文段发送丢失,预示会出现拥塞(实际未发生),因此可以采取TCP拥塞控制
拥塞控制算法:
1.慢开始:从小到达逐渐增大拥塞窗口数值,每收到一个对新的报文段的确认,把拥塞窗口增加最多一个SMSS的数值,拥塞窗口cwnd加倍

慢开始门限 ssthresh 的用法如下:
当 cwnd < ssthresh 时,使用慢开始算法。
当 cwnd > ssthresh 时,停止使用慢开始算法而改
用拥塞避免算法。
当 cwnd = ssthresh 时,既可使用慢开始算法,也
可使用拥塞避免算法
2.拥塞避免算法
拥塞窗口缓慢增大,每经过一个往返时间RTT,拥塞窗口cwnd加1(非慢开始的加倍)(相当于拥塞窗口cwnd线性规律增长)
当网络出现拥塞(重传定时器超时):
ssthresh = max(cwnd/2,2)//迅速降低慢开始门限
cwnd = 1//重新设置为1
执行慢开始算法

相当于前期慢开始倍数次增长拥塞窗口,cwnd拥塞窗口大小达到ssthresh慢开始门限时就开始实行拥塞避免线性增长,直到超时,就拥塞窗口置为1,再来,


快重传算法:(让发送方知道发生个别报文段的丢失)
要求接送方不要等字节发生数据时才捎带确认,而是立马发送确认,即使收到失序的报文也要立即确认。
发送方只要一连发送三个重复确认,即知道接收方确实没有收到报文段,立即进行重传(即快重传),提高20%的网络吞吐量

快恢复算法:
发送端收到连续三个重复的确认,由于发送方现在认为网络可能没有发送拥塞,因此不执行慢开始算法,执行快恢复算法


图中点4,收到三次确认ACK,表示丢失个别报文,不启动慢开始,启动快恢复,发送方调整门限值ssthresh = cwnd / 2 = 8,
同时设置拥塞窗口cwnd = ssthresh = 8,并开始执行拥塞避免算法。
才开始都是慢开始(指数增长),cwnd到达SSthresh慢开始门限值,开始拥塞避免(线性增长),发生超时,慢开始门限值降半,cwnd窗口等于1,重新开始慢开始;发生报文丢失(收到三个确认),慢开始门限值降半,cwnd-=降半的门限值,开始快恢复;

TCP的运输连接管理
TCP的连接建立(连接建立,数据传送,连接释放)

TCP的连接建立采用客户服务器方式,主动发起连接建立的是客户,被动等待连接建立的是服务器
TCP建立连接过程:三报文握手(交换三个TCP报文)
第一步:A 的 TCP 向 B 发出连接请求报文段,其首部中的同步位 SYN = 1(表示这是一个连接请求或连接接收报文),并选择序号 seq = x(表明传送数据时的第一个数据字节的序号是 x)
第二步:B 的TCP收到连接请求报文后,如同意,发回确认,使SYN=1,使ACK=1(只有=1,确认号字段才有效),确认号ack=x+1,自己发送数据的第一个序号为seq=y
第三步:A收到报文再向B发出确认,ACK=1,确认号ack=y+1,seq=x+1
这时候A,B分别通知上层应用进程,表示TCP;连接已经建立

TCP的连接释放:四报文握手
数据传输结束后,通信的双方都可释放连接
1.A的应用进程先向TCP发出连接释放报文段,然后停止再发送数据,主动关闭TCP连接,FIN(连接释放报文首部的FIN)=1,序号=u
2.B发出确认ACK=1,确认号ack=u+1,seq=v,B的TCP服务器进程通知高层应用进程,这时从A到B这个方向的连接已经释放,TCP处于半关闭状态(B若发生,A仍接收)
3.若B已经没有数据要发生给A,其应用进程就通知释放TCP连接,FIN=1,ACK=1,ack=u+1,seq=w
4.A收到连接释放报文后,发出确认ACK=1,seq=u+1,ack=w+1

TCP连接需要经过2MSL才真正释放掉

TCP的连接释放
TCP的有限状态机

端口

软件端口:协议栈层间的抽象的协议端口,用于应用层的各种协议进程和运输实体进行层间交互
硬件端口:路由器或者交换机伤的端口,用于硬件设备交互

第六章 应用层

域名系统DNS

计算机用户间接(非直接使用)DNS,主机的名字到IP地址的解析需要若干个DNS域名服务器程序完成。互联网采用层次树状结构命名,任何一个连接在互联网上的主机或服务器,都有一个唯一的层次结构的名字(域名)(逻辑概念)。
… . 三级域名 . 二级域名 . 顶级域名
分为:根域名服务器,顶级域名服务器,权限域名服务器,本地域名服务器
主机向本地域名服务器的查询一般都是采用递归查询
本地域名服务器向根域名服务器的查询通常采用迭代查询

文件传送协议FTP(基于TCP)

远程终端协议TELNET(基于TCP)

万维网WWW

统一资源定位符URL(标志万维网上的各种文档使其具有唯一标识符URL)

URL资源定位符是对可以从互联网得到资源位置和访问方法的一种简洁表示。
URL是与互联网相连的机器上的任何可访问对象的一个指针

HTTP超文本传送协议解决www各种超链的连接(面向事务)

http是一个应用层协议,使用TCP进行可靠的传输,默认端口80(通常可省略)


用户点击URL
http(协议)😕/www.tsinghua.edu(主机域名)/chn/yxsz/index.htm(路径),其中http端口号80省略
后所发生的时间
1.浏览器分析超链指向页面的URL
2.浏览器向DNS请求解析该URL的IP地址
3.DNS解析出该URL清华大学服务器的IP地址
4.浏览器与服务器建立TCP连接
5.浏览器发出取文件命令:GET/chn/yxsz/index.htm
6.服务器给出相应,把文件index.htm发给浏览器
7.TCP连接释放
8.浏览器显示”清华大学院系设置“文件index.htm中的所有文本
HTTP主要特点
1.面向事务的C/S协议
2.协议本身无连接,虽然使用了TCP服务

用户在浏览器输入URL或者跳转到一个URL后发生了什么

1 处理用户的输入

浏览器的UI 线程处理用户的输入,判断是跳转过来的还是用户自己的输入

判断依据是请求报文中referer这个参数,值是NUll,用户自己手动输入

2 开始导航

用户敲了回车之后,监听用户行为的UI线程告诉network线程去获取网页;同时自己进入loading状态

network线程如何获取网页资源的呢?

  dns域名解析
  什么是dns域名解析?怎么进行的域名解析呢?

  因为网络通信是基于tcp/IP的,tcp/ip是基于IP地址的,所以对于域名是无法识别的,人们对于超过10位的IP地址记忆起来又有难度,所以就出现了域名;主机上用户配置了域名对应的子目录,当访问对应的域名时,就可以通过解析访问到对应子目录中的文件。

 域名解析:

 每个PC端或者手机端都是一个DNS客户端。

 浏览器将URL中的域名提取出来给DNS客户端;

 dns客户端向DNS服务器发起请求报文,报文中包含URL给的主机名;通过一系列的缓存查询和分布式DNS集群查询;

 dns客户端收到响应报文,里边包含主机名对应的IP地址;

 浏览器获取到IP地址,就可以向IP地址所在的Http服务器发送http请求了。

建立http连接
安全的数据传输必须建立tls连接,经过三次握手完成该项工作
发起http请求
3. 读取响应

当请求响应返回的时候,network 线程会依据 Content-Type 及 MIME Type sniffing 判断响应内容的格式;

常见的有text/html,text/css,text/javascript,image/gif,image/png,等等;

HTML格式文件的处理network线程通知UI线程完成资源获取,UI线程会寻找渲染进程;

其他格式的文件都交给下载管理器来做了

恶意站点和敏感字段的检查也会在该阶段完成;

4 寻找渲染进程,确认导航

network thread 确信浏览器可以导航到请求网页,network thread 会通知 UI thread 数据已经准备好,UI thread 会查找到一个 renderer process 进行网页的渲染。

当 UI 线程发送 URL 请求给 network 线程时,浏览器其实已经知道了将要导航到那个站点。UI thread 会并行的预先查找和启动一个渲染进程,如果一切正常,当 network thread 接收到数据时,渲染进程已经准备就绪了,但是如果遇到重定向,准备好的渲染进程也许就不可用了,这时候就需要重启一个新的渲染进程

Browser Process 会给 renderer process 发送 IPC 消息来确认导航,一旦 Browser Process 收到 renderer process 的渲染确认消息,导航过程结束,页面加载过程开始

5 页面渲染

经典的渲染过程

HTTP与HTTPS区别
    超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。

    为了解决HTTP协议的这一缺陷,需要使用另一种协议:**安全套接字层超文本传输协议**HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了**SSL/TLS协议,SSL/TLS依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。**

    HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全

    HTTPS协议的主要作用可以分为两种:**一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。**

HTTPS和HTTP的主要区别
1、https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。

    2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl/tls加密传输协议。

    3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

    4、http的连接很简单,是无状态的;HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

客户端在使用HTTPS方式与Web服务器通信时的步骤
 (1)客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。

(2)Web服务器收到客户端请求后,会将**网站的证书信息(证书中包含公钥)**传送一份给客户端。

(3)客户端的浏览器与Web服务器开始协商SSL/TLS连接的安全等级,也就是信息加密的等级。

(4)客户端的浏览器**根据双方同意的安全等级,**建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。

(5)Web服务器利用自己的私钥解密出会话密钥。

(6)Web服务器利用会话密钥加密与客户端之间的通信。

HTTP状态码(服务器返回给客户端)

web服务器告诉客户端当前网页发生什么事情,或者说当前web服务器的响应状态
状态码200:表示服务器响应成功(即服务器找到客户端请求的内容,并且将内容返回给客户端)
状态码302:代表临时跳转(URL地址从A跳到B,但非永久,经过一段时间后,UR地址A还可能跳到C)
状态码301:和302相似,代表永久的重定向,严格意义上来讲,不是服务器跳转,而是客户端跳转,服务器通过回传状态码301给客户端,让客户端完成跳转。
状态码304:服务器告诉客户端请求资源成功,但这个资源并非 服务器提高,返回给客户端,而是从客户端本地浏览器缓存中有的这个资源进行获取(这里和状态码200有区别,状态码200是服务器找到客户端请求的内容返回给客户端,而非304从客户端本地资源缓存中获取)
状态码403:请求的服务器资源权限不够,没有权限去访问服务器的资源或者请求的IP地址被封掉
状态码404:服务器没有该资源,或者是服务器找不到客户端请求的资源。
状态码500:程序错误,请求的网页程序本身报错

cookies和session的区别

1.数据存放位置不同:cookies数据存放在客户的浏览器上,seesion数据放在服务器上
2.安全程度不同:cookie不是很安全,别人可以分析存放在本地大的cookie进行cookie七篇,seession更安全按
3.性能使用程度不同:session会在一定时间内保存在服务器上,访问增多,占用服务器性能,减轻服务器性能,可用cookie
4.数据存储大小不同:单个cookie保存的数据不能超过4K,很多浏览器会限制一个站点最多保存20个cookie,而sessio存储在服务器,浏览器对它没有限制
5.会话机制不同:
cookies会话机制:cookie是服务器存储再本地计算机上的小块文本,并随每个请求发送到同一服务器,web服务器使用HTTP标头将cookies发送到客户端,客户端终端,浏览器解析cookie并将其保存为本地文件,该文件自动将来自同意服务器的任何请求绑定到这些cookie
session会话机制:是一种服务器端机制,使用类似于哈希表的结构保存信息;

本文标签: 第四章 网络 第五章 计算机网络 六层