1.概述
1.1 网络协议划分
1.2 各协议位于哪层
网络层:IP、ICMP、ARP、RARP、BOOTP、TCP/IP
传输层:TCP、UDP
应用层:FTP、HTTP、DNS、TELNET、SMTP
1.3 5层模型功能描述
1.应用层
准备数据
2.传输层
对数据进行分块,识别并将数据报正确交付相应的应用程序,识别数据报属于哪个应用程序的方法为看端口;
3.网络层
对分好块的数据加IP地址
4.数据链路层
对加完IP地址的数据加MAC地址
5.应用层
转化为二进制进行传输
应用层:解决通过应用进程的交互来实现特定网络应用的问题
传输层:解决进程之间基于网络的通信问题
网络层:解决分组在多个网络上传输(路由)的问题
数据链路层:结局分组在一个网络(或一段链路)上传输的问题
物理层:解决使用何种信号来传输比特的问题
TCP是面向字节流的
TCP流量控制
TCP拥塞控制
TCP基于以字节为单位的窗口滑动来实现可靠传输
TCP三次握手原因:防止已经失效的TCP请求报文段突然又传到了TCP服务器,因而导致错误
保活计时器
TCP规定,在建立连接后,所有的TCP报文段都必须把ACK置为1
动态主机配置协议DHCP:提供了即插即用联网的机制
使用CS机制提供服务,基于UDP协议
DHCP客户在为获取到IP地址时使用地址0.0.0.0
DNS采用分布式系统、UDP协议进行封装
域名分为:顶级域名、一级域名、二级域名。。。。。
FTP采用CS方式
2.物理层
根据信息在传输线上的传输方式,分为三种:
1.单工通信:单向传输
2.半双工通信:双向交替通信
3.全双工通信:双向同时通信
3.链路层
1.封装成帧:将网络层传下来的数据添加首部和尾部,用于标记帧的开始和结束。
透明传输:
帧使用首部和尾部进行界定,如果数据部分含有和首部和尾部相同的内容,为了防止错误判定,需要在那个相同数据前面添加转义字符,如果数据部分出现转义字符,需要在转义字符前面再添加转义字符。用户察觉不出来转义字符的存在
信道分类
1.广播信道:一对多通信,一个节点发送的数据能被广播信道所有节点接收,需要方式协调。主要有两种,信道复用技术或CSMA/CD协议
2.点对点信道:一对一通信,没有碰撞,比较简单,使用PPP协议控制。
信道复用技术
1.频分复用:所有主机在相同时间占用不用的频率带宽资源
2.时分复用:在不同的时间占用相同的频率带宽资源
上面两种对信道的利用率都不高
3.统计时分复用:不固定用户在时分复用帧中的位置,只要有数据就集中起来,组成帧发送
4.波分复用
5.码分复用
MAC地址
是链路层地址,长度为6字节(48位),用于唯一表示网络适配器(网卡)
一台机器有几个网卡,就有几个MAC地址。比如笔记本有一个有线网卡和一个无线网卡
局域网
是一种典型的广播信道,主要特线是网络为一个单位所拥有,且地理范围和站点数目都有限
主要有以太网、令牌环网、FDDI 和 ATM 等局域网技术,目前以太网占领着有线局域网市场
以太网
以太网是一种星型拓扑结构局域网。早期使用集线器进行连接,目前以太网使用交换机替代了集线器,交换机是一种链路层设备,它不会发生碰撞,能根据 MAC 地址进行存储转发。
4.网络层
网络层是整个互联网的核心,使用IP协议把异构的物理网络连接起来,与IP协议配套使用的还有三个协议:
地址解析协议 ARP(Address Resolution Protocol)
网际控制报文协议 ICMP(Internet Control Message Protocol)
网际组管理协议 IGMP(Internet Group Management Protocol)
IP数据报格式
版本:有IPV4和IPV6两个值
IP地址编址方式
三个历史阶段
1.分类:A类、B类。。。。E类
2.子网划分
3.无分类
网际控制报文协议ICMP
是为了更有效的转发IP数据报和提高交付成功的机会,它会封装在IP数据报中,但是不属于高级协议
ping是ICMP协议的一个重要应用
原理是向目标主机发送ICMP echo请求报文,收到之后会发送Echo报文回答,Ping会根据时间和成功相应次数计算时间和丢包率
虚拟专用网VPN
网络地址转换NAT
5.传输层
网络层只把分组发送到目的主机,但是真正进行通信的不是主机而是主机中的进程,传输层提供了进程间的逻辑通信,传输层向高层用户屏蔽了下面网络层的核心细节,使应用程序看起来像是两个传输层实体之间有一条端到端的逻辑通信信道
5.1 UPD和TCP的特点
UDP:是无连接的,支持一对一,一对多,多对一,多对多交互通信
TCP:面向连接的,面向字节流,没条TCP连接只能是一对一的
5.2 TCP报文段首部格式
-
序号 :用于对字节流进行编号,例如序号为 301,表示第一个字节的编号为 301,如果携带的数据长度为 100 字节,那么下一个报文段的序号应为 401。
-
确认号(ack):期望收到的下一个报文段的序号。例如 B 正确收到 A 发送来的一个报文段,序号为 501,携带的数据长度为 200 字节,因此 B 期望下一个报文段的序号为 701,B 发送给 A 的确认报文段中确认号就为 701。
-
数据偏移 :指的是数据部分距离报文段起始处的偏移量,实际上指的是首部的长度。
-
确认 ACK :当 ACK=1 时确认号字段有效,否则无效。TCP 规定,在连接建立后所有传送的报文段都必须把 ACK 置 1。
-
同步 SYN :在连接建立时用来同步序号。当 SYN=1,ACK=0 时表示这是一个连接请求报文段。若对方同意建立连接,则响应报文中 SYN=1,ACK=1。
-
终止 FIN :用来释放一个连接,当 FIN=1 时,表示此报文段的发送方的数据已发送完毕,并要求释放连接。
-
窗口 :窗口值作为接收方让发送方设置其发送窗口的依据。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。
5.3 TCP三次握手
假设 A 为客户端,B 为服务器端。
首先 B 处于 LISTEN(监听)状态,等待客户的连接请求。
A 向 B 发送连接请求报文,SYN=1,ACK=0,选择一个初始的序号 x。
B 收到连接请求报文,如果同意建立连接,则向 A 发送连接确认报文,SYN=1,ACK=1,确认号为 x+1,同时也选择一个初始的序号 y。
A 收到 B 的连接确认报文后,还要向 B 发出确认,确认号为 y+1,序号为 x+1。
B 收到 A 的确认后,连接建立。
三次握手的原因:
第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。
客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。
ACK和ack的区别:
1.ACK出现在TCP报文的标志位中,表示确认标志位。ack出现在TCP报文的确认号字段中,表示确认号
2.ACK在TCP建连和传输数据中,接收方收到数据后,会将ACK置为1,表示成功接收数据,并返回确认报文。ack在TCP建连和传输数据中,接收方返回确认报文时,会在ack中填写期望收到的下一个字节序号,告知发送方从哪里开始继续发送数据
5.4 TCP的四次挥手
以下描述不讨论序号和确认号,因为序号和确认号的规则比较简单。并且不讨论 ACK,因为 ACK 在连接建立之后都为 1。
A 发送连接释放报文,FIN=1。
B 收到之后发出确认,此时 TCP 属于半关闭状态,B 能向 A 发送数据但是 A 不能向 B 发送数据。
当 B 不再需要连接时,发送连接释放报文,FIN=1。
A 收到后发出确认,进入 TIME-WAIT 状态,等待 2 MSL(最大报文存活时间)后释放连接。
B 收到 A 的确认后释放连接。
四次挥手的原因:
客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。
TIME_WAIT:
客户端接收到服务器端的 FIN 报文后进入此状态,此时并不是直接进入 CLOSED 状态,还需要等待一个时间计时器设置的时间 2MSL。这么做有两个理由:
1.确保最后一个确认报文能够到达。如果 B 没收到 A 发送来的确认报文,那么就会重新发送连接释放请求报文,A 等待一段时间就是为了处理这种情况的发生。
2.等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文。
------------------------------------------------------------------------------------------------------------
TIME_WAIT状态是TCP连接结束后的一个必要阶段,主要作用是确保TCP全双工连接的可靠终止。在这个阶段中,主动关闭连接的一方会等待2倍MSL(报文的最大生存时间),通常是4分钟,以确保网络上的所有重复分组都被清除且连接已经稳定关闭。
然而,TIME_WAIT状态确实会对服务器产生一定影响。首先,TIME_WAIT状态下的TCP连接占用的端口在这段时间内无法被再次使用,而TCP端口的数量上限是63。这意味着,如果有大量的短连接,可能会耗尽可用的端口资源,降低服务器的处理能力。其次,对于高并发场景,短暂的业务处理和传输数据的时间远远小于TIME_WAIT超时的时间,这会导致用过的端口会停留在TIME_WAIT状态几分钟,期间其他HTTP请求无法占用此端口,降低了服务器的并发处理能力。
但是值得注意的是,TIME_WAIT状态不会永久存在,当MSL时间到达后,系统会自动回收并清理这些资源。此外,为了解决因TIME_WAIT状态过多而导致的端口资源不足问题,可以采用一些解决方案,如修改系统参数以缩短TIME_WAIT状态的持续时间或优化网络架构等。
5.5 端口的状态
端口状态主要包括LISTENING、ESTABLISHED、TIME_WAIT、SYN_SENT、CLOSE_WAIT、LAST_ACK、CLOSED等。这些状态反映了TCP连接从建立到关闭过程中的不同阶段,以下是对这些端口状态的详细解释:
- LISTENING:表示端口正在监听来自远程主机的连接请求,这是服务器端在等待客户端发起连接时的状态。当防火墙设置禁止某个端口时,该端口的状态也可能显示为LISTENING,但这表示拦截数据,不允许访问。
- ESTABLISHED:表示两台机器之间已经建立了连接,并且正在通信交换数据。这是TCP连接成功建立后的状态。
- TIME_WAIT:表示结束了这次连接,说明某个端口曾经有过访问,但访问已经结束,正在等待足够的时间以确保远程TCP接收到连接中断请求的确认。这个状态的存在是为了防止旧的重复连接初始化新的连接。
- SYN_SENT:表示请求连接。当你要访问其他计算机的服务时,首先要发个同步信号给该端口,此时状态为SYN_SENT。如果连接成功,则变为ESTABLISHED状态。SYN_SENT状态非常短暂,但如果发现大量SYN_SENT状态且在向不同的机器发出,可能意味着机器中了病毒或正在进行网络扫描。
- CLOSE_WAIT:表示被动关闭。等待从本地用户发来的连接中断请求,被动关闭端TCP接到FIN后,就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序),并进入CLOSE_WAIT状态。
- LAST_ACK:表示被动关闭连接过程中的状态。等待原来的发向远程TCP的连接中断请求的确认,被动关闭端一段时间后,接收到文件结束符的应用程序将调用CLOSE关闭连接,TCP也发送一个FIN,等待对方的ACK,进入LAST-ACK状态。
- CLOSED:表示连接结束,没有任何连接状态。被动关闭端在接受到ACK包后,就进入了CLOSED状态,连接结束
6.应用层
域名系统DNS
DNS 是一个分布式数据库,提供了主机名和 IP 地址之间相互转换的服务。这里的分布式数据库是指,每个站点只保留它自己的那部分数据。
域名具有层次结构,从上到下依次为:根域名、顶级域名、二级域名。
DNS 可以使用 UDP 或者 TCP 进行传输,使用的端口号都为 53。大多数情况下 DNS 使用 UDP 进行传输,这就要求域名解析器和域名服务器都必须自己处理超时和重传从而保证可靠性。在两种情况下会使用 TCP 进行传输:
如果返回的响应超过的 512 字节(UDP 最大只支持 512 字节的数据)。
区域传送(区域传送是主域名服务器向辅助域名服务器传送变化的那部分数据)。
文件传送协议
FTP 使用 TCP 进行连接,它需要两个连接来传送一个文件:
控制连接:服务器打开端口号 21 等待客户端的连接,客户端主动建立连接后,使用这个连接将客户端的命令传送给服务器,并传回服务器的应答。
数据连接:用来传送一个文件数据。
根据数据连接是否是服务器端主动建立,FTP 有主动和被动两种模式:
主动模式:服务器端主动建立数据连接,其中服务器端的端口号为 20,客户端的端口号随机,但是必须大于 1024,因为 0~1023 是熟知端口号。
被动模式:客户端主动建立数据连接,其中客户端的端口号由客户端自己指定,服务器端的端口号随机。
主动模式要求客户端开放端口号给服务器端,需要去配置客户端的防火墙。被动模式只需要服务器端开放端口号即可,无需客户端配置防火墙。但是被动模式会导致服务器端的安全性减弱,因为开放了过多的端口号。
动态主机配置协议DHCP
DHCP (Dynamic Host Configuration Protocol) 提供了即插即用的连网方式,用户不再需要手动配置 IP 地址等信息。
DHCP 配置的内容不仅是 IP 地址,还包括子网掩码、网关 IP 地址。
远程登陆协议TELNET
TELNET 用于登录到远程主机上,并且远程主机上的输出也会返回。
TELNET 可以适应许多计算机和操作系统的差异,例如不同操作系统系统的换行符定义。
电子邮件协议
一个电子邮件系统由三部分组成:用户代理、邮件服务器以及邮件协议。
邮件协议包含发送协议和读取协议,发送协议常用 SMTP,读取协议常用 POP3 和 IMAP。
Web页面请求过程
1. DHCP 配置主机信息
假设主机最开始没有 IP 地址以及其它信息,那么就需要先使用 DHCP 来获取。
主机生成一个 DHCP 请求报文,并将这个报文放入具有目的端口 67 和源端口 68 的 UDP 报文段中。
该报文段则被放入在一个具有广播 IP 目的地址(255.255.255.255) 和源 IP 地址(0.0.0.0)的 IP 数据报中。
该数据报则被放置在 MAC 帧中,该帧具有目的地址 FF:<zero-width space>FF:<zero-width space>FF:<zero-width space>FF:<zero-width space>FF:FF,将广播到与交换机连接的所有设备。
连接在交换机的 DHCP 服务器收到广播帧之后,不断地向上分解得到 IP 数据报、UDP 报文段、DHCP 请求报文,之后生成 DHCP ACK 报文,该报文包含以下信息:IP 地址、DNS 服务器的 IP 地址、默认网关路由器的 IP 地址和子网掩码。该报文被放入 UDP 报文段中,UDP 报文段有被放入 IP 数据报中,最后放入 MAC 帧中。
该帧的目的地址是请求主机的 MAC 地址,因为交换机具有自学习能力,之前主机发送了广播帧之后就记录了 MAC 地址到其转发接口的交换表项,因此现在交换机就可以直接知道应该向哪个接口发送该帧。
主机收到该帧后,不断分解得到 DHCP 报文。之后就配置它的 IP 地址、子网掩码和 DNS 服务器的 IP 地址,并在其 IP 转发表中安装默认网关。
2. ARP 解析 MAC 地址
主机通过浏览器生成一个 TCP 套接字,套接字向 HTTP 服务器发送 HTTP 请求。为了生成该套接字,主机需要知道网站的域名对应的 IP 地址。
主机生成一个 DNS 查询报文,该报文具有 53 号端口,因为 DNS 服务器的端口号是 53。
该 DNS 查询报文被放入目的地址为 DNS 服务器 IP 地址的 IP 数据报中。
该 IP 数据报被放入一个以太网帧中,该帧将发送到网关路由器。
DHCP 过程只知道网关路由器的 IP 地址,为了获取网关路由器的 MAC 地址,需要使用 ARP 协议。
主机生成一个包含目的地址为网关路由器 IP 地址的 ARP 查询报文,将该 ARP 查询报文放入一个具有广播目的地址(FF:<zero-width space>FF:<zero-width space>FF:<zero-width space>FF:<zero-width space>FF:FF)的以太网帧中,并向交换机发送该以太网帧,交换机将该帧转发给所有的连接设备,包括网关路由器。
网关路由器接收到该帧后,不断向上分解得到 ARP 报文,发现其中的 IP 地址与其接口的 IP 地址匹配,因此就发送一个 ARP 回答报文,包含了它的 MAC 地址,发回给主机。
3. DNS 解析域名
知道了网关路由器的 MAC 地址之后,就可以继续 DNS 的解析过程了。
网关路由器接收到包含 DNS 查询报文的以太网帧后,抽取出 IP 数据报,并根据转发表决定该 IP 数据报应该转发的路由器。
因为路由器具有内部网关协议(RIP、OSPF)和外部网关协议(BGP)这两种路由选择协议,因此路由表中已经配置了网关路由器到达 DNS 服务器的路由表项。
到达 DNS 服务器之后,DNS 服务器抽取出 DNS 查询报文,并在 DNS 数据库中查找待解析的域名。
找到 DNS 记录之后,发送 DNS 回答报文,将该回答报文放入 UDP 报文段中,然后放入 IP 数据报中,通过路由器反向转发回网关路由器,并经过以太网交换机到达主机。
4. HTTP 请求页面
有了 HTTP 服务器的 IP 地址之后,主机就能够生成 TCP 套接字,该套接字将用于向 Web 服务器发送 HTTP GET 报文。
在生成 TCP 套接字之前,必须先与 HTTP 服务器进行三次握手来建立连接。生成一个具有目的端口 80 的 TCP SYN 报文段,并向 HTTP 服务器发送该报文段。
HTTP 服务器收到该报文段之后,生成 TCP SYN ACK 报文段,发回给主机。
连接建立之后,浏览器生成 HTTP GET 报文,并交付给 HTTP 服务器。
HTTP 服务器从 TCP 套接字读取 HTTP GET 报文,生成一个 HTTP 响应报文,将 Web 页面内容放入报文主体中,发回给主机。
浏览器收到 HTTP 响应报文后,抽取出 Web 页面内容,之后进行渲染,显示 Web 页面。
常见问题
客户端通过new Socket()方法创建通信的Socket对象
服务器端通过new ServerSocket()创建TCP连接对象 accept接纳客户端请求
参考文章:
https://blog.csdn.net/SHENMEGUI_32/article/details/73824152
https://blog.csdn.net/huanglei305/article/details/99712771
标签:IP,报文,基础,TCP,计算机网络,地址,服务器,连接 From: https://www.cnblogs.com/wxdxb/p/18556501