前端基本网络协议知识整合

一、ICMP协议

 ICMP协议(Internet Control Message Protocol)的全称是“Internet控制消息协议”,它是IPv4协议族中的一个子协议,用于IP主机、路由器之间传递控制消息。控制消息是在网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然不传输用户数据,但是对于用户数据的传递起着重要的作用。 
ICMP协议与ARP协议不同,ICMP靠IP协议来完成任务,所以ICMP报文中要封装IP头部。它与传输层协议(如TCP和UDP)的目的不同,一般不用来在端系统之间传送数据,不被用户网络程序直接使用,除了像Ping和Tracert这样的诊断程序。

Ping方式测试是否能够连通目标主机的响应成功结果如图所示:

二、ARP协议

 ARP(Address Resolution Protocol,地位解析协议)的基本功能是负责将一个已知的IP地址解析成MAC地址,以便在交换机上通过MAC地址进行通信。

例如:

1、PC1发送数据给PC2,需要先知道PC2的IP地址所对应的MAC地址是什么,这时就需要ARP请求广播实现

2、主机PC1想发送数据给主机PC2,它检查自己的ARP缓存表。ARP缓存表是主机存储在内存中的一个IP地址和MAC地址—对应的表,经查看PC1的ARP缓存表中没有PC2的MAC地址

3、这时,PC1会初始化ARP请求过程(发送一个ARP请求广播),用于发现目的地的MAC地址,ARP请求是目的地址为MAC广播地址(FF-FF-FF-FF-FF-FF)的广播帧,从而保证所有的设备都能收到该请求

4、主机接收到数据帧后,进行IP地址的比较,如果目标IP地址与自己的IP地址不同,则会丢弃这个数据包,只有PC2这台主机会在自己的ARP表中缓存PC1的IP地址和MAC地址的对应关系,同时发送一个ARP应答,来告诉PC1自己的MAC地址(这个数据帧是单播)

5、PC1在接收到这个回应的数据帧后,在自己的ARP表中添加PC2的IP地址和MAC地址的对应关系,之后PC1就可以发送数据给PC2了

三、TCP协议

TCP把连接作为最基本的对象,每一条TCP连接都有两个端点,这种断点我们叫作套接字(socket),它的定义为端口号拼接到IP地址即构成了套接字,例如,若IP地址为192.3.4.16 而端口号为80,那么得到的套接字为192.3.4.16:80。

 TCP 协议为了更容易传送大数据把数据进行分割, 而且 TCP 协议能够确认数据最终是否送达到对方。所以,TCP连接相当于两根管道(一个用于服务器到客户端,一个用于客户端到服务器),管道里面数据传输是通过字节码传输,传输是有序的,每个字节都是一个一个来传输。

1.三次握手:握手过程中使用了 TCP 的标志(flag) —— SYN(synchronize) 和ACK(acknowledgement) 。

  • 第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。
  • 第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。
  • 第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,完成三次握手。

 

 若在握手过程中某个阶段莫名中断, TCP 协议会再次以相同的顺序发送相同的数据包。

2.四次挥手:由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。先进行关闭的一方将执行主动关闭,而另一方被动关闭。

  • 客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。
  • 服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。
  • 服务器B关闭与客户端A的连接,发送一个FIN给客户端A。
  • 客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。

 

 三次握手和四次挥手:在TCP连接中,服务器端的SYN和ACK向客户端发送是一次性发送的,而在断开连接的过程中, B端向A
端发送的ACK和FIN是分两次发送的。因为在B端接收到A端的FIN后, B端可能还有数据要传输,所以先发送ACK,等B端处理完自己的事情后就可以发送FIN断开连接了。

