计算机网络基础知识

计算机网络基础知识

OSI七层模型(自顶向下)

层次协议作用
应用层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 :应用层,传输层,网际层,网络接口层

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iOiOh6Ye-1591780349930)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1587396963906.png)]

优点:

  1. 分工明确,责任明确
  2. 对等层通信
  3. 逐层处理,层层负责

物理层

数据链路层

封装成帧

在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。确定帧的界限。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V9NqCEnu-1591780349932)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1584607688065.png)]

当帧未发送完,发送端出问题重发时,接收端会抛弃前面接受的数据,重新接受。因为接收端只会接受成对的帧头和帧尾数据。

透明传输

若数据中存在与帧结束符相同的数据,那么计算机会误以为该数据即为帧结束符,而造成错误。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FeB1SSqj-1591780349934)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1584607917435.png)]

解决办法:发送端在控制字符前插入转义字符,接收端接收到后,删除转义字符。

差错控制

传输过程中产生比特差错:1可能变成0,0可能变成1.

  1. 奇偶校验
  2. 循环冗余校验CRC
可靠传输

使用差错检测技术,接收方的链路层就可检测出帧在传输过程是否产生了误码(比特错误)。

数据链路层向上层提供的服务类型

  1. 不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做
  2. 可靠的传输服务:想办法实现发送端发送什么,接收端就接收什么

一般情况下,有线链路的误码率低,不要求可靠传输,无线链路误码率高,要求可靠传输

传输差错:比特差错,分组丢失,分组失序,分组重复

可靠传输实现机制(流量控制的常见方式):

  1. 停止-等待协议SW(Stop-and-Wait):发送方每发送一帧都要等待接收方的应答号才能发送下一帧
  2. 回退N帧协议GBN(Go-Back-N):发送方一次可以发送N帧,按序接收,重传从最后一个确认号开始
  3. 选择重传协议SR(Selective-Request):发送方一次可以发送N帧,可以不按序接收,重传没有确认的帧。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bQaUJOJG-1591780349937)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1586866882396.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1EYHnvon-1591780349938)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1586869406229.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-beNlUXU4-1591780349940)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1586869365532.png)]

ARP协议(地址解析协议)

ARP的作用:ARP为IP地址到对应的MAC地址(硬件地址,48位)提供动态映射

工作过程:ARP高速缓存存放IP地址到MAC地址的映射表,ARP表。主机向本局域网内的主机B发送IP数据报时,先在ARP表中查看有无B主机的IP地址映射,如有,就向MAC地址进行发送至帧。如果无,就进行广播ARP请求分组,主机B收到请求后进行响应,返回B的IP地址和MAC地址的映射,之后主机A更新自己的ARP表,进行发送帧。

ARP报文格式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aFOuegHb-1591780349942)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1581234294045.png)]

总结:共28个字节,以太网先目的后源,ARP先发送端后目的端,先硬件后协议。

数据链路层的最小MTU( 最大传输单元 )为46字节,最大MTU为1500字节。

MAC地址的范围是64字节—1518字节,比MTU多出18个字节

交换机相当于多端口的网桥,根据帧的目的MAC地址转发帧,使多台主机可以在不同的冲突域中可以传输数据。

冲突域(物理分段):在OSI模型中,冲突域被看作是第一层的概念,连接同一冲突域的设备有Hub,Reperter或者其他进行简单复制信号的设备。也就是说,用Hub(集线器)或者Repeater(中继器)连接的所有节点可以被认为是在同一个冲突域内,它不会划分冲突域。而第二层设备(网桥,交换机)第三层设备(路由器)都可以划分冲突域的,当然也可以连接不同的冲突域。简单的说,可以将Repeater等看成是一根电缆,而将网桥等看成是一束电缆。
广播域 接收同样广播消息的节点的集合。如:在该集合中的任何一个节点传输一个广播帧,则所有其他能收到这个帧的节点都被认为是该广播帧的一部分。由于许多设备都极易产生广播,所以如果不维护,就会消耗大量的带宽,降低网络的效率。由于广播域被认为是OSI中的第二层概念,所以像Hub,交换机等第一,第二层设备连接的节点被认为都是在同一个广播域。而路由器,三层交换机则可以划分广播域,即可以连接不同的广播域

网络层

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TbmwlpeD-1591780349943)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1587797707358.png)]

作用:实现网络互连,路由,分组转发,拥塞控制,进而实现数据包在各网络之间传输

解决问题

  1. 网络层向运输层提供怎样的服务
  2. 网络层寻址问题
  3. 路由选择问题

