概述
先从知乎盗个图:怎么开始学习网络协议? - 知乎
1、应用层
作用:定义数据格式并按照对应的格式解读数据。
2、传输层
作用:定义端口,标识应用程序身份,实现端口到端口的通信。
3、网络层
作用:定义网络地址、区分网段、子网内MAC寻址、对于不同子网的数据包进行路由。
4、链路层
作用:对电信号进行分组并形成数据帧,并以广播的形式通过物理介质发送给接收方(使用mac地址)。
IP协议
IP指网际互连协议,Internet Protocol的缩写,是TCP/IP体系中的网络层协议。 根据端到端的设计原则,IP只为主机提供一种无状态、无连接、不可靠的、尽力而为的数据包传输服务。
图片来源:IP协议详解_余识-的博客-CSDN博客_ip协议
IP模块收到来自数据链路层的IP数据报,首先对数据报的头部做CRC校验,无误后开始分析头部具体信息。
如果IP数据报头部设置了源站选路选项,则IP模块调用数据报转发子模块来处理该数据报。
(严格源站路由选择:发送端指明IP数据报所必须采用的确切路由,如果一个路由器发现源路由所指定的下一个路由器不再其直接连接的网络上,那么它就会返回一个“源站路由失败”的ICMP差错报文。严格源站路由的变态之处,哪怕路由器上没有到达目的地的路由也可以通,因为严格源站路由提供了下一跳地址。
宽松的源站路由:发送端指明了一个数据报经过的IP地址清单,但是数据报子啊清单上指明的任意两个地址之间可以通过其他路由器。)
如果该数据报的头部目标IP地址是本机的某个IP地址,或者广播地址,则IP模块根据数据报协议字段来决定发送给哪个上层应用。如果不是本机,则掉用数据报转发子模块来处理该数据报。
数据报转发模块检查系统是否允许转发,不允许则丢弃。允许则将该数据报执行一些操作,就将它交给IP数据报输出模块。
IP数据报根据路由表计算下一跳路由。
IP输出队列存放所有等待发送的IP数据报。
IP分组的转发规则
路由器仅根据网络地址进行转发。当IP数据包经由路由器转发时,如果目标网络与本地路由器直接相连,则直接将数据包交付给目标主机,这称为直接交付;否则,路由器通过路由表查找路由信息,并将数据包转交给指明的下一跳路由器,这称为间接交付。路由器在间接交付中,若路由表中有到达目标网络的路由,则把数据包传送给路由表指明的下一跳路由器;如果没有路由,但路由表中有一个默认路由,则把数据包传送给指明的默认路由器;如果两者都没有,则丢弃数据包并报告错误。
IP分片
一个IP包从源主机传输到目标主机可能需要经过多个不同的物理网络。由于各种网络的数据帧都有一个最大传输单元(MTU)的限制,如以太网帧的MTU是1500;因此,当路由器在转发IP包时,如果数据包的大小超过了出口链路的最大传输单元时,则会将该IP分组分解成很多足够小的片段,以便能够在目标链路上进行传输。这些IP分片重新封装一个IP包独立传输,并在到达目标主机时才会被重组起来。
IP分组结构
一个IP分组由首部和数据两部分组成。首部的前20字节是所有IP分组必须具有的,也称固定首部。在首部固定部分的后面是一些可选字段,其长度是可变的。如果MF位是0,并且分段偏移为0,则表明这是一个完整的IP数据报。否则,如果分段偏移不为0,或者MF标志位为1,则表明它是一个分段。这时目的地端需要实行分段重组。
IP协议使用非连接式的传送方式。非连接式的传送方式是指IP信息包传送时,源设备与目的设备双方不必事先连接,即可将IP信息包送达。即源设备完全不用理会目的设备,而只是单纯地将IP信息包逐一送出。至于目的设备是否收到每个信息包、是否收到正确的信息包等,则由上层的协议(例如TCP)来负责检查。TCP就是使用连接式的传送方式。
- 4位版本号:指定IP协议的版本,对于IPv4来说,其值为4,其它IPv4扩展版本则具有不同的版本号(如SIP协议和PIP协议)
- 4位头部长度:表示IP头部有多少个32bit字(4字节)。因为4位最大15,所以IP头部最长为60字节。
- 8位服务类型:3位优先级权字段(现已被忽略),4位TOS字段和1位保留字段(必须置0).4位TOS字段分别表示:最小延迟,最大吞吐量、最高可靠性和最小费用,其中最多1个能置为1。
- 16位总长度:指整个IP数据包的长度,字节为单位。最长65535字节,由于长度超过MTU的数据报将被分片传输,所以实际传输的长度没有达到最大值。
- 16位标识:唯一标识主机发送的每个数据报。初始值由系统随机生成,每发送一个数据报,其值加一。该值在数据报分片时被复制到每个分片中,因此同一个数据报的所有分片标识值都相同
- 3位标志:第一位保留,第二位表示禁止分片,如果设置了该位,IP数据报长度超过MTU将被丢弃,返回错误。第三位表示更多分片,除了最后一个分片,其它都要置它为1.
- 13位分片偏移:该分片相较于原始IP数据报开始处(仅指数据部分)的偏移。实际偏移值是该值左移3位得到。因此除了最后一个分片,每个分片的数据部分长度必须是8的整数倍。
- 8位生存时间:数据报到达目的地之前允许经过的路由器跳数。每经过一个路由,该值减一,为0时被丢弃。并返回TCMP错误报文。
- 8位协议:用于区分上层协议。ICMP为1,TCP为6,UDP为17。
- 16位头部校验和:由发送端填充,接收端对其使用CRC算法检验数据是否被损坏。
- 32位源端IP地址:标识数据报的发送端。在传输过程中保持不变
- 32位源目的端IP地址:标识数据报的接收端。在传输过程中保持不变
- 选项字段:可变长的可选信息,最多40字节。可用的IP选项有:
- 记录路由:将数据包经由的所有路由器IP填入该段。
- 时间戳:将数据报在每个路由器被转发时的时间填入该段。
- 松散源路由选择:指定路由器IP地址列表,数据报发送过程中必须经过其中所有路由器
- 严格源路由选择:类似上面,数据报只能经过被指定的路由器。
单点传送
单点传送是一对一的传递模式。在此模式下,源端所发出的IP信息包,其IP报头中的目的地址代表单一目的设备,因此只有该目的设备能收到此IP信息包。在互联网上传送的信息包,绝大多数都是单点传送的IP信息包。
广播传送
广播传送是一对多的传递方式。在此方式下,源设备所发出的IP信息包,其IP报头中的目的地址代表某一网络,而非单一设备,因此该网络内的所有设备都能收到、并处理此类IP广播信息包。由于此特性,广播信息包必须小心使用,否则稍有不慎,便会波及该网络内的全部设备。
多点传送
多点传送是一种介于单点传送与广播传送之间的传送方式模式。多点传送也是属于一对多的传送方式,但是它与广播传送有很大的不同。广播传送必定会传送至某一个网络内的所有设备,但是多点传送却可以将信息包传送给一群指定的设备。即多点传送的IP信息包,其IP报头中的目的地址代表的是一群选定的设备。凡是属于这一群的设备都可收到此多点传送信息包。
回送地址
任何一个以数字127开头的IP地址(127.x.x.x)都叫做回送地址。它是一个保留地址,最常见的表示形式为127.0.0.1。在每个主机上对应于IP地址127.0.0.1有个接口,称为回送接口。IP协议规定,当任何程序用回送地址作为目的地址时,计算机上的协议软件不会把该数据报向网络上发送,而是把数据直接返回给本主机。因此网络号等于127的数据报文不能出现于任何网络上,主机和路由器不能为该地址广播任何寻径信息。回送地址的用途是,可以实现对本机网络协议的测试或实现本地进程间的通信。
TCP协议
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,
TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。
-
在数据正确性与合法性上,TCP用一个校验和函数来检验数据是否有错误,在发送和接收时都要计算校验和;同时可以使用md5认证对数据进行加密。
-
在保证可靠性上,采用超时重传和捎带确认机制。
-
在流量控制上,采用滑动窗口协议,协议中规定,对于窗口内未经确认的分组需要重传。
在拥塞控制上,采用广受好评的TCP拥塞控制算法(也称AIMD算法)。该算法主要包括四个主要部分:
(1)慢启动
每当建立一个TCP连接时或一个TCP连接发生超时重传后,该连接便进入慢启动阶段。进入慢启动后,TCP实体将拥塞窗口的大小初始化为一个报文段,即:cwnd=1。此后,每收到一个报文段的确认(ACK),cwnd值加1,即拥塞窗口按指数增加。当cwnd值超过慢启动阈值(ssthresh)或发生报文段丢失重传时,慢启动阶段结束。前者进入拥塞避免阶段,后者重新进入慢启动阶段。
(2)拥塞避免
在慢启阶段,当cwnd值超过慢启动阈值(ssthresh)后,慢启动过程结束,TCP连接进入拥塞避免阶段。在拥塞避免阶段,每一次发送的cwnd个报文段被完全确认后,才将cwnd值加1。在此阶段,cwnd值线性增加。
(3)快速重传
快速重传是对超时重传的改进。当源端收到对同一个报文的三个重复确认时,就确定一个报文段已经丢失,因此立刻重传丢失的报文段,而不必等到重传定时器(RTO)超时。以此减少不必要的等待时间。
(4)快速恢复
快速恢复是对丢失恢复机制的改进。在快速重传之后,不经过慢启动过程而直接进入拥塞避免阶段。每当快速重传后,置ssthresh=cwnd/2、cwnd=ssthresh+3。此后,每收到一个重复确认,将cwnd值加1,直至收到对丢失报文段和其后若干报文段的累积确认后,置cwnd=ssthresh,进入拥塞避免阶段。
-
客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。
-
服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。
-
客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。
DNS协议
域名系统(Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。DNS协议是用来将域名转换为IP地址(也可以将IP地址转换为相应的域名地址)。DNS是应用层协议,事实上他是为其他应用层协议工作的,包括不限于HTTP和SMTP以及FTP,用于将用户提供的主机名解析为IP地址。
DNS数据包不会被拦截,因此可以基于DNS协议建立隐蔽信道,从而顺利穿过防火墙,在客户端和服务器之间传输数据。
DNS 定义了两种报文 ,一种为查询报文;另一种是对查询报文的响应,称为响应报文。都有12个字节的头和查询问题。
“递归解析”是最常见也是默认的一种解析方式。在这种解析方式中,如果客户端配置的本地域名服务器(Local DNS服务器)不能解析的话,则后面的查询过程全部由本地域名服务器代替DNS客户端进行查询 。迭代查询则是指所有查询工作全部由客户端自己进行。
在以下条件之一满足时,就会采用迭代解析方式:
1.在查询本地域名服务器时,如果客户端的请求报文中没有申请使用递归查询,即在DNS请求报文中的RD字段没有设置为1。
2.客户端在DNS请求报文中申请使用递归查询,但所配置的本地域名服务器禁止使用递归查询,即在应答DNS报文头部的RA字段设置为0。
QR: 查询/应答标志位,0表这是一个查询报文,1表示应答报文
opcode: 定义查询/应答的类型,0表标准查询,1表反向查询(由IP地址获得主机域名),2表请求服务器状态
AA: 授权应答标志,仅被应答报文使用。1表示该DNS服务商是授权服务器
TC: 截断标志,仅被应答报文使用。因为UDP数据报是有长度限制的,过长的DNS报文将被截断。为1表DNS报文超过512字节并被截断
RD: 递归查询标志,1表执行递归查询:若目标DNS服务器无法解析某个主机名,则它将向其他DNS服务器继续查询,如此递归,直至获得结果并返回给客户端;0表示迭代查询:若目标DNS服务器无法解析某个主机名,则将它自己知道的其他DNS服务器的IP地址返回给客户端,让客户端决定是否继续往向其他DNS发送请求。
ZERO: 这3位未使用,须设置为0
rcode: 4位返回码,表应答状态。0表无错误,3表域名不存在
RA:允许递归标志,仅被应答报文使用。1表示DNS支持服务器递归查询
SMTP协议
SMTP是一种提供可靠且有效的电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。SMTP独立于特定的传输子系统,且只需要可靠有序的数据流信道支持,SMTP的重要特性之一是其能跨越网络传输邮件,即“SMTP邮件中继”。使用SMTP,可实现相同网络处理进程之间的邮件传输,也可通过中继器或网关实现某处理进程与其他网络之间的邮件传输。
SMTP是一组用于从源地址到目的地址传送邮件的规则,并且控制信件的中转方式。SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,我们就可以把E—mail寄到收信人的服务器上了,整个过程只需要几分钟。SMTP服务器是遵循SMTP协议的发送邮件服务器,用来发送或中转用户发出的电子邮件。
一个简单的SMTP交换过程,包括了连接建立、邮件传送和连接释放三个具体过程:首先建立TCP连接,SMTP调用TCP协议的25号端口监听连接请求,客户端发送HElO命令以标识发件人自己的身份,服务器做出响应。然后,客户端发送MAII)命令,服务器以OK作为Ⅱ向应,表明准备接收。客户端发送RCPT命令以标识电子邮件的收件人,可以有多个RCPT行,即一份邮件可以同时发送给多个收件人。服务器端则表示是否愿意为收件人接收邮件。协商结束后,客户端用DATA命令发送信息,以<CRLF>表示结束输入内容。最后,控制交互的任一端可选择终止会话,为此它发出一个QUIT命令,另一端用命令221响应,表示同意终止连接,双方将关闭连接。
SMTP交换过程中服务器端发出的“250 0K”含义是一切都好。与使用其他协议一样,程序只读缩写命令和每行开头的三个数字,其余文本是用于帮助用户调试邮件软件。在命令成功时,服务器返回代码250,如果失败则返回代码550(命令无法识别)、451(处理时出错)、452(存储空间不够)、421(服务器不可用)等,354则表示开始信息输入。
SMTP的局限性表现在只能发送ASCII码格式的报文,不支持中文、法文、德文等,它也不支持语音、视频的数据。通过MIME协议,对SMTP补充。MIME使用网络虚拟终端(NVT)标准,允许非ASCII码数据通过SMTP传输。
IMAP协议和POP协议
IMAP(Internet Message Access Protocol)以前称作交互邮件访问协议(Interactive Mail Access Protocol),是一个应用层协议。IMAP是斯坦福大学在1986年开发的一种邮件获取协议。它的主要作用是邮件客户端可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等。当前的权威定义是RFC3501。IMAP协议运行在TCP/IP协议之上,使用的端口是143。它与POP3协议的主要区别是用户可以不用把所有的邮件全部下载,可以通过客户端直接对服务器上的邮件进行操作。
POP是TCP/IP协议族中的一员,POP允许本地计算机上的用户代理程序连接到邮件服务器,将用户的邮件取回到本地,这样用户就能在本地阅读邮件了。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。
-
支持连接和断开两种操作模式。当使用POP3时,客户端只会在一段时间内连接到服务器,直到它下载完所有新信息,客户端即断开连接。在IMAP中,只要用户界面是活动的和下载信息内容是需要的,客户端就会一直连接服务器。对于有很多或者很大邮件的用户来说,使用IMAP4模式可以获得更快的响应时间。POP 协议支持“离线”邮件处理。邮件发送到服务器上,电子邮件客户端调用邮件客户机程序以连接服务器,并下载所有未阅读的电子邮件。这种离线访问模式是一种存储转发服务,将邮件从邮件服务器端送到个人终端机器上,一般是 PC 机或 MAC。一旦邮件发送到 PC 机或 MAC 上,邮件服务器上的邮件将会被删除。
-
支持多个客户同时连接到一个邮箱。POP3协议假定邮箱当前的连接是唯一的连接。相反,IMAP4协议允许多个用户同时访问邮箱同时提供一种机制让客户能够感知其他当前连接到这个邮箱的用户所做的操作。
-
支持访问消息中的MIME部分和部分获取。几乎所有的Internet邮件都是以MIME格式传输的。MIME允许消息包含一个树型结构,这个树型结构的叶子节点都是单一内容类型而非叶子节点都是多块类型的组合。IMAP4协议允许客户端获取任何独立的MIME部分和获取信息的一部分或者全部。这些机制使得用户无需下载附件就可以浏览消息内容或者在获取内容的同时浏览。
-
支持在服务器保留消息状态信息。通过使用在IMAP4协议中定义的标志客户端可以跟踪消息状态,例如邮件是否被读取,回复,或者删除。这些标识存储在服务器,所以多个客户在不同时间访问一个邮箱可以感知其他用户所做的操作。
-
支持在服务器上访问多个邮箱。IMAP4客户端可以在服务器上创建,重命名,或删除邮箱(通常以文件夹形式显现给用户)。支持多个邮箱还允许服务器提供对于共享和公共文件夹的访问。
-
支持服务器端搜索。IMAP4提供了一种机制给客户使客户可以要求服务器搜索匹配多个标准的信息。在这种机制下客户端就无需下载邮箱中所有信息来完成这些搜索。
-
支持一个定义良好的扩展机制。吸取早期Internet协议的经验,IMAP的扩展定义了一个明确的机制。很多对于原始协议的扩展已被提议并广泛使用。无论使用POP3还是IMAP4来获取消息,客户端均使用SMTP协议来发送消息。邮件客户端可能是POP客户端或者IMAP客户端,但都会使用SMTP。
IMAP4生来就支持加密注册机制,也支持明文传输密码。因为加密机制的使用需要客户端和服务器双方的一致,明文密码的使用是在一些客户端和服务器类型不同的情况下(例如Microsoft Windows客户端和非Windows服务器)。使用SSL也可以对IMAP4的通信进行加密,通过将在SSL上的IMAP4通信通过993端口传输或者在IMAP4线程创建的时候声明“STARTTLS”。
POP3 传输的是数据消息,这些消息可以是指令,也可以是应答。POP3 使用 TCP 作为传输协议,使用TCP的110号端口工作,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的(但是目前很多POP3服务器都支持“下载邮件,服务器并不删除邮件”)。
POP3客户向POP3服务器发送命令并等待响应,POP3命令采用命令行形式,用ASCII码表示。服务器响应是由一个单独的命令行组成或多个命令行组成,响应第一行以ASCII文本+OK或-ERR(OK指成功,-ERR指失败)指出相应的操作状态是成功还是失败。
POP3三种状态
认证状态,处理状态和更新状态。当客户机与服务器建立连接时,客户机向服务器发送自己身份(账户和密码)并由服务器成功确认,即客户端由认可状态转入处理状态,在完成列出未读邮件等相应的操作后客户端发出quit命令,退出处理状态进入更新状态,开始下载未阅读过的邮件到计算机本地之后最后重返认证状态确认身份后断开与服务器的连接。
命令 | 参数 | 状态 | 描述 |
---|---|---|---|
user | username | 认可 | 此命令与下面的pass命令若成功,将导致状态转换 |
pass | password | 认可 | |
apop | name,digest | 认可 | 一种安全传输口令的办法,执行成功导致状态转换。 |
stat | none | 处理 | 请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数 |
uidl | [msg#] | 处理 | 返回邮件的唯一标识符,pop3会话的每个标识符都将是唯一的 |
list | [msg#] | 处理 | 返回邮件数量和每个邮件的大小 |
retr | [msg#] | 处理 | 返回由参数标识的邮件的全部文本 |
dele | [msg#] | 处理 | 服务器将由参数标识的邮件标记为删除,由quit命令执行 |
rset | none | 处理 | 服务器将重置所有标记为删除的邮件,用于撤消dele命令 |
top | [msg#],n | 处理 | 服务器将返回由参数标识的邮件前n行内容,n必须是正整数 |
noop | none | 处理 | 服务器返回一个肯定的响应,不做任何操作。 |
quit | none | 更新 | 退出 |
使用APOP命令会在传输之前被加密.只有少数邮箱软件使用APOP命令(如qpopper)。初次与POP服务器连接时,服务器发送一个ASCII码问候(一串字符串,唯一的,与当前时间有关),客户端程序把纯文本口令添加到ASCII码问候字符串之后,然后计算出该字符串的MD5单出函数消息摘要,再将账号与MD5消息摘要作为APOP命令的参数一起发送给服务器。