3.TCP连接的深入理解:由于TCP是全双工的,因此在每一个方向都必须单独关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意味着这个方向上没有数据流动,一个TCP连接在接收到一个FIN后仍能发送数据。 首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
TCP协议的连接是全双工连接,一个TCP连接存在双向的读写通道。简单来说,是“先关读,再关写” ,总共需要4个阶段。以客户机发起关闭连接为例:1.服务器读通道关闭;2.客户端写通道关闭;3.客户端读通道关闭;4.服务器写通道关闭。
关闭行为是在发起方数据发送完毕之后,给对方发出一个FIN(finish)数据段,直到接收到对方发送的FIN,且对方收到了接收确认的ACK之后,双方的数据通信完全结束,过程中每次都需要返回确认数据段ACK。

四、UDP协议

 (1) UDP是一个非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。
(2) 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。
(3) UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。
(4) 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。
(5)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数)。
(6)UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。
我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。

TCP与UDP的区别:

1.基于连接与无连接;
2.对系统资源的要求(TCP较多,UDP少);
3.UDP程序结构较简单;
4.流模式与数据报模式 ;
5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。

五、DNS协议

 如果说ARP协议是用来将IP地址转换为MAC地址,那么DNS协议则是用来将域名转换为IP地址(也可以将IP地址转换为相应的域名地址)。DNS 是一个应用层协议,域名系统 (DNS) 的作用是将人类可读的域名 (如,www.example.com) 转换为机器可读的 IP 地址 (如,192.0.2.44)。DNS 协议建立在 UDP 或 TCP 协议之上,默认使用 53 号端口。客户端默认通过 UDP 协议进行通讯,但是由于广域网中不适合传输过大的 UDP 数据包,因此规定当报文长度超过了 512 字节时,应转换为使用 TCP 协议进行数据传输。

IP地址是面向主机的,而域名则是面向用户的。
域名和IP的对应关系保存在一个叫hosts文件中。
最初,通过互联网信息中心来管理这个文件,如果有一个新的计算机想接入网络,或者某个计算IP变更都需要到信息中心申请变更hosts文件。其他计算机也需要定期更新,才能上网。
但是这样太麻烦了,就出现了DNS系统。 

DNS系统:

  1. 一个组织的系统管理机构, 维护系统内的每个主机的IP和主机名的对应关系
  2. 如果新计算机接入网络,将这个信息注册到数据库中
  3. 用户输入域名的时候,会自动查询DNS服务器,由DNS服务器检索数据库,得到对应的IP地址

DNS域名层级结构如下:

 

六、HTTP协议

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。

HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

HTTP请求GET请求与POST请求的区别:

1.url可见性:
     get,参数url可见
     post,url参数不可见

2.传输数据的大小:
    get一般传输数据大小不超过2k-4k
    post请求传输数据量更大

3.数据传输上:
    get通过拼接url进行传递参数
    post通过body体传输参数

4.后退页面的反应:
    get请求页面后退时,不产生影响
    post请求页面后退时,会重新提交请求

5.缓存性:
    get请求是可以缓存的
    post请求不可以缓存

6.安全性:
    都不安全(因为HTTP均为明文传输),原则上post肯定要比get安全,毕竟传输参数时url不可见

7.GET请求只能进行url编码,而POST支持多种编码方式

8.GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留

 HTTP状态码

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:

1xx:指示信息--表示请求已接收,继续处理

2xx:成功--表示请求已被成功接收、理解、接受

3xx:重定向--要完成请求必须进行更进一步的操作

4xx:客户端错误--请求有语法错误或请求无法实现

5xx:服务器端错误--服务器未能实现合法的请求

常见状态码包括:

    1.  
      200 OK //客户端请求成功
    2.  
      400 Bad Request //客户端请求有语法错误,不能被服务器所理解
    3.  
      401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
    4.  
      403 Forbidden //服务器收到请求,但是拒绝提供服务
    5.  
      404 Not Found //请求资源不存在,eg:输入了错误的URL
    6.  
      500 Internal Server Error //服务器发生不可预期的错误
    7.  
      503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
原文地址:https://www.cnblogs.com/plBlog/p/14336099.html