计算机网络体系结构
五层协议的体系结构:应用层、运输层、网络层、数据链路层、物理层。
1. 应用层协议
常见的五种应用层协议:HTTP、FTP、SMTP、DNS、BT。
应用层协议名称 | 应用层协议描述 |
---|---|
HTTP (HyperText Transfer Protocol) | 超文本传输协议;Web应用(拉协议),即客户端(主机)从服务器获取数据资源;基于TCP协议 |
FTP 协议 (File Transfer Protocol) | 文件传输协议;文件传输:客户端(主机)之间传文件,不涉及服务器(持有资源,不获取资源);基于TCP协议 |
SMTP (Simple Mail Transfer Protocol) | 简单邮件传输协议;电子邮件(推协议),即客户端(主机)只负责把文件发送出去;基于TCP协议 |
DNS (Domain Name System) | 域名系统;域名解析;基于UDP协议 |
BT (BitTorrent) | 内容分发协议;P2P应用:如果你要下载一个视频,可以从多个人那里一起下载,从每个人那里下载一部分视频,最后下载一个完整的视频 |
Telnet | Telnet是一个通过创建虚拟终端提供连接到远程主机终端仿真的TCP/IP协议。这一协议需要通过用户名和口令进行认证,是Internet远程登陆服务的标准协议。应用Telnet协议能够把本地用户所使用的计算机变成远程主机系统的一个终端。 |
2. 运输层协议
常见的运输层协议:TCP、UDP、HTTPS。
TCP协议
(1) 面向连接:客户端和服务器之间 一对一 连接。
(2) 可靠性高:TCP会为每一个字节按顺序编号,保证数据传输的有序性。
(3) 面向字节流:TCP从应用层接收报文是以字节的形式接收,并将其存入发送缓存中。每次发送时,可以从发送缓存中取出一个或多个字节,为它们加上一个首部,再进行发送。
注:一个字节有8位。
首部最少20个字节,最多60个字节。
(4) 全双工通道:既能接受数据,也能发送数据。
UDP协议
(1) 无连接
(2) 不可靠
(3) 面向报文:UDP从应用层接收到一个完整的报文以后,直接为其加一个首部,便可以进行发送。
UDP的首部只有8个字节,分别是:源端口 (2字节) +目的端口 (2字节) +长度 (2字节) +校验和 (2字节)
源端口:一个主机有唯一的IP,一个IP有很多个端口,每次请求都会随机分配一个端口。
端口和进程间的通信的概念:IP和端口二者其一不同,就是不同的进程。
计算机网络中,进程间的通信是跨主机。
长度:是 首部+报文 总共的长度,最少是8个字节,即报文是空。
校验和:运输层必须要有校验功能——差错校验。
TCP 建立连接的三次握手
第一次握手:SYN=1,表明这是一个SYN报文段,用于建立连接,不能携带数据,还要消耗掉一个序号 x 。seq=x,表明客户端A 发送报文的初始化序号为 x 。因为这是第一次发送报文,客户端 A 并没有收到服务器 B 的报文,所以ACK=0,不需要发送确认号 ack 。
第二次握手:SYN=1,表明这是一个SYN报文段,用于建立连接,不能携带数据,还要消耗掉一个序号 y 。seq=y,表明服务器 B 发送报文的初始化序号为 y 。此时,服务器 B 就需要发送确认号了,所以ACK=1,ack = x + 1 。
第三次握手:因为不再是SYN报文段,所以SYN=0,可以携带数据。ACK=1,ack = y + 1,seq = x + 1。
注:初始序号 seq 是随机生成的,范围在[ 0 ~ 2^32 ] 之间。那么问题来了,为什么是2^32呢?因为序号 seq 占用四个字节,每一个字节有8位,则有4X8=32位,每位有0/1两种可能,故是2^32。
为什么SYN和FIN要消耗掉一个序号?
因为 SYN 和 FIN 信号都是需要 acknowledgement 的,也就是你必须回复这个信号,如果它不占用一个字节的话,要如何判断你是回复这个信号还是回复这个信号之前的包呢?
比如:如果 FIN 信号不占用一个字节,回复 FIN 的 ack 包就可能被误认为是 回复之前的数据包被重新发了一次,第二次挥手无法完成,连接也就无法正常关闭了。
为什么是三次握手,而不是两次握手?
为了不浪费资源。
比如说,A 向 B 发送了第一次请求,B 也回应了 A ,向 A 发送了一次请求。但是,B 发送的报文因为某种原因丢失了,导致 A 没有收到 B 的报文。此时,A 会一直等着接收 B 的报文( B 以为自己的报文发送成功了,也一直等着接收 A 的报文),直到请求超时,A 会再发送第一次请求,要求重新建立连接。然后,成功建立连接之后,A 和 B 终于可以愉快地进行数据传输了。那么,之前没有成功的那次连接呢,很明显浪费掉了,双方都在等待,占用着 B 的资源,却没有进行数据传输。所以需要 A 再向 B 发送一个报文,保证 A 收到了 B 发送过来的报文,这也是为什么第三次握手可以携带数据了,毕竟第三次握手起到的是一个确认连接成功的作用。
3. 网络层协议
ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
END