两种服务

虚电路服务数据报服务
思路可靠通信应当由网络来保证可靠通信应当由用户主机来保证
连接的建立提前建立不需要
目标地址仅在建立阶段使用每个分组都有目标的完整地址
分组转发固定虚电路路由每个分组选择路由进行转发
结点故障虚电路不工作可能丢失分组或路由发生改变
分组顺序按发送顺序到达终点可能无序
差错控制可以由网络负责,也可以由用户主机负责由用户主机负责

在同一个局域网上的主机或路由器的IP地址中的网络号相同。

路由器的主要功能

路由器总是具有两个或者两个以上的IP地址,因为需要转发数据报。

路由选择:按照路由算法,根据网络的拓扑变化动态地改变选择的路由,不断更新与维护路由表

分组转发:根据转发表将用户的IP数据报从合适的端口转发出去。

IP协议
【问题1】:如何理解IP的不可靠和无连接?

不可靠:指的是不能保证数据报能成功到达目的地。

发生错误时,丢弃该数据包,发送ICMP给源端。可靠性由上层提供。

无连接:IP协议不维护关于后续数据报的状态信息。

IP数据报可以不按照顺序发送和接受。A发送连续的数据报,到达B不一定是连续的,来回路由选择可能不一样,路线不一样,先后达到顺序不一样。

【问题2】:IP报文的格式和各个字段的含义?

IP协议头格式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OOlfOWdP-1591780349943)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1584619203299.png)]

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.首部校验和:仅对首部进行校验

【问题3】:为什么IP首部中要有总长度字段?

因为数据链路层中的MTU规定了数据链路层传输的数据大小,需要进行比较,是否需要分片传送。

【问题4】:IP首部校验和怎么计算,与ICMP,IGMP,TCP,UDP的首部校验和有什么区别和共同点?

将首部中每个16bit进行二进制反码算数运算求和,结果取反码存在校验和字段中。

收到IP数据报后,同样对首部中每个16bit二进制反码算数运算求和,取反码最后结果为0,表示正确,否则就丢弃,由上层去处理。

共同点:用到的算法都是一样的

区别:IP计算不包括数据部分

【问题5】:主机和路由器本质区别?

主机从不把数据报从一个接口转发到另一个接口,而路由器则要转发数据报。

【问题6】:IP路由器选择的过程是怎么样的?

根据最长匹配原则,找到条目,发送到指定的路由器,如果找不到,返回一个“主机不可达”或“网络不可达”的错误。

【问题7】:IP路由器选择的特性有什么?

(1)IP路由选择是逐跳进行的。

IP并不知道到达任何目的地的完整路线,只提供下一跳路由器地址。

(2)为一个网络指定一个路由器,而不是为每个主机指定一个路由器。这样可以缩小路由表规模。

【问题8】:分组转发算法

两级IP地址下(分类编址):IP地址 = <网络号><主机号>

路由表内容:目的网络号,下一跳地址

  1. 从数据报的首部得到目的主机的 IP 地址 D, 得出目的网络地址为 N。
  2. 若网络 N 与此路由器直接相连,则把数据报直接交付目的主机 D;否则是间接交付,执行3
  3. 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行4。
  4. 若路由表中有到达网络 N 的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行5.
  5. 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行6
  6. 报告转发分组出错。

当路由器收到待转发的数据报,不是将下一跳路由器IP地址填入IP数据报,然后送交给下层网络接口软件。网络接口软件使用ARP将下一跳IP地址转化成MAC地址,并放在链路层MAC首部,根据MAC寻找下一跳路由器。

IP数据报在转发的过程中不会改变源IP地址和目的IP地址(除非NAT转化会改变一次IP地址)

MAC地址在在交换机间(IP地址未改变)不会改变目的和源地址,但在路由器之间,会根据相应的IP地址寻找到MAC地址,所以会改变源MAC地址和目的MAC地址。

三级IP地址下(划分子网): IP地址 = <网络号><子网号><主机号>

路由表内容:目的网络,子网掩码,下一跳地址

网络地址 = IP地址 & 子网掩码

  1. 从收到的分组的首部提取目的 IP 地址 D。
  2. 先用路由表中每项的子网掩码和 D 逐位相“与”,看是否和本机的网络地址匹配。若匹配,则将分组直接交付。 否则就是间接交付,执行3。
  3. 若路由表中有目的地址为 D 的特定主机路由,则将 分组传送给指明的下一跳路由器;否则,执行4。
  4. 对路由表中的每一行的子网掩码和 D 逐位相“与”, 若其结果与该行的目的网络地址匹配,则将分组传送 给该行指明的下一跳路由器;否则,执行5。
  5. 若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器;否则,执行6。
  6. 报告转发分组出错。

