TCP即传输控制协议,是一种面向连接、可靠的数据传输协议,它是为了在不可靠的互联网上提供可靠的端到端字节流而专门设计的一个传输协议。
面向连接:数据传输之前客户端和服务器端必须建立连接
可靠的:数据传输是有序的 要对数据进行校验
TCP三次握手
为了保证客户端和服务器端的可靠连接,TCP建立连接时必须要进行三次会话,也叫TCP三次握手,进行三次握手的目的是为了确认双方的接收能力和发送能力是否正常。
第一次握手:
客户端将TCP报文标志位SYN置为1,随机产生一个序号值seq=J,保存在TCP首部的序列号(Sequence Number)字段里,指明客户端打算连接的服务器的端口,并将该数据包发送给服务器端,发送完毕后,客户端进入SYN_SENT状态,等待服务器端确认。
第二次握手:
服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将TCP报文标志位SYN和ACK都置为1,ack=J+1,随机产生一个序号值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态。
第三次握手:
客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。
注意:我们上面写的ack和ACK,不是同一个概念:
小写的ack代表的是头部的确认号Acknowledge number, 缩写ack,是对上一个包的序号进行确认的号,ack=seq+1。
大写的ACK,则是我们上面说的TCP首部的标志位,用于标志的TCP包是否对上一个包进行了确认操作,如果确认了,则把ACK标志位设置成1。
TCP 四次挥手关闭连接
四次挥手过程的示意图如下:
挥手请求可以是Client端,也可以是Server端发起的,我们假设是Client端发起:
- 第一次挥手: Client端发起挥手请求,向Server端发送标志位是FIN报文段,设置序列号seq,此时,Client端进入FIN_WAIT_1状态,这表示Client端没有数据要发送给Server端了。
- 第二次分手:Server端收到了Client端发送的FIN报文段,向Client端返回一个标志位是ACK的报文段,ack设为seq加1,Client端进入FIN_WAIT_2状态,Server端告诉Client端,我确认并同意你的关闭请求。
- 第三次分手: Server端向Client端发送标志位是FIN的报文段,请求关闭连接,同时Client端进入LAST_ACK状态。
- 第四次分手 : Client端收到Server端发送的FIN报文段,向Server端发送标志位是ACK的报文段,然后Client端进入TIME_WAIT状态。Server端收到Client端的ACK报文段以后,就关闭连接。此时,Client端等待2MSL的时间后依然没有收到回复,则证明Server端已正常关闭,那好,Client端也可以关闭连接了。
补充:
在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。同时由于TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议,TCP是全双工模式,所以需要四次挥手关闭连接。
TCP的序号和确认号:
32位序号 seq:Sequence number 缩写seq ,TCP通信过程中某一个传输方向上的字节流的每个字节的序号,通过这个来确认发送的数据有序,比如现在序列号为1000,发送了1000,下一个序列号就是2000。
32位确认号 ack:Acknowledge number 缩写ack,TCP对上一次seq序号做出的确认号,用来响应TCP报文段,给收到的TCP报文段的序号seq加1。
TCP的标志位
每个TCP段都有一个目的,这是借助于TCP标志位选项来确定的,允许发送方或接收方指定哪些标志应该被使用,以便段被另一端正确处理。
用的最广泛的标志是 SYN,ACK 和 FIN,用于建立连接,确认成功的段传输,最后终止连接。
SYN:简写为S,同步标志位,用于建立会话连接,同步序列号;
ACK: 简写为.,确认标志位,对已接收的数据包进行确认;
FIN: 简写为F,完成标志位,表示我已经没有数据要发送了,即将关闭连接;
PSH:简写为P,推送标志位,表示该数据包被对方接收后应立即交给上层应用,而不在缓冲区排队;
RST:简写为R,重置标志位,用于连接复位、拒绝错误和非法的数据包;
URG:简写为U,紧急标志位,表示数据包的紧急指针域有效,用来保证连接不被阻断,并督促中间设备尽快处理;
以下是一些常见的基于TCP的应用层协议,它们在建立连接时都会使用TCP的三次握手过程:
HTTP(超文本传输协议):用于在Web浏览器中显示和发送超媒体文档,如HTML页面。当浏览器向服务器请求一个网页时,首先会通过TCP的三次握手建立连接,然后发送HTTP请求,服务器通过相同的连接发送HTTP响应。
SMTP(简单邮件传输协议):用于在电子邮件服务器之间传输邮件。当邮件客户端(如Outlook、Gmail等)发送一封电子邮件时,它会与邮件服务器建立TCP连接,通过SMTP协议发送邮件内容,这个过程同样依赖于TCP的三次握手来建立可靠的连接。
FTP(文件传输协议):用于在两台计算机之间传输文件。无论是上传文件到服务器还是从服务器下载文件,FTP客户端和服务器之间都需要先通过TCP的三次握手建立连接。
Telnet:一种网络协议,用于在远程计算机上登录并进行操作。Telnet客户端和服务器之间也需要通过TCP的三次握手来建立连接。
SSH(安全外壳协议):虽然SSH本身提供了加密和认证机制,但它也是基于TCP之上的。在SSH客户端和服务器之间进行数据传输之前,同样需要通过TCP的三次握手来建立连接。
一、DNS协议的定义与作用
定义:DNS协议是一个处理IP地址与域名之间映射的网络协议,作用于应用层。它通过将域名映射到IP地址,使得用户可以通过更易于记忆和理解的域名来访问网络资源,而不是直接通过复杂的IP地址。
作用:DNS协议是互联网的核心服务之一,它使得互联网上的计算机和服务能够通过用户友好的名称(即域名)来相互定位和通信。
二、DNS协议的工作原理
用户输入域名:当用户在浏览器中输入一个域名时,操作系统会启动DNS解析过程。
查询缓存:首先,DNS解析器会检查自己的缓存中是否已经存储了该域名对应的IP地址。如果缓存中有,则直接返回IP地址,解析过程结束;如果没有,则继续下一步。
递归查询:如果本地DNS解析器缓存中没有找到对应的IP地址,它会向根DNS服务器发起查询请求。根DNS服务器会返回下一级(顶级)域服务器的地址给本地DNS解析器。然后,本地DNS解析器会向这个顶级域服务器发起查询请求,顶级域服务器再返回下一级(权威)域服务器的地址。这个过程会一直持续到找到权威DNS服务器为止,权威DNS服务器会返回目标域名对应的IP地址。
返回结果:最终,本地DNS解析器将目标域名对应的IP地址返回给操作系统,操作系统再将该IP地址返回给浏览器,完成域名解析过程。
三、DNS协议的特点
分布式数据库:DNS是一个分布式的数据库系统,它存储了全球范围内的域名和IP地址的映射关系。
缓存机制:为了提高查询效率,DNS协议引入了缓存机制。本地DNS解析器和DNS服务器都会缓存查询结果,以便在后续查询中直接使用。
递归查询与迭代查询:DNS查询通常采用递归查询方式,即本地DNS解析器代替用户向各级DNS服务器发起查询请求,直到找到目标IP地址。而迭代查询则是本地DNS解析器向根DNS服务器发起查询请求后,根DNS服务器只返回下一级DNS服务器的地址,让本地DNS解析器自行进行后续查询。
四、DNS协议的应用场景
企业内部网络:DNS服务器可以帮助企业员工快速访问公司内部资源,如文件服务器、数据库服务器等。
公共Wi-Fi热点:用户可以通过输入域名来自动连接到公共Wi-Fi热点,而无需手动输入IP地址或SSID名称。
网站负载均衡:DNS服务器可以通过轮询或权重分配等技术,将用户请求分发到多台服务器上,实现网站的负载均衡。
安全防护:DNS也是网络安全中的一个重要环节。管理员可以设置DNS黑名单和白名单来限制对特定域名或IP地址的访问,从而保护公司机密信息不被泄露。
IP协议工作原理
IP协议(Internet Protocol,网际互连协议)是TCP/IP体系中的网络层协议,其主要作用是实现网络之间信息的传送。IP协议的工作原理可以归纳为以下几点:
- 无状态与无连接:IP协议为上层协议提供无状态、无连接的服务。这意味着IP协议本身不维护通信状态,也不保证数据包的顺序、可靠性或完整性,这些需要由上层协议(如TCP)来处理。
- 数据包传输:IP协议以数据包(IP数据包或IP数据报)的形式传输数据。每个数据包都包含源IP地址和目的IP地址,以及数据本身。路由器根据数据包中的目的IP地址来转发数据包,以实现数据的跨网络通信。
- 分片与重组:当IP数据包的大小超过网络的最大传输单元(MTU)时,IP协议会将其分片成多个较小的数据包进行传输。这些分片在到达目的地后会被重新组合成原始的数据包。分片过程可能发生在发送端或中转路由器上。
- 生存时间(TTL):IP数据包中包含一个生存时间(TTL)字段,用于限制数据包在网络中的生存时间,以防止数据包在网络中无限循环。每当数据包经过一个路由器时,TTL值就会减1,当TTL值减为0时,数据包将被丢弃。
- 路由选择:路由器根据路由表中的信息来选择数据包的下一跳地址。如果目标网络与本地路由器直接相连,则数据包将直接交付给目标主机;否则,路由器将数据包转发给指明的下一跳路由器,直到数据包到达目的地。
HTTP协议工作原理
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是一种基于客户端-服务器模式的应用层协议,用于在Web浏览器和服务器之间传输超文本数据。HTTP协议的工作原理可以归纳为以下几点:
- 请求-响应模式:HTTP协议采用请求-响应模式进行通信。客户端(如Web浏览器)向服务器发送HTTP请求,请求中包含需要访问的资源URL(统一资源定位符)。服务器接收到请求后,根据请求中的URL找到相应的资源,并生成HTTP响应发送给客户端。
- 无状态协议:HTTP协议本身是无状态的,即服务器不会保存客户端的任何信息(如请求历史、登录状态等)。然而,在实际应用中,可以通过在请求和响应中携带状态信息(如Cookie、Session等)来实现有状态的会话。
- 报文格式:HTTP请求和响应都遵循特定的报文格式,包括请求行(或状态行)、请求头(或响应头)和请求体(或响应体)。请求行包含请求方法(如GET、POST)、URL和HTTP版本等信息;请求头包含请求的附加信息(如User-Agent、Accept等);请求体包含请求的具体数据(如表单数据、文件上传等)。响应头包含响应的附加信息(如Content-Type、Server等);响应体包含响应的具体数据(如HTML页面、图片等)。
ARP协议工作原理
ARP协议(Address Resolution Protocol,地址解析协议)是TCP/IP协议族中的一个重要协议,用于将网络层地址(即IP地址)解析为链路层地址(即MAC地址)。ARP协议的工作原理可以归纳为以下几点:
- 广播ARP请求:当主机需要发送数据给另一个主机时,它首先会检查自己的ARP缓存中是否已经有目标IP地址对应的MAC地址。如果没有,主机就会在网络中广播一个ARP请求,询问哪个主机拥有这个IP地址。
- 接收ARP响应:拥有目标IP地址的主机会接收到这个ARP请求,并发送一个ARP响应给源主机。ARP响应中包含目标IP地址对应的MAC地址。
- 更新ARP缓存:源主机接收到ARP响应后,会将目标IP地址和MAC地址的对应关系存入自己的ARP缓存中,以便后续的数据发送。同时,这个对应关系会在ARP缓存中保留一段时间(通常为几分钟到几小时不等),以减少后续发送数据时的ARP请求次数。
- 发送数据:源主机在获取到目标MAC地址后,就可以将数据封装成以太网帧并发送给目标主机了。以太网帧中包含源MAC地址、目标MAC地址和数据部分等信息。目标主机在接收到以太网帧后,会检查目标MAC地址是否与自己的MAC地址匹配,如果匹配则处理数据;如果不匹配则丢弃该帧。
ICMP协议工作原理
① 错误报告:
当IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。
ICMP提供一致易懂的出错报告信息,发送的出错报文返回到发送原数据的设备。 发送设备随后可根据ICMP报文确定发生错误的类型,并确定如何才能更好地重发失败的数据包。
但ICMP唯一的功能是报告问题而不是纠正错误,纠正错误的任务由发送方完成。
② 控制消息传递:
ICMP在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。例如,当路由器在处理一个数据包的过程中发生了意外,可以通过ICMP向数据包的源端报告有关事件。
③ 网络诊断:
ICMP还用于网络诊断工具中,如ping和tracert命令。这些命令利用ICMP协议来实现网络功能,帮助用户检测网络连接状况。
应用场景:
检测网络连通性。
诊断网络故障。
监控网络性能。
防止网络攻击(如通过ICMP洪水攻击进行拒绝服务攻击)。
报文格式:
ICMP报文包含在IP数据报中,其格式通常包括以下几个部分:
IP头部:包含源IP地址、目的IP地址等基本信息。
ICMP头部:包含ICMP报文类型(如回显请求、回显应答、目标不可到达等)、代码(进一步描述错误类型)和校验和(用于验证报文完整性)等字段。
数据部分:根据ICMP报文类型的不同,数据部分可能包含额外的信息(如时间戳、错误信息等)。