网络协议梳理

1 引言

在计算机网络中要做到有条不紊地交换数据,就必须遵守一些事先约定好的规则。这些规则明确规定了所交换的数据的格式以及有关的同步问题。这里所说的同步不是狭义的(即同频或同频同相)而是广义的,即在一定的条件下应当发生什么事情(例如,应当发送一个应答信息),因而同步含有时序的意思。这些为进行网络中的数据交换而建立的规则、标准或约定称为网络协议(network protocol)。网络协议也可简称为协议。更进一步的讲,网络协议主要由以下三个要素组成:

  1. 语法,即数据与控制信息的结构或格式;
  2. 语义,即需要发出何种控制信息,完成何种动作以及做出何种响应;
  3. 同步,即事件实现顺序的详细说明。

由此可见,网络协议是计算机网络不可缺少的部分。实际上,只要我们想让连接在网络上的另一台计算机做点儿什么事情(例如,从网络上的某台主机下载文件),我们都需要有协议。

协议通常有两种不同的形式。一种是使用便于人来阅读和理解的文字描述,另一种是使用让计算机能够理解的程序代码。这两种不同形式的协议都必须能够对网络上的信息交换过程做出精确的解释。

常见的计算机网络体系结构主要有:OSI的七层协议、TCP\IP的四层协议和五层协议,本文主要讲述应用最为广泛的TCP/IP协议。

2 IP协议

IP 协议是把上层数据报封装成 IP 数据报后进行传输,如果 IP 数据报太大,还要对数据报进行分片后再传输,到了目的地址处再进行组装还原,以适应不同物理网络对一次所能传输数据大小的要求。

2.1 IP协议的特点

  1. IP协议是一种无连接、不可靠的分组传送服务的协议;
  2. IP协议是点-点线路的网络层通信协议。IP协议是针对原主机-路由器、路由器-路由器、路由器-目的主机之间的数据传输的点-点线路网络层通信协议;
  3. IP协议屏蔽了网络在数据链路层、物理层协议与实际技术上的差异。通过IP协议,网络层向传输层提供的是统一的IP分组,传输层不需要考虑互联网在数据链路层、物理层协议与实现技术上的差异,IP协议使得异构网络的互联变得容易了

2.2 为什么要使用IPv6?

目前,主流IP是基于IPv4的,但IPV4网络难以实现网络实名制,一个重要原因就是因为IP资源的共用,因为IP资源不够(IPV4为32位),所以不同的人在不同的时间段共用一个IP,IP和上网用户无法实现一一对应。而IPv6(128位,足够长)的普及将改变现状,因为IPv6一个重要的应用将是实现网络实名制下的互联网身份证/VIeID。

IPv6地址表示方法:

  1. 冒分十六进制表示法;
  2. 0位压缩表示法;
  3. 内嵌IPv4地址表示法。

2.3 IP数据包的格式

数据报格式如下:首部的长度是以32位(4个字节)为单位,长度可以是20-60字节,这跟首部长度字段有关。

一个IP数据报由首部和数据两部分组成。首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。

3 TCP/UDP

在TCP/IP体系结构的传输层两个重要协议是TCP、UDP。

3.1 TCP

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的, 基于IP的传输层协议。TCP在IP报文的协议号是6。TCP是一个超级麻烦的协议,而它又是互联网的基础。

3.1.1 TCP报文格式


如上图所示,TCP数据格式是由若干具有特殊含义字段组成的。