DIFR(无分类编址) IP地址 = <网络前缀><主机号>/20(位数)

最大位是广播地址,最小位是网络地址

路由表内容:网络前缀,下一跳地址

路由聚合(构造超网):找共同前缀

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eJfW0A6a-1591780349945)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1585846510780.png)]

【问题9】:IP搜索路由表的步骤?

搜索匹配的主机地址—>搜索特定主机路由–>搜索匹配的网络地址—>搜索默认选项

IP层进行的选路实际上是一种选路机制,它搜索路由表并决定向哪个网络接口发送分组。

【问题10】:如果路由表中无默认项,而又没有找到匹配 项,这时如何处理?

结果取决于该IP数据报是由主机产生的还是被转发的。

如果数据报是由本机产生的,那么就发送该数据报的应用程序返回一个差错。

如果是被转发的数据报,就给原始发送一份ICMP主机不可达的出错报文。

【问题11】:IP地址的分类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HrsYkrLJ-1591780349946)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1581238929361.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hEXawNma-1591780349947)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1581239125137.png)]

  1. 只有A类、B类、C类地址可分配给网络中的主机或路由器的各接口
  2. A类地址中0.0.0.0是一个特殊的IPV4地址,只能做源地址使用,便是本网络上的本主机
  3. 主机号127开头后面非全0或全1,既可作源地址也可做目的地址,用与本地软件环回测试
  4. 255.255.255.255作为目的地址,只能在本网络上进行广播
  5. 主机号全为0的地址是网络地址,不能分配给主机或者路由器的各接口
  6. 主机号全为1的地址是广播地址,不能分配给主机或路由器的各接口
定长子网掩码分配变长子网掩码分配
使用同一个子网掩码来划分子网使用不同的子网掩码来划分子网
划分方式不灵活(只能划分2^n个子网)子网划分方式灵活:可以按需分配
每个子网所分配的IP地址数量相同,容易造成IP地址浪费每个子网所分配的IP地址数量可以不同,尽可能减少对IP地址的浪费
【问题12】:网络层如何处理分组?

路由器输入端口接受分组,分组在队列中排队等待分组转发处理

路由器输出端口将交换结构传送来的分组进行缓存,然后交给链路层处理。

路由器处理分组的速率赶不上分组进入队列的速率,后面的分组就会被丢弃。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kdok6HKU-1591780349948)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1585017341065.png)]

自治系统(AS)

一个自治系统是一个有权自主决定在本系统内采用哪种路由协议的小型单位。

IGP(内部网关协议)AS内部使用的路由选择协议,RIP和OSPF协议

EGP(外部网关协议)AS之间选择的路由选择协议,BGP-4

在这里插入图片描述

RIP(基于距离向量的路由选择协议)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BXTNAyH3-1591780349950)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1585020524604.png)]

RIP要求网络中每一个路由器维护自己到其他网络的距离记录。

  1. 仅与相邻路由器交换信息
  2. 交换的信息是自己的路由表
  3. 按固定时间间隔交换路由信息(例如30秒)

特点:

  1. 实现简单,开销较小
  2. 当网络出现故障时,信息传递给传送到所有路由器需要时间较长

OSPF(基于链路状态的开放式最短路径优先)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QZ4vLhwI-1591780349951)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1585020485374.png)]

  1. 洪泛法发送(向AS内的所有路由器发送信息——与本路由器相邻的所有路由器的链路信息)
  2. 分组类型:问候分组、数据库描述分组、链路状态请求分组、链路状态更新分组、链路状态确认分组

BGP(边界网关协议)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vnmExsZV-1591780349952)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1585049609482.png)]

BGP力求寻找一条能够到达目的网络比较好的路由,而不是最佳路由

ICMP协议(网际控制报文协议)

一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通;但是IP协议并不提供可靠传输。如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因。 所以我们就需要一种协议来完成这样的功能–ICMP协议。

ICMP功能

1.确认IP包是否成功到达目标地址

2.通知在发送过程中IP包被丢弃的原因

【问题1】:ICMP报文格式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cPJoiBhy-1591780349953)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1581239546318.png)]

ICMP报文包含在IP数据报中,IP报头在ICMP报文的最前面。一个ICMP报文包括IP报头(至少20字节)、ICMP报头(至少八字节)和ICMP报文(属于ICMP报文的数据部分)。当IP报头中的协议字段值为1时,就说明这是一个ICMP报文。

