层次 | 协议 | 作用 |
---|---|---|
应用层 | DNS协议(53)、FTP协议(20,21)、HTTP协议(80)、HTTPS协议(443)、SMTP协议(25),DHCP(67,68,动态主机配置) | 为特定的应用程序提供数据传输服务 |
表示层 | URL加密、口令加密、图片编解码 | 数据压缩、加密以及数据描述 |
会话层 | 服务器验证用户登录、断点续传 | 建立端连接并提供访问验证和会话管理(SESSION) |
传输层 | TCP协议、UDP协议 | 为网络不同主机上用户进程提供数据传输服务,可靠和不可靠的传输,复用分用,错误检测,流量控制等 |
网络层 | IP协议、ICMP协议(路由器,多层交换机) | 提供IP地址,选路,将分组从源IP地址发送到目的IP地址,为主机提供数据传输服务 |
链路层 | ARP、RARP(交换机(多接口网桥)) | 将上层数据封装成帧,透明传输,用MAC地址访问媒介,差错控制,解决分组在一个网络上传输的问题 |
物理层 | 中继器、集线器、网线 | 为设备提供比特流的传输 |
OSI 7层模型:应用层,表示层,会话层,传输层,网络层,链路层,物理层
TCP/IP :应用层,传输层,网际层,网络接口层
优点:
在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。确定帧的界限。
当帧未发送完,发送端出问题重发时,接收端会抛弃前面接受的数据,重新接受。因为接收端只会接受成对的帧头和帧尾数据。
若数据中存在与帧结束符相同的数据,那么计算机会误以为该数据即为帧结束符,而造成错误。
解决办法:发送端在控制字符前插入转义字符,接收端接收到后,删除转义字符。
传输过程中产生比特差错:1可能变成0,0可能变成1.
使用差错检测技术,接收方的链路层就可检测出帧在传输过程是否产生了误码(比特错误)。
数据链路层向上层提供的服务类型
一般情况下,有线链路的误码率低,不要求可靠传输,无线链路误码率高,要求可靠传输
传输差错:比特差错,分组丢失,分组失序,分组重复
可靠传输实现机制(流量控制的常见方式):
ARP的作用:ARP为IP地址到对应的MAC地址(硬件地址,48位)提供动态映射
工作过程:ARP高速缓存存放IP地址到MAC地址的映射表,ARP表。主机向本局域网内的主机B发送IP数据报时,先在ARP表中查看有无B主机的IP地址映射,如有,就向MAC地址进行发送至帧。如果无,就进行广播ARP请求分组,主机B收到请求后进行响应,返回B的IP地址和MAC地址的映射,之后主机A更新自己的ARP表,进行发送帧。
ARP报文格式:
总结:共28个字节,以太网先目的后源,ARP先发送端后目的端,先硬件后协议。
数据链路层的最小MTU( 最大传输单元 )为46字节,最大MTU为1500字节。
MAC地址的范围是64字节—1518字节,比MTU多出18个字节
交换机相当于多端口的网桥,根据帧的目的MAC地址转发帧,使多台主机可以在不同的冲突域中可以传输数据。
冲突域(物理分段):在OSI模型中,冲突域被看作是第一层的概念,连接同一冲突域的设备有Hub,Reperter或者其他进行简单复制信号的设备。也就是说,用Hub(集线器)或者Repeater(中继器)连接的所有节点可以被认为是在同一个冲突域内,它不会划分冲突域。而第二层设备(网桥,交换机)第三层设备(路由器)都可以划分冲突域的,当然也可以连接不同的冲突域。简单的说,可以将Repeater等看成是一根电缆,而将网桥等看成是一束电缆。
广播域 接收同样广播消息的节点的集合。如:在该集合中的任何一个节点传输一个广播帧,则所有其他能收到这个帧的节点都被认为是该广播帧的一部分。由于许多设备都极易产生广播,所以如果不维护,就会消耗大量的带宽,降低网络的效率。由于广播域被认为是OSI中的第二层概念,所以像Hub,交换机等第一,第二层设备连接的节点被认为都是在同一个广播域。而路由器,三层交换机则可以划分广播域,即可以连接不同的广播域
作用:实现网络互连,路由,分组转发,拥塞控制,进而实现数据包在各网络之间传输
解决问题:
两种服务:
虚电路服务 | 数据报服务 | |
---|---|---|
思路 | 可靠通信应当由网络来保证 | 可靠通信应当由用户主机来保证 |
连接的建立 | 提前建立 | 不需要 |
目标地址 | 仅在建立阶段使用 | 每个分组都有目标的完整地址 |
分组转发 | 固定虚电路路由 | 每个分组选择路由进行转发 |
结点故障 | 虚电路不工作 | 可能丢失分组或路由发生改变 |
分组顺序 | 按发送顺序到达终点 | 可能无序 |
差错控制 | 可以由网络负责,也可以由用户主机负责 | 由用户主机负责 |
在同一个局域网上的主机或路由器的IP地址中的网络号相同。
路由器的主要功能:
路由器总是具有两个或者两个以上的IP地址,因为需要转发数据报。
路由选择:按照路由算法,根据网络的拓扑变化动态地改变选择的路由,不断更新与维护路由表
分组转发:根据转发表将用户的IP数据报从合适的端口转发出去。
不可靠:指的是不能保证数据报能成功到达目的地。
发生错误时,丢弃该数据包,发送ICMP给源端。可靠性由上层提供。
无连接:IP协议不维护关于后续数据报的状态信息。
IP数据报可以不按照顺序发送和接受。A发送连续的数据报,到达B不一定是连续的,来回路由选择可能不一样,路线不一样,先后达到顺序不一样。
IP协议头格式
IPV4地址就是给因特网上的每一台主机或路由器的每一个接口分配一个全世界范围内是唯一的32bit的标识符。
1.版本号:占四位,就是IP协议的版本。IPV4就是4,IPV6就是6。
2.首部长度:占四位,IP长度为length * 4字节,最大首部长度为15 * 4 = 60字节
3.总长度:占16位,最多可以传送65535字节直接的IP数据报
4.3位标志和13位偏移字段:用于分片过程,当分片时到达目的端可以重新组装
5.生存时间TTL:经过一个路由器减1。字段为0时,数据报被丢弃,并且发送ICMP报文通知源主机。目的:为了防止数据报在选路中无休止在网络中流动。
6.协议:区分上层协议
7.首部校验和:仅对首部进行校验
因为数据链路层中的MTU规定了数据链路层传输的数据大小,需要进行比较,是否需要分片传送。
将首部中每个16bit进行二进制反码算数运算求和,结果取反码存在校验和字段中。
收到IP数据报后,同样对首部中每个16bit二进制反码算数运算求和,取反码最后结果为0,表示正确,否则就丢弃,由上层去处理。
共同点:用到的算法都是一样的
区别:IP计算不包括数据部分
主机从不把数据报从一个接口转发到另一个接口,而路由器则要转发数据报。
根据最长匹配原则,找到条目,发送到指定的路由器,如果找不到,返回一个“主机不可达”或“网络不可达”的错误。
(1)IP路由选择是逐跳进行的。
IP并不知道到达任何目的地的完整路线,只提供下一跳路由器地址。
(2)为一个网络指定一个路由器,而不是为每个主机指定一个路由器。这样可以缩小路由表规模。
两级IP地址下(分类编址):IP地址 = <网络号><主机号>
路由表内容:目的网络号,下一跳地址
当路由器收到待转发的数据报,不是将下一跳路由器IP地址填入IP数据报,然后送交给下层网络接口软件。网络接口软件使用ARP将下一跳IP地址转化成MAC地址,并放在链路层MAC首部,根据MAC寻找下一跳路由器。
IP数据报在转发的过程中不会改变源IP地址和目的IP地址(除非NAT转化会改变一次IP地址)
MAC地址在在交换机间(IP地址未改变)不会改变目的和源地址,但在路由器之间,会根据相应的IP地址寻找到MAC地址,所以会改变源MAC地址和目的MAC地址。
三级IP地址下(划分子网): IP地址 = <网络号><子网号><主机号>
路由表内容:目的网络,子网掩码,下一跳地址
网络地址 = IP地址 & 子网掩码
DIFR(无分类编址) IP地址 = <网络前缀><主机号>/20(位数)
最大位是广播地址,最小位是网络地址
路由表内容:网络前缀,下一跳地址
路由聚合(构造超网):找共同前缀
搜索匹配的主机地址—>搜索特定主机路由–>搜索匹配的网络地址—>搜索默认选项
IP层进行的选路实际上是一种选路机制,它搜索路由表并决定向哪个网络接口发送分组。
结果取决于该IP数据报是由主机产生的还是被转发的。
如果数据报是由本机产生的,那么就发送该数据报的应用程序返回一个差错。
如果是被转发的数据报,就给原始发送一份ICMP主机不可达的出错报文。
定长子网掩码分配 | 变长子网掩码分配 |
---|---|
使用同一个子网掩码来划分子网 | 使用不同的子网掩码来划分子网 |
划分方式不灵活(只能划分2^n个子网) | 子网划分方式灵活:可以按需分配 |
每个子网所分配的IP地址数量相同,容易造成IP地址浪费 | 每个子网所分配的IP地址数量可以不同,尽可能减少对IP地址的浪费 |
路由器输入端口接受分组,分组在队列中排队等待分组转发处理
路由器输出端口将交换结构传送来的分组进行缓存,然后交给链路层处理。
路由器处理分组的速率赶不上分组进入队列的速率,后面的分组就会被丢弃。
一个自治系统是一个有权自主决定在本系统内采用哪种路由协议的小型单位。
IGP(内部网关协议)AS内部使用的路由选择协议,RIP和OSPF协议
EGP(外部网关协议)AS之间选择的路由选择协议,BGP-4
RIP(基于距离向量的路由选择协议)
RIP要求网络中每一个路由器维护自己到其他网络的距离记录。
特点:
OSPF(基于链路状态的开放式最短路径优先)
BGP(边界网关协议)
BGP力求寻找一条能够到达目的网络比较好的路由,而不是最佳路由
一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通;但是IP协议并不提供可靠传输。如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因。 所以我们就需要一种协议来完成这样的功能–ICMP协议。
1.确认IP包是否成功到达目标地址
2.通知在发送过程中IP包被丢弃的原因
ICMP报文包含在IP数据报中,IP报头在ICMP报文的最前面。一个ICMP报文包括IP报头(至少20字节)、ICMP报头(至少八字节)和ICMP报文(属于ICMP报文的数据部分)。当IP报头中的协议字段值为1时,就说明这是一个ICMP报文。
一类是通知出错原因;一类是用于诊断查询
ICMP报文 | 类型(十进制) | 内容 |
---|---|---|
差错报告报文 | 3 | 目标不可达 |
4 | 源点抑制 | |
5 | 改变路由 | |
11 | 时间超过 | |
12 | 参数问题 | |
询问报文 | 8或0 | 回送请求或回答 |
13或14 | 时间戳请求和回答 | |
路由器给主机寻路时,没有找到相应路径,向源IP发回ICMP主机不可达。
(1)ICMP差错报文
(2)目的地址是广播地址或多播地址的IP数据报
(3)链路层广播的数据报
(4)不是IP分片的第一片
(5)源地址不是单个主机的数据包
(1)路由器收到数据报的接口与去往目的地址的出口相同时
(2)路由器发往目的地址的下一跳地址和源地址属于同一网段
重定向报文只能由路由器生成。
重定向报文是为主机而不是为路由器使用的。
本地地址(内部地址):仅在本机构内使用的IP地址,可以由本机自行分配,不需要用因特网申请
全球地址:全球唯一IP地址,本地地址转换成全球地址才可通信
NAT转换就是数据报的源本地地址转换成全球地址,在NAT路由器中增加对应关系,然后发送往目的IP地址。如果收到发回的数据报时,根据路由器的对应关系,发送给目的本地地址。
提供进程之间逻辑通信
运输层使用端口号来区分应用层的不同应用进程。
端口号只具有本地意义,取值范围0~65535。
发送方复用和接受方分用
相同点:
TCP和UDP都是传输层协议,双方通信需要开放端口
不同点:
(1)TCP提供面向连接传输,需要三次握手;UDP提供无连接传输,不需要建立连接
(2)TCP提供可靠的传输(有序,无差错,不丢失,不重复);UDP提供不可靠的传输
(3)TCP提供面向字节流的传输,因此将信息分割成组,并在接收端重组;UDP是面向数据报的传输,没有分组开销
(4)TCP提供拥塞控制和流量控制;UDP不提供拥塞控制和流量控制
(5)TCP传输慢,UDP传输快
(6)IP头中的标识字段,TCP是6,UDP是17
(7)TCP是点对点的两点间服务,UDP是可一对一、一对多、多对多的交互通信。
(8)TCP首部20字节,UDP首部8字节。
(9)TCP用于文件传输、重要状态更新等需要数据完整性要求高的场合,UDP用于视频会议、实时通信等通信实时性要求高的场合。
用户数据报UDP有两个字段:数据字段和首部字段。首部字段很简单,只有8个字节,有四个字段组成,每个字段的长度都是两个字节。各字段意义如下:
(1)源端口 源端口号。在需要对方回信时选用。不需要时可全用0。
(2)目的端口 目的端口号。这在终点交付报文时必须要使用到。
(3)长度 UDP用户数据报的长度,其最小值是8(仅有首部)。
(4)校验和 校验UDP用户数据报在传输中是否有错,有错就丢弃。(校验和覆盖UDP首部和数据)
UDP的校验和需要计算首部和数据部分。首部还包括伪首部(12字节)。
如果检验和有错,则UDP数据报被悄咪咪丢弃,不产生任何差错报文。
目的是让UDP两次检查数据是否已经正确到达目的地。
第一次,通过伪首部的IP地址检验,UDP确定该数据报是发送给本机IP地址的
第二次,通过协议字段检验,确认此报文是传给UDP的。
伪首部:源IP地址,目的IP地址,0,协议号,UDP长度。
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接。
客户端在收发数据前要使用 connect() 函数和服务器建立连接。建立连接的目的是保证IP地址、端口、物理链路等正确无误,为数据的传输开辟通道。
几个重要的字段:
对英文字母缩写的总结:Seq 是 Sequence 的缩写,表示序列;Ack(ACK) 是 Acknowledge 的缩写,表示确认;SYN 是 Synchronous 的缩写,愿意是“同步的”,这里表示建立同步连接;FIN 是 Finish 的缩写,表示完成。
TCP建立连接时要传输三个数据包,俗称三次握手(Three-way Handshaking)
使用 connect() 建立连接时,客户端和服务器端会相互发送三个数据包,请看下图:
1)第一次握手:建立连接,客户机发出SYN包,随机生成一个x,使seq=x,并进入SYN-SENT状态,等待服务器确认
2)第二次握手:服务器收到SYN包,也创建一个SYN包,并置SYN和ACK位为1,再随机生成一个y,使seq=y,将ack=x+1,发送给客户端,进入SYN-RECV状态
3)第三次握手:客户端收到数据包,检测SYN和ACK位,知道是服务器发送的确认包,同时创建一个ack=y+1的数据包发送给服务器,进入ESTABLISED状态,表示连接已经建立
4)服务器收到数据包,检查ack字段是否为y+1,也进入ESTABLISED状态
5)正式通信时,下一个数据报文段的序号仍是seq=x+1。
TCP规定SYN报文段不能携带数据,但要消耗一个序号。
FIN报文段可以不携带数据,不携带时也要消耗一个序号。如果携带N字节数据,FIN包的seq为S,那么接受方的ack=S+N+1。
普通报文报文段(如ACK报文)可以携带数据,如果不携带数据则不消耗序号,所以下一报文段的序号是x+1。
**重要说明:**三次握手的关键是要确认对方收到了自己的数据包,这个目标就是通过“确认号(Ack)”字段实现的。计算机会记录下自己发送的数据包序号 Seq,待收到对方的数据包后,检测“确认号(Ack)”字段,看Ack = Seq + 1
是否成立,如果成立说明对方正确收到了自己的数据包。
建立连接需要三次握手,断开连接需要四次握手,可以形象的比喻为下面的对话:
1)客户端发出连接释放报文,即FIN数据包,进入FIN_WAIT_1状态(seq=u)
2)服务器收到数据包,检测FIN标志位后,先发送“确认包”,seq=v,ack=u+1,进入CLOSE_WAIT状态
注意:服务器收到请求后并不是立即断开连接,而是先向客户端发送“确认包”,告诉它我知道了,我需要准备一下才能断开连接。
3)客户端收到数据包后进入FIN_WAIT_2状态,等待服务器再次发送数据包
4) 等待片刻后,服务器准备完毕,可以断开连接,于是再主动向客户端发送 FIN 包, seq=w,ack=u+1,然后进入LAST_ACK状态
5)客户端收到FIN包后,再次发送ACK包,ack=w+1,seq=u+1,然后进入TIME_WAIT状态
TIME_WAIT状态需要等待2MSL才会进入CLOSE状态,目的:为了保证服务器收到ACK包,如果服务器未收到,会重传上一个FIN包(在2MSL内)
6)服务器收到ACK包,就断开连接,进入CLOSE状态
由于接收发双方各自的工作速率和缓存空间的差异,可能会出现发送方的发送能力大于接收方的接受能力的现象,如不限制发送速率,就会导致接收方来不及接受帧而造成帧丢失。
TCP通过一个定时器(timer)采样了RTT( 报文段往返时间 )并计算RTO(超时重传时间),但是,如果网络上的延时突然增加,那么,TCP对这个事做出的应对只有重传数据,然而重传会导致网络的负担更重,于是会导致更大的延迟以及更多的丢包,这就导致了恶性循环,最终形成“网络风暴” —— TCP的拥塞控制机制就是用于应对这种情况。
首先需要了解一个概念,为了在发送端调节所要发送的数据量,定义了一个“拥塞窗口”(Congestion Window),在发送数据时,将拥塞窗口的大小与接收端ack的窗口大小做比较,取较小者作为发送数据量的上限。
拥塞控制与流量控制的区别 :
拥塞控制是防止过多的数据注入到网络中,使网络中的路由器或链路不致过载,是一个全局性的过程。
流量控制是点对点通信量的控制,是一个端到端的问题 ,主要就是抑制发送端发送数据的速率,以便接收端来得及接收。
拥塞控制的标志:
1.重传计时器超时
2.接收到三个重复确认
慢开始与拥塞避免
慢开始指TCP开始发送设置拥塞窗口为cwnd =1,并设置阈值ssthresh ,当cwnd < ssthresh时, cwnd呈指数增长,每次*2;
拥塞避免 并非完全能够避免拥塞,是说在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。 当cwnd == ssthresh时,cwnd线性增加,每次+1;
无论是在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有收到确认,虽然没有收到确认可能是其他原因的分组丢失,但是因为无法判定,所以都当做拥塞来处理),就把慢开始门限设置为出现拥塞时的发送窗口大小的一半。然后把拥塞窗口设置为1,执行慢开始算法。
快重传与快恢复
快重传指只要发送方连续收到三个重复确认就认为接收方未收到之前的一个报文段,便对其进行立即重传, 而不必继续等待设置的重传计时器RTO超时。
快恢复(与快重传配合使用)
1.采用快恢复算法时,慢开始只在TCP连接建立时和网络出现超时时才使用。
2.当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把ssthresh门限减半。但是接下去并不执行慢开始算法。
3.考虑到如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞。所以此时不执行慢开始算法,而是将cwnd设置为ssthresh+3( 3的意思是确认有3个数据包被收到了 )的大小,然后执行拥塞避免算法重传报文段。
(1)序列号 确认号 检验和 超时重传
(2)滑动窗口控制 快速重传 重复确认应答
(3)拥塞控制(慢启动 拥塞避免 快重传 快恢复)
(4)流量控制( 网络拥堵 ) 顺序控制( 数据包到达接收端主机顺序乱掉 )
UDP和TCP的校验和都是通过数据和首部(包括伪首部)计算得来
伪报头不会在网络中传送,检验和中所包含的伪报头内容可以避免目的端错误地接受错误路由的数据报。(检查伪报头中的目的IP地址,选择只接受发向它的数据报)
3次握手:
4次挥手: 用来保障通讯双方可以安全的回收TCP通信的系统资源
慢启动:cnwd(拥塞窗口)指数增长
拥塞避免:线性增加,如果超时:cnwd=1,ssthresh(阈值)=当前的cnwd的一半
快重传:收到3个重复确认报文直接开始快恢复
快恢复:ssthresh=原来的一半,snwd直接从ssthresh开始线性增加
因为当Server端收到Client端的SYN连接请求时,可以直接发送SYN和ACK报文,其中ACK用来应答,SYN用来同步。但在关闭连接时,当Server端收到FIN,可能并不会立即关闭SOCKET,所以只能回复一个ACK报文表示收到了SYN包,等待Server端的所有数据发送完了,才会发送FIN报文,因此需要四次握手。
**MSL就是报文最大生存时间, 2MSL就是一个发送和一个回复所需的最大时间。 ** TCP 是面向连接的传输方式 , 必须保证数据能够正确到达目标机器,不能丢失或出错 ,而网络是不可靠的,有可能最后一个ACK丢失了,TIME_WAIT状态就是用来重发丢失的报文的。在Client发送出最后ACK确认包后,如果Server未收到,就会不断地重复发送FIIN数据包。Client会设置一个计时器,等待2MSL的时间,在该时间段内再次收到FIN包,那么Client会重发ACK并再次等待2MSL。 如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。
三次握手需要完成2个重要的功能,既要双方做好发送数据的准备工作(双发都知道彼此已准备好了),也要允许双方就初始序列号进行协商,这个seq需要在握手过程中发送和确认。
有争议:如果改成2次握手连接可能会发生死锁。当C给S发送一个SYN包,S收到并发送确认应答包。如果只有2次,此时S认为连接已经建立就开始发送数据,但这个确认应答包如果在传输过程中丢失了,C没有收到便无法知道S是否已经准备好,不知道S建立怎样的序列号甚至怀疑S释放收到自己的连接请求。在这种情况下,C认为连接未成功,将忽略S发来的任何数据包,只等待确认应答包,而S在发出数据包超时后,重复发出同样的分组,这就形成了死锁。
TCP设有保活计时器,如果客户端出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2个小时,若两个小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没有响应,服务器就认为客户端出了故障,接着就关闭连接。
ARP协议将IP地址转换成MAC地址,DNS协议将域名转换为IP地址。
IP地址是面向主机的,而域名是面向用户的。
DNS协议基于UDP实现,服务器的端口号为53.
域名层次结构的命名树:
先找本地是否缓存,没有的话就找DNS服务器
第一大步骤:本机向本地域名服务器发出一个DNS请求报文,报文中写到需要查询的域名
第二大步骤:本地域名服务器向本机回应一个DNS响应报文,里面包含域名对应的IP的地址
两大具体步骤:
1.主机向本地域名服务器进行递归查询
2.本地域名服务器采用迭代查询
递归查询: 本机向本地域名服务器发出一次查询请求,就静待最终的结果。如果本地域名服务器无法解析,自己会以DNS客户机的身份向其它域名服务器查询,直到得到最终的IP地址告诉本机
迭代查询: 本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步到哪里去查询,然后它再去查,每次它都是以客户机的身份去各个服务器查询
假定某客户机想获知域名为y.abc.com 主机的IP地址,域名解析的过程(共使用8 个UDP 报文)如下:
1)客户机向其本地域名服务器发出DNS 请求报文。
2)本地域名服务器收到请求后,查询本地缓存,若没有该记录,则以DNS 客户的身份向根 域名服务器发出解析请求。
3)根域名服务器收到请求后,判断该域名属于com 域,将对应的顶级域名服务器dns.com 的IP 地址返回给本地域名服务器。
4)本地域名服务器向顶级域名服务器dns.com 发出解析请求报文。
5)顶级域名服务器dns.com 收到请求后,判断该域名属于abc.com 域,因此将对应的授权域名服务器dns.abc.com 的IP 地址返回给本地域名服务器。
6)本地域名服务器向授权域名服务器dns.abc.com 发起解析请求报文。
7)授权域名服务器dns.abc.com 收到请求后,将查询结果返回给本地域名服务器。
8)本地域名服务器将查询结果保存到本地缓存,同时返回给客户机。
图解DNS解析过程:
FTP提供交互式访问,而简单文件传送TFTP只支持文件传输。
FTP:允许客户指明文件的类型与格式,允许文件具有存取权限
基于TCP的FTP和基于UDP的IFTP都是属于复制整个文件的文件共享协议
基于TCP的FTP 使用客户服务器方式。一个 FTP 服务器进程可同时为多个客户进程提供服务。FTP 的服务器进程由两大部分组成:一个主进程,负责接受新的请求;另外有若干个从属进程,负责处理单个请求。
用途:
FTP客户和服务器之间要建立“控制连接”和“数据连接”着两个并行的TCP连接。
控制连接在整个会话期间一直保持打开,用于传送FTP相关控制命令。
数据连接用于文件传输,在每次文件传输时才建立,传输结束就关闭。
默认情况下,FTP使用TCP 21端口进行控制连接,TCP 20端口进行数据连接。
是否使用TCP 20端口建立数据连接与传输模式有关,主动方式使用TCP 20端口,被动方式由服务器和客户端自行协商决定。
工作步骤:
HTTP协议<超文本传输协议>,用于从WWW服务器传输超文本到本地浏览器的传输协议。HTTP协议是一个应用层面向对事务的协议,基于TCP/IP通信协议来传递输数据,默认端口80,由请求和响应构成,是客户端和服务器之间数据传输的格式规范。
支持客户端/服务器模型
简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快
灵活:HTTP允许传输任意类型的数据对象
无连接:限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户应答后,即断开连接,采用这样的方式节约传输时间。
无状态:协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。 即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。
坏处:如果后续的处理需要用到之前的信息,则必须要重传,这样就导致了每次连接传输的数据量增大.
好处:如果后续的连接不需要之前提供的信息,响应就会比较快.
为了解决HTTP的无状态特性,出现了Cookie和Session技术.
cookie是一种发送到客户浏览器的文本串句柄,并保存在客户机硬盘上,可以用来在WEB站点会话间持久的保持数据。 关闭浏览器窗口,cookie就消失 。
Session是访问者从到达某个特定主页离开为止的那段时间。Session其实是利用了Cookie进行信息处理, 重启浏览器后再次访问原有的连接依然会创建一个新的session,
如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份
区别:
请求报文:
常见的请求头部:
Host:用于指定请求资源的主机名和端口号(默认80)
Host: www.baidu.com
User-Agent:用户请求的代理软件
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36
Referer:代表当前访问的URL的上一个URL,也就是用户从什么地方转到本页面的。 比如说html中有图片需要显示,请求图片是就会加上该html所在的url。
Referer: https://www.baidu.com/
Cookie:常用来表示请求者的身份。比如有些会话信息(SesssionId)会存在Cookie中。
Cookie:BAIDUID=AAABBBCCCDDDEEEFFFGGG;BIDUPSID=ZYXWVUOPQRST;PSTM=1494145048;__cfduid=d9a1edfb6fa7a6a21167d12a07558b2551494568096;BD_CK_SAM=1;PSINO=1;BD_HOME=1;H_PS_PSSID=1421_21079_21672_20927;BD_UPN=12314353;sugstore=1
Range: 请求实体内容的一部分,多线程下载一定会用到该请求头。
Accept: 客户端接受什么类型的信息。类型用MIME表示。
响应报文:
常见的响应头部:
Server: 服务器所使用的Web服务器名称。攻击者可以通过查看该头信息,来探测Web服务器名称。所以一般服务器端会对该头信息进行修改。
Server: Apache/2.4.6 (CentOS)
Set-Cookie::向客户端设置Cookie。与Cookie请求头相互对应。Set-Cookie头是服务器向客户端设置Cookie,Cookie头是客户端向服务器传客户端已经保存的Cookie信息。
向客户端设置Cookie。与Cookie请求头相互对应。Set-Cookie头是服务器向客户端设置Cookie,Cookie头是客户端向服务器传客户端已经保存的Cookie信息。
Location: 服务器通过该头信息告诉浏览器去访问那个页面,浏览器接收到这样的响应信息后,通常会立刻访问Location头所指向的页面。这个头通常配合302重定向状态码使用。
Refresh:服务器通过Refresh头信息让浏览器定时刷新。
Refresh: 3;url="http://www.baidu.com"
GET:用于请求访问已经被URI (统一资源标识符) 识别的资源,可以通过URI传参给服务器
POST:用于传输信息给服务器
HEAD:获得报文头部,与GET方法类似,只是不返回报文主体,一半用于验证URI是否有效
OPTIONS: 查询响应URI支持的HTTP方法
PUT:传输文件,报文主体中包含文件内容,保存到对应URI中
DELETE: 删除文件,与PUT方法相反,删除对应URI位置的文件
TRACE: 回显服务器收到的请求,主要用于测试或诊断。比较少见。
CONNECT: HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。
其中GET和POST是最常用的,其次是HEAD和OPTIONS;像PUT和DELETE属于危险方法,服务器都会关闭;TRACE和CONNECT非常少见
两者的底层都是TCP/IP,只是规定其使用方法不同
GET重点在从服务器上获取资源,POST重点在向服务器发送数据
GET参数放在URL传递,而POST放在Request body中,所以POST更安全
GET传输量小,受到URL长度的限制,POST没有限制,所有POST可以传输大量数据
GET在浏览器回退时是无害的,而POST会再次提交请求。
GET产生一个TCP数据报,POST产生两个TCP数据报
对于GET方式的请求,浏览器会把header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
http状态返回代码 1xx(临时响应):表示临时响应并需要请求者继续执行操作的状态代码。
http状态返回代码 2xx (成功):表示成功处理了请求的状态代码。
http状态返回代码 3xx (重定向):表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。
http状态返回代码 4xx(请求错误):这些状态代码表示请求可能出错,妨碍了服务器的处理。
http状态返回代码 5xx(服务器错误):这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。
状态码 | 含义 |
---|---|
200 | 请求已成功,响应头和数据将随响应返回 |
202 | 服务器接收请求,但尚未处理 |
204 | 请求受理但无资源返回 |
301 | 永久重定位,请求网页已永久移动到新位置 |
302 | 临时重定位,请求的资源现在临时从不同的URI中获得 |
307 | 临时重定位,但强制要求POST方法 |
400 | 请求报文语法有误,服务器无法识别 |
401 | 请求需要认证 |
403 | 请求的对应资源禁止被访问 |
404 | 请求失败,服务器无法找到对应资源 |
500 | 服务器内部错误 |
503 | 服务器正忙 |
1.例如对www.baidu.com这个网址进行DNS域名解析,向DNS服务器发送UDP报文,DNS服务器返回UDP报文,得到对应的IP地址。
2.根据这个IP,向Web服务器发起TCP的三次握手。
3.建立TCP连接后发起HTTP请求,HTTP请求在TCP报文中。
4.服务器响应HTTP请求,浏览器得到html代码
5.浏览器解析html代码,并请求html代码中的资源(如js、css图片等)(先得到html代码,才能去找这些资源)
6.浏览器对页面进行渲染呈现给用户
HTTP 既可以使用非持久连接,也可以使用持久连接(HTTP/1.1 支持)。
对于非持久连接,每个网页元素对象(如JPEG 图形、Flash 等)的传输都需要单独建立一个 TCP 连接,(第三次握手的报文段中捎带了客户对万维网文档的请求)。也就是说, 请求一个万维网文档所需的时间是该文档的传输时间(与文档大小成正比)加上两倍往返时间RTT(一个RTT 用于TCP 连接,另一个RTT 用于请求和接收文档)。
所谓持久连接,是指万维网服务器在发送响应后仍然保持这条连接,使同一个客户和服务器 可以继续在这条连接上传送后续的HTTP 请求与响应报文,
HTTP协议传输数据未加密,HTTPS协议由SSL(Secure Sockets Layer)和HTTP协议构建的可进行加密传输、身份认证的网络协议,要比HTTP更加安全。
HTTPS优点:
HTTPS缺点:
HTTPS握手阶段延时较高:由于在进行HTTP会话之前还需要进行SSL握手,因此HTTPS协议握手阶段延时增加
HTTPS部署成本高:一方面HTTPS协议需要使用证书来验证自身的安全性,所以需要购买CA证书;另一方面由于采用HTTPS协议需要进行加解密的计算,占用CPU资源较多,需要的服务器配置或数目高
为解决SMTP传送非ASCII码文本的问题,提出了多用途因特网邮件扩展MIME