Source Port和Destination Port :分别占用16位,表示源端口号和目的端口号;用于区别主机中的不同进程, 而IP地址是用来区分不同的主机的,源端口号和目的端口号配合上IP首部中的源IP地址和目的IP地址就能唯一 的确定一个TCP连接;
Sequence Number :用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据 字节在数据流中的序号;主要用来解决网络报乱序的问题;
Acknowledgment Number :32位确认序列号包含发送确认的一端所期望收到的下一个序号,因此,确认序号应 当是上次已成功收到数据字节序号加1。不过,只有当标志位中的ACK标志(下面介绍)为1时该确认序列号的字 段才有效。主要用来解决不丢包的问题;
Offset :给出首部中32 bit字的数目,需要这个值是因为任选字段的长度是可变的。这个字段占4bit(最多能 表示15个32bit的的字,即4*15=60个字节的首部长度),因此TCP最多有60字节的首部。然而,没有任选字段, 正常的长度是20字节;
TCP Flags :TCP首部中有6个标志比特,它们中的多个可同时被设置为1,主要是用于操控TCP的状态机的,依次 为URG,ACK,PSH,RST,SYN,FIN。
URG :此标志表示TCP包的紧急指针域(后面马上就要说到)有效,用来保证TCP连接不被中断,并且督促 中间层设备要尽快处理这些数据;
ACK :此标志表示应答域有效,就是说前面所说的TCP应答号将会包含在TCP数据包中;有两个取值:0和1, 为1的时候表示应答域有效,反之为0;
PSH :这个标志位表示Push操作。所谓Push操作就是指在数据包到达接收端以后,立即传送给应用程序, 而不是在缓冲区中排队;
RST :这个标志表示连接复位请求。用来复位那些产生错误的连接,也被用来拒绝错误和非法的数据包;
SYN :表示同步序号,用来建立连接。SYN标志位和ACK标志位搭配使用,当连接请求的时候,SYN=1, ACK=0;连接被响应的时候,SYN=1,ACK=1;这个标志的数据包经常被用来进行端口扫描。扫描者发送 一个只有SYN的数据包,如果对方主机响应了一个数据包回来 ,就表明这台主机存在这个端口;但是由于这 种扫描方式只是进行TCP三次握手的第一次握手,因此这种扫描的成功表示被扫描的机器不很安全,一台安全 的主机将会强制要求一个连接严格的进行TCP的三次握手;
Window:窗口大小,也就是有名的滑动窗口,用来进行流量控制。这是一个复杂的问题,本文不再论述。

3.1.2 TCP协议的三次握手

TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP 协议提供可靠的连接服务,连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP窗口大小信息。如下图TCP的通信过程所示:

三次握手具体过程(状态)如下(其实可以类比打电话的过程:甲打电话,并等待接听→乙收到来电显示,"并表示可以接听"→"甲收到乙可以接听的信息",甲接听电话。注:引号部分是打电话过程中没有的,但在TCP三次握手中存在):

第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认。(客户的建立连接并等待确认)

第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态。(服务器端发送相关报文段信息并等待连接)

第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。(客户的接收到服务端信息并实现连接)

然后,客户端和服务端就能实现正常的数据传输啦!

3.2 UDP

UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17。

3.2.1 UDP报文格式

与TCP协议不同,UDP协议是非面向连接的不可靠协议,因此没有了SYN等处理两端等待或连接的报文段,相比之下,UDP的报文格式更为简单,主要由报文头(由均16位的源端口号、目的端口号、UDP长度和UDP校验和组成)和具体传输数据组成。如图所示:

UDP长度 :UDP报文的整个大小,最小为8个字节(16*4位)(仅为首部)。
UDP检验和:在进行检验和计算时,会添加一个伪首部一起进行运算。伪首部(占用12个字节)为:4个字节的源IP地址、4个字节的目的IP地址、1个字节的0、一个字节的数字17、以及占用2个字节UDP长度。这个伪首部不是报文的真正首部,只是引入为了计算校验和。相对于IP协议的只计算首部,UDP检验和会把首部和数据一起进行校验。接收端进行的校验和与UDP报文中的校验和相与,如果无差错应该全为1。如果有误,则将报文丢弃或者发给应用层、并附上差错警告。

3.2.2 UDP特性

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

3.3 TCP与UDP的区别

TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议,它们之间的区别包括:

  • TCP是面向连接的,UDP是无连接的;
  • TCP是可靠的,UDP是不可靠的;
  • TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多的通信模式;
  • TCP是面向字节流的,UDP是面向报文的;
  • TCP有拥塞控制机制;UDP没有拥塞控制,适合媒体通信;
  • TCP首部开销(20个字节)比UDP的首部开销(8个字节)要大;

3 HTTP/HTTPS

HTTP/HTTPS是运行在TCP协议上的协议。HTTP(Hypertext Transfer Protocol,超文本传输协议)主要用于普通浏览,HTTPS(HTTP over SSL,安全超文本传输协议)是HTTP协议的安全版本。

3.1 HTTP

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的万维网WWW(World Wide Web)文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。

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服务器根据接收到的请求后,向客户端发送响应信息。

3.1.1 HTTP特点

HTTP是一个客户端和服务器端请求和应答的标准,通常,由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行。HTTP使用TCP而不是UDP的原因在于(打开)一个网页必须传送很多数据,而TCP协议提供传输控制,按顺序组织数据,和错误纠正。

通过HTTP或者HTTPS协议(HTTP协议+SSL协议)请求的资源由统一资源标示符(Uniform Resource Identifiers)来标识。HTTP有以下特点:

  • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
  • 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
  • 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  • 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
  • 支持B/S及C/S模式

3.1.2 HTTP请求之request

客户端通过HTTP协议进行请求时遵循一定的格式,请看下面的请求报文格式(由请求行、请求头、空行、请求体组成):

而各部分组成如下所示:

3.1.3 Http响应之response

在客户端发送请求后服务端进行响应,将信息发送给客户端,以实现功能服务,报文格式如下(包含状态行、响应头、空行、消息体):

响应组成此处也不再赘述,值得注意的是状态码,它以清晰明确的数字告诉客户端本次请求的处理结果。 常见的状态码有:



3.2 HTTPS

HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

3.2.1 HTTPS的作用

  • 内容加密建立一个信息安全通道,来保证数据传输的安全;
  • 身份认证确认网站的真实性
  • 数据完整性防止内容被第三方冒充或者篡改

3.2.2 HTTPS的劣势

对数据进行加解密决定了它比http慢

需要进行非对称的加解密,且需要三次握手。首次连接比较慢点,当然现在也有很多的优化。

出于安全考虑,浏览器不会在本地保存HTTPS缓存。实际上,只要在HTTP头中使用特定命令,HTTPS是可以缓存的。Firefox默认只在内存中缓存HTTPS。但是,只要头命令中有Cache-Control: Public,缓存就会被写到硬盘上。 IE只要http头允许就可以缓存https内容,缓存策略与是否使用HTTPS协议无关。

3.2.3 HTTPS和HTTP的区别

  • HTTPS协议需要到CA申请证书。
  • HTTP是超文本传输协议,信息是明文传输;HTTPS则是具有安全性的ssl加密传输协议。
  • HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  • HTTP的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。

下面就是HTTPS的整个架构,现在的HTTPS基本都使用TLS了,会更加安全。

4 FTP

FTP 是File Transfer Protocol(文件传输协议)。用于ftp客户端和ftp服务器之间进行文本、文件传输的协议。与http的短连接不同,FTP协议是一种基于socket的长连接。

4.1 FTP协议的原理

FTP协议实际上是工作在TCP/IP协议族的应用层,其传输层协议是TCP协议。可以知道,他的文件传输是可靠的。

FTP的工作流程大致分为四步:

  1. 启动FTP。ftp的客户端启动一个socket连接到服务器。
  2. 建立控制连接。客户端和服务器通过三次握手过程(21端口),建立连接,用于传输ftp协议的命令。
  3. 建立数据连接。客户端和服务器建立数据连接(分为主动模式和被动模式),用户文件的传输。
  4. 关闭FTP。ftp客户端清空数据流,并且关闭Socket。

4.2 FTP工作详解

1、FTP协议的工作流程中为什么有控制连接和数据连接?