【问题2】:ICMP报文的分类?

一类是通知出错原因;一类是用于诊断查询

ICMP报文类型(十进制)内容
差错报告报文3目标不可达
4源点抑制
5改变路由
11时间超过
12参数问题
询问报文8或0回送请求或回答
13或14时间戳请求和回答
【问题3】:ICMP的主机不可达报文是在什么情况下发出的?

路由器给主机寻路时,没有找到相应路径,向源IP发回ICMP主机不可达。

【问题4】:什么情况不会导致产生ICMP差错报文?

(1)ICMP差错报文

(2)目的地址是广播地址或多播地址的IP数据报

(3)链路层广播的数据报

(4)不是IP分片的第一片

(5)源地址不是单个主机的数据包

【问题5】:ICMP重定向差错报文是怎么来的,在何种场合出现?

(1)路由器收到数据报的接口与去往目的地址的出口相同时

(2)路由器发往目的地址的下一跳地址和源地址属于同一网段

【问题6】:重定向报文有什么规则?

重定向报文只能由路由器生成。

重定向报文是为主机而不是为路由器使用的。

虚拟专用网VPN与网络地址转换NAT

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g4SsDvYr-1591780349953)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1585906567466.png)]

本地地址(内部地址):仅在本机构内使用的IP地址,可以由本机自行分配,不需要用因特网申请

全球地址:全球唯一IP地址,本地地址转换成全球地址才可通信

  1. 利用公用的因特网作为本机构各专用网之间的通信载体
  2. 传递时会将内部数据报进行加密封装,通过IP隧道技术发送至目的全球IP地址,进行解密之后,发送到目的地址。

NAT转换就是数据报的源本地地址转换成全球地址,在NAT路由器中增加对应关系,然后发送往目的IP地址。如果收到发回的数据报时,根据路由器的对应关系,发送给目的本地地址。

传输层

提供进程之间逻辑通信

运输层使用端口号来区分应用层的不同应用进程。

端口号只具有本地意义,取值范围0~65535。

发送方复用和接受方分用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0iOBOQ2I-1591780349954)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1585920171966.png)]

UDP协议
【问题1】:UDP(用户数据报协议)和TCP(传输控制协议)的简单介绍与比较?

相同点:

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用于视频会议、实时通信等通信实时性要求高的场合。

【问题2】:UDP报头字段和含义?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zdxUYs9U-1591780349955)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1581312877054.png)]

用户数据报UDP有两个字段:数据字段和首部字段。首部字段很简单,只有8个字节,有四个字段组成,每个字段的长度都是两个字节。各字段意义如下:

(1)源端口 源端口号。在需要对方回信时选用。不需要时可全用0。

(2)目的端口 目的端口号。这在终点交付报文时必须要使用到。

(3)长度 UDP用户数据报的长度,其最小值是8(仅有首部)。

(4)校验和 校验UDP用户数据报在传输中是否有错,有错就丢弃。(校验和覆盖UDP首部和数据)

【问题3】:UDP的校验和怎么计算?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7Ywp1cvT-1591780349956)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1581313016760.png)]

UDP的校验和需要计算首部和数据部分。首部还包括伪首部(12字节)。

如果检验和有错,则UDP数据报被悄咪咪丢弃,不产生任何差错报文。

【问题4】:为什么要加伪首部?

目的是让UDP两次检查数据是否已经正确到达目的地。

第一次,通过伪首部的IP地址检验,UDP确定该数据报是发送给本机IP地址的

第二次,通过协议字段检验,确认此报文是传给UDP的。

伪首部:源IP地址,目的IP地址,0,协议号,UDP长度。

TCP协议

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接。

客户端在收发数据前要使用 connect() 函数和服务器建立连接。建立连接的目的是保证IP地址、端口、物理链路等正确无误,为数据的传输开辟通道。

TCP数据报结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v6otf6gE-1591780349957)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1584766947866.png)]

几个重要的字段:

  1. 端口号:用来标识发送与接收的应用进程。
  2. 序号:seq( Sequence Number ) 序号占32位,用来标识从计算机A发送到计算机B的TCP报文数据部分的第一个字节的序号,计算机发送数据时对此进行标记。
  3. 确认号:ack( Acknowledge Number ) 确认号占32位,客户端和服务器端都可以发送,用来标识期望收到对方下一个TCP报文段数据部分的第一个字节序号,ack = seq + 1。
  4. 标志位:每个标志位占用1Bit,共有6个, 分别为 URG、ACK、PSH、RST、SYN、FIN,具体含义如下:
    • URG:紧急指针有效。
    • ACK:确认序号有效。
    • PSH:接收方应该尽快将这个报文交给应用层。
    • RST:重置连接。
    • SYN:TCP连接建立时用来同步序号
    • FIN:释放TCP连接
  5. 检验和:检验首部与数据部分(包括12字节伪首部)

对英文字母缩写的总结:Seq 是 Sequence 的缩写,表示序列;Ack(ACK) 是 Acknowledge 的缩写,表示确认;SYN 是 Synchronous 的缩写,愿意是“同步的”,这里表示建立同步连接;FIN 是 Finish 的缩写,表示完成。

TCP三次握手,建立连接

TCP建立连接时要传输三个数据包,俗称三次握手(Three-way Handshaking)

  • [Shake 1] 套接字A:“你好,套接字B,我这里有数据要传送给你,建立连接吧。”
  • [Shake 2] 套接字B:“好的,我这边已准备就绪。”
  • [Shake 3] 套接字A:“谢谢你受理我的请求。”

使用 connect() 建立连接时,客户端和服务器端会相互发送三个数据包,请看下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UiBh5yo1-1591780349958)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1585932801039.png)]

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是否成立,如果成立说明对方正确收到了自己的数据包。

TCP四次握手断开连接

建立连接需要三次握手,断开连接需要四次握手,可以形象的比喻为下面的对话:

  • [Shake 1] 套接字A:“任务处理完毕,我希望断开连接。”
  • [Shake 2] 套接字B:“哦,是吗?请稍等,我准备一下。”
  • 等待片刻后……
  • [Shake 3] 套接字B:“我准备好了,可以断开连接了。”
  • [Shake 4] 套接字A:“好的,谢谢合作。”

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yt7bP7dx-1591780349959)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1585932524316.png)]

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流量控制

由于接收发双方各自的工作速率和缓存空间的差异,可能会出现发送方的发送能力大于接收方的接受能力的现象,如不限制发送速率,就会导致接收方来不及接受帧而造成帧丢失。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0UjiLrkR-1591780349960)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1585923791748.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ye8hYsEl-1591780349961)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1585923965839.png)]

TCP拥塞控制机制

TCP通过一个定时器(timer)采样了RTT( 报文段往返时间 )并计算RTO(超时重传时间),但是,如果网络上的延时突然增加,那么,TCP对这个事做出的应对只有重传数据,然而重传会导致网络的负担更重,于是会导致更大的延迟以及更多的丢包,这就导致了恶性循环,最终形成“网络风暴” —— TCP的拥塞控制机制就是用于应对这种情况。
首先需要了解一个概念,为了在发送端调节所要发送的数据量,定义了一个“拥塞窗口”(Congestion Window),在发送数据时,将拥塞窗口的大小与接收端ack的窗口大小做比较,取较小者作为发送数据量的上限。

拥塞控制与流量控制的区别 :

拥塞控制是防止过多的数据注入到网络中,使网络中的路由器或链路不致过载,是一个全局性的过程。
流量控制是点对点通信量的控制,是一个端到端的问题 ,主要就是抑制发送端发送数据的速率,以便接收端来得及接收。

拥塞控制的标志:

1.重传计时器超时

2.接收到三个重复确认

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FqkSYDUB-1591780349962)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1581218196387.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DN6wX67y-1591780349963)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1581218211437.png)]

慢开始与拥塞避免

慢开始指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】:TCP协议如何保证可靠性?

(1)序列号 确认号 检验和 超时重传

(2)滑动窗口控制 快速重传 重复确认应答

(3)拥塞控制(慢启动 拥塞避免 快重传 快恢复)

(4)流量控制( 网络拥堵 ) 顺序控制( 数据包到达接收端主机顺序乱掉 )

【问题2】:TCP和UDP为什么存在伪报头?

UDP和TCP的校验和都是通过数据和首部(包括伪首部)计算得来

伪报头不会在网络中传送,检验和中所包含的伪报头内容可以避免目的端错误地接受错误路由的数据报。(检查伪报头中的目的IP地址,选择只接受发向它的数据报)

【问题3】:为什么要3次握手,4次挥手?

3次握手

  1. 让TCP双方都知道对方存在
  2. 使TCP双方协商一些参数(最大窗口值、时间戳选项以及服务质量)
  3. 使TCP双方都能对运输实体资源进行分配(缓存大小)

4次挥手: 用来保障通讯双方可以安全的回收TCP通信的系统资源