FTP协议的控制链接是用于客户端向服务器发送ftp的命令用的,只要不想关闭FTP客户端,就会一直保持该连接,用户之后的命令交互。而数据连接,则是区别于控制链接之外的,用户传输文件用的socket连接,当传输文件结束时,就关闭连接。

2、数据连接的主动模式和被动模式?

FTP的数据连接过程中的主动模式和被动模式,是相对于FTP服务器来说都。

主动模式 :FTP客户端在客户端建立一个socket,端口为B,并通过FTP控制连接的通道发送PORT命令,告诉FTP服务器:"客户端已经对B端口进行了监听";然后FTP服务器主动与FTP客户端的B端口建立连接。

被动模式 :FTP客户端通过FTP的控制连接的通道,发送PASV命令,告诉FTP服务器:"我要建立数据连接";然后FTP服务器会随机启动一个端口X的监听,并在返回信息中告诉FTP客户端:"可以与X端口建立连接";最后,FTP客户端主动与FTP服务器的X端口建立连接。

5 SMTP

SMTP称为简单邮件传输协议(Simple Mail Transfer Protocal),目标是向用户提供高效、可靠的邮件传输。它的一个重要特点是它能够在传送中接力传送邮件,即邮件可以通过不同网络上的主机接力式传送。通常它工作在两种情况下:一是邮件从客户机传输到服务器;二是从某一个服务器传输到另一个服务器。SMTP是一个请求/响应协议,它监听25号端口,用于接收用户的Mail请求,并与远端Mail服务器建立SMTP连接。

5.1 工作机制

SMTP通常有两种工作模式。发送SMTP和接收SMTP。具体工作方式为:发送SMTP在接收到用户的邮件请求后,判断此邮件是否为本地邮件,若是直接投送到用户的邮箱,否则向DNS查询远端邮件服务器的MX记录,并建立与远端接收SMTP之间的一个双向传送通道,此后SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方向传送。一旦传送通道建立,SMTP发送者发送MAIL命令指明邮件发送者。如果SMTP接收者可以接收邮件则返回OK应答。SMTP发送者再发出RCPT命令确认邮件是否接收到。如果SMTP接收者接收,则返回OK应答;如果不能接收到,则发出拒绝接收应答(但不中止整个邮件操作),双方将如此反复多次。当接收者收到全部邮件后会接收到特别的序列,如果接收者成功处理了邮件,则返回OK应答。

5.2 连接和发送过程

  1. 建立TCP连接
  2. 客户端发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令; 服务器端正希望以OK作为响应,表明准备接收
  3. 客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行;服务器端则表示是否愿意为收件人接收邮件
  4. 协商结束,发送邮件,用命令DATA发送
  5. 以.表示结束输入内容一起发送出去
  6. 结束此次发送,用QUIT命令退出

最后附上常见的网络协议图解


返回面试宝典

相关推荐
麻瓜也要学魔法2 小时前
链路状态路由协议-OSPF
网络
Estar.Lee2 小时前
查手机号归属地免费API接口教程
android·网络·后端·网络协议·tcp/ip·oneapi
傻啦嘿哟3 小时前
代理IP在后端开发中的应用与后端工程师的角色
网络·网络协议·tcp/ip
Red Red3 小时前
网安基础知识|IDS入侵检测系统|IPS入侵防御系统|堡垒机|VPN|EDR|CC防御|云安全-VDC/VPC|安全服务
网络·笔记·学习·安全·web安全
向阳12184 小时前
Dubbo HTTP接入之triple协议
网络协议·http·dubbo
亚远景aspice5 小时前
ISO 21434标准:汽车网络安全管理的利与弊
网络·web安全·汽车
Estar.Lee6 小时前
时间操作[计算时间差]免费API接口教程
android·网络·后端·网络协议·tcp/ip
友友马6 小时前
『 Linux 』网络层 - IP协议(一)
linux·网络·tcp/ip
码老白7 小时前
【老白学 Java】Warshipv2.0(二)
java·网络