【问题4】 TCP的流量控制机制?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Kxn9YZNF-1591780349963)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1581315699461.png)]

慢启动:cnwd(拥塞窗口)指数增长

拥塞避免:线性增加,如果超时:cnwd=1,ssthresh(阈值)=当前的cnwd的一半

快重传:收到3个重复确认报文直接开始快恢复

快恢复:ssthresh=原来的一半,snwd直接从ssthresh开始线性增加

【问题5】为什么连接的时候是3次握手,关闭的时候是4次握手?

因为当Server端收到Client端的SYN连接请求时,可以直接发送SYN和ACK报文,其中ACK用来应答,SYN用来同步。但在关闭连接时,当Server端收到FIN,可能并不会立即关闭SOCKET,所以只能回复一个ACK报文表示收到了SYN包,等待Server端的所有数据发送完了,才会发送FIN报文,因此需要四次握手。

【问题6】为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间,2分钟)才能返回到CLOSE状态?

**MSL就是报文最大生存时间, 2MSL就是一个发送和一个回复所需的最大时间。 ** TCP 是面向连接的传输方式 , 必须保证数据能够正确到达目标机器,不能丢失或出错 ,而网络是不可靠的,有可能最后一个ACK丢失了,TIME_WAIT状态就是用来重发丢失的报文的。在Client发送出最后ACK确认包后,如果Server未收到,就会不断地重复发送FIIN数据包。Client会设置一个计时器,等待2MSL的时间,在该时间段内再次收到FIN包,那么Client会重发ACK并再次等待2MSL。 如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。

【问题7】 为什么不能用两次握手进行连接?

三次握手需要完成2个重要的功能,既要双方做好发送数据的准备工作(双发都知道彼此已准备好了),也要允许双方就初始序列号进行协商,这个seq需要在握手过程中发送和确认。

  1. 为了实现可靠的数据传输,TCP协议双方必须维护一个序列号,以标识发送出去的数据包中,哪些对方已经收到。如果只有两次握手,只有连接发起方的起始序列得到确认,另一方选择的序号并没有得到确认。
  2. 防止已经失效的连接请求报文段突然又传送到TCP服务器,服务器进行响应认为建立连接,客户端不理睬,这样就会浪费TCP服务器所在主机的很多资源。

有争议:如果改成2次握手连接可能会发生死锁。当C给S发送一个SYN包,S收到并发送确认应答包。如果只有2次,此时S认为连接已经建立就开始发送数据,但这个确认应答包如果在传输过程中丢失了,C没有收到便无法知道S是否已经准备好,不知道S建立怎样的序列号甚至怀疑S释放收到自己的连接请求。在这种情况下,C认为连接未成功,将忽略S发来的任何数据包,只等待确认应答包,而S在发出数据包超时后,重复发出同样的分组,这就形成了死锁。

【问题8】如果已经建立了连接,但是Client突然出现故障了怎么办?

TCP设有保活计时器,如果客户端出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2个小时,若两个小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没有响应,服务器就认为客户端出了故障,接着就关闭连接。

【问题9】:TCP建立连接,具体网络层操作(socket编程)?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4y8q4kbw-1591780349964)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1581334674922.png)]

应用层

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6efNJdQT-1591780349965)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1587809622358.png)]

DHCP(动态主机配置)
  • 常用于给主机动态配置IP地址,它提供了即插即用连网的机制,允许一台计算机加入新网络时自动获取IP地址等网络配置信息而不用手动配置
  • 实现过程:
  • 需要IP地址的主机广播发送发现报文,该报文只有DHCP服务器才能回答。DHCP服务器在自己的数据库中查找该计算机的配置信息,若有则返回找到的信息,若无则从IP地址池中取一个地址分配给该计算机。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IZzSUzku-1591780349966)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1585991898808.png)]

  • DHCP报文在运输层使用UDP协议封装
    1. 客户端口号68,服务器端口号67
  • DHCP客户在为获取IP地址时使用地址0.0.0.0
  • 每个网络中至少设置一个DHCP中继代理,配置DHCP服务器的IP地址信息,作为各网络中计算机与DHCP服务器的桥梁。主机广播寻找DHCP中继代理,DHCP中继代理单播DHCP服务器
DNS协议(域名系统)
概念:

ARP协议将IP地址转换成MAC地址,DNS协议将域名转换为IP地址。

IP地址是面向主机的,而域名是面向用户的。

DNS协议基于UDP实现,服务器的端口号为53.

域名层次结构的命名树:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u2GH5udt-1591780349966)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1581319080132.png)]

域名解析过程

先找本地是否缓存,没有的话就找DNS服务器

  1. 浏览器缓存
  2. 操作系统缓存,找本机的hosts文件
  3. 路由器缓存
  4. DNS服务器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0zDbeZJa-1591780349967)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1581319711936.png)]

第一大步骤:本机向本地域名服务器发出一个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解析过程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v2VLiGTe-1591780349968)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1585993933925.png)]

FTP(文件传送协议)

FTP提供交互式访问,而简单文件传送TFTP只支持文件传输

FTP:允许客户指明文件的类型与格式,允许文件具有存取权限

基于TCP的FTP和基于UDP的IFTP都是属于复制整个文件的文件共享协议

基于TCP的FTP 使用客户服务器方式。一个 FTP 服务器进程可同时为多个客户进程提供服务。FTP 的服务器进程由两大部分组成:一个主进程,负责接受新的请求;另外有若干个从属进程,负责处理单个请求。

用途:

  1. 计算机之间批量传输文件
  2. 网站设计者将构成网站内容的大量文件批量上传到他们的Web服务器。

FTP客户和服务器之间要建立“控制连接”和“数据连接”着两个并行的TCP连接。

控制连接在整个会话期间一直保持打开,用于传送FTP相关控制命令。

数据连接用于文件传输,在每次文件传输时才建立,传输结束就关闭。

默认情况下,FTP使用TCP 21端口进行控制连接,TCP 20端口进行数据连接。

是否使用TCP 20端口建立数据连接与传输模式有关,主动方式使用TCP 20端口,被动方式由服务器和客户端自行协商决定。

工作步骤:

  1. 打开端口号21(控制端口),使客户进程能够连接上
  2. 等待客户进程发连接请求
  3. 启动从属进程来处理客户进程发来的请求。主进程与从属进程并发执行从属进程对客户进程的请求处理完毕后即终止
  4. 回到等待状态,继续接受其他客户进程的请求
HTTP协议
【问题1】:什么是HTTP协议?

HTTP协议<超文本传输协议>,用于从WWW服务器传输超文本到本地浏览器的传输协议。HTTP协议是一个应用层面向对事务的协议,基于TCP/IP通信协议来传递输数据,默认端口80,由请求和响应构成,是客户端和服务器之间数据传输的格式规范。

【问题2】:HTTP的主要特点?
  1. 支持客户端/服务器模型

  2. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快

  3. 灵活:HTTP允许传输任意类型的数据对象

  4. 无连接:限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户应答后,即断开连接,采用这样的方式节约传输时间。

  5. 无状态:协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。 即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。

    坏处:如果后续的处理需要用到之前的信息,则必须要重传,这样就导致了每次连接传输的数据量增大.

    好处:如果后续的连接不需要之前提供的信息,响应就会比较快.

    为了解决HTTP的无状态特性,出现了CookieSession技术.

【问题3】:Cookies和Session

cookie是一种发送到客户浏览器的文本串句柄,并保存在客户机硬盘上,可以用来在WEB站点会话间持久的保持数据。 关闭浏览器窗口,cookie就消失 。

Session是访问者从到达某个特定主页离开为止的那段时间。Session其实是利用了Cookie进行信息处理, 重启浏览器后再次访问原有的连接依然会创建一个新的session,

如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份

区别

  1. Cookie运行在客户端,Session运行在服务端
  2. Cookie有大小限制以及浏览器存Cookie的个数也有限制,Session没有大小限制和服务器的内存大小有关
  3. Cookie有安全隐患,通过拦截或本地文件可以伪造Cookie进行攻击
  4. Session是保存在服务器端上会存在一段时间才会消失,session过多会增加服务器的压力。
【问题4】:HTTP请求和响应格式?

请求报文

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QWJIbrHI-1591780349969)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1581323615700.png)]

  1. 请求行:用于描述客户端的请求方式、请求资源名称以及使用的HTTP协议版本号
  2. 请求头部:描述客户端请求哪部主机以及客户端的一些环境信息
  3. 请求数据

常见的请求头部

  1. Host:用于指定请求资源的主机名和端口号(默认80)

    Host: www.baidu.com
    
  2. 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
    
  3. Referer:代表当前访问的URL的上一个URL,也就是用户从什么地方转到本页面的。 比如说html中有图片需要显示,请求图片是就会加上该html所在的url。

    Referer: https://www.baidu.com/
    
  4. 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
    
  5. Range: 请求实体内容的一部分,多线程下载一定会用到该请求头。

  6. Accept: 客户端接受什么类型的信息。类型用MIME表示。

响应报文

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9O5Pl3RD-1591780349971)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1581324282339.png)]

  1. 状态行:HTTP的版本、状态码、状态码描述
  2. 响应头部:用于描述服务器的基本信息以及数据的描述
  3. 响应正文:服务器向客户端回送的数据

常见的响应头部

  1. Server: 服务器所使用的Web服务器名称。攻击者可以通过查看该头信息,来探测Web服务器名称。所以一般服务器端会对该头信息进行修改。

    Server: Apache/2.4.6 (CentOS)
    
  2. Set-Cookie::向客户端设置Cookie。与Cookie请求头相互对应。Set-Cookie头是服务器向客户端设置Cookie,Cookie头是客户端向服务器传客户端已经保存的Cookie信息。

    向客户端设置Cookie。与Cookie请求头相互对应。Set-Cookie头是服务器向客户端设置Cookie,Cookie头是客户端向服务器传客户端已经保存的Cookie信息。
    
  3. Location: 服务器通过该头信息告诉浏览器去访问那个页面,浏览器接收到这样的响应信息后,通常会立刻访问Location头所指向的页面。这个头通常配合302重定向状态码使用。

  4. Refresh:服务器通过Refresh头信息让浏览器定时刷新。

    Refresh: 3;url="http://www.baidu.com"
    
[问题5]:HTTP协议中有哪些请求方式?

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非常少见

【问题6】:GET、POST区别?

两者的底层都是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(返回数据)。

【问题7】:常见的HTTP状态码?

http状态返回代码 1xx(临时响应):表示临时响应并需要请求者继续执行操作的状态代码。

http状态返回代码 2xx (成功):表示成功处理了请求的状态代码。

http状态返回代码 3xx (重定向):表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。

http状态返回代码 4xx(请求错误):这些状态代码表示请求可能出错,妨碍了服务器的处理。

http状态返回代码 5xx(服务器错误):这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。

状态码含义
200请求已成功,响应头和数据将随响应返回
202服务器接收请求,但尚未处理
204请求受理但无资源返回
301永久重定位,请求网页已永久移动到新位置
302临时重定位,请求的资源现在临时从不同的URI中获得
307临时重定位,但强制要求POST方法
400请求报文语法有误,服务器无法识别
401请求需要认证
403请求的对应资源禁止被访问
404请求失败,服务器无法找到对应资源
500服务器内部错误
503服务器正忙
【问题8】:HTTP协议实现原理机制?(浏览器出入URL按回车经历了什么?)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5V1jCJy9-1591780349972)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1581331809285.png)]

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 请求与响应报文,

【问题9】:HTTPS建立连接
  1. 客户端发出HTTPS请求
  2. 服务器收到请求后,将网站的证书(含公钥)发送给客户端
  3. 客户端解析证书,利用证书生成一个随机值使用公钥加密发送给服务器
  4. 服务器用私钥解密出会话密钥
  5. 服务器利用会话密钥加密数据与客户端之间的通信。
【问题10】:HTTP和HTTPS的区别?

HTTP协议传输数据未加密,HTTPS协议由SSL(Secure Sockets Layer)和HTTP协议构建的可进行加密传输、身份认证的网络协议,要比HTTP更加安全。

  1. HTTPS协议需要CA证书,一般免费的证书较少,因而需要一定费用。
  2. HTTPS协议加密传输,HTTP协议明文传输
  3. 默认端口不同,HTTPS的为443,HTTP的是80
  4. HTTP的连接比较简单,是无状态的,HTTPS由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,更安全

HTTPS优点

  • HTTPS传输数据过程中使用密钥进行加密,所以安全性更高
  • HTTPS协议可以认证用户和服务器,确保数据发送到正确的用户和服务器

HTTPS缺点

  • HTTPS握手阶段延时较高:由于在进行HTTP会话之前还需要进行SSL握手,因此HTTPS协议握手阶段延时增加

  • HTTPS部署成本高:一方面HTTPS协议需要使用证书来验证自身的安全性,所以需要购买CA证书;另一方面由于采用HTTPS协议需要进行加解密的计算,占用CPU资源较多,需要的服务器配置或数目高

SMTP(简单邮局传送协议)、POP3(邮局协议)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oa3afgUw-1591780349973)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1585015358343.png)]

为解决SMTP传送非ASCII码文本的问题,提出了多用途因特网邮件扩展MIME

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2LHt9Ba8-1591780349973)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1586010862958.png)]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值