一、OSI七层模型和TCP/IP四层模型
OSI 七层模型
七层模型指的是OSI参考模型,也称为开放式系统互联通信参考模型,是网络通信的标准框架。它是一个由国际标准化组织(ISO)制定的网络通信协议的体系结构,被用于描述计算机或网络设备在网络中互相通信的过程。该模型被划分为七个层次,每一层都有特定的功能和协议。
- 物理层(Physical layer):这一层负责处理物理信号的传输和接收,包括电气、光学、机械等方面。
- 数据链路层(Data Link layer):这一层负责处理数据的传输和接收,包括错误检测和校正等操作。
- 网络层(Network layer):这一层负责处理数据在网络中的路由和寻址。
- 传输层(Transport layer):这一层负责建立和维护应用程序之间的通信连接。
- 会话层(Session layer):这一层负责管理不同应用程序之间的对话和数据交换。
- 表示层(Presentation layer):这一层负责处理数据表示和编码等问题,使得不同计算机和网络设备之间能够解释和识别一致的数据格式。
- 应用层(Application layer):这一层负责处理网络应用程序和用户之间的交互,包括文件传输、电子邮件、网页浏览等应用。
TCP/IP四层模型
由于TCP,UDP,IP协议的普及,实际使用中一般使用四层模型。相对于七层模型,四层模型将OSI模型的会话层、表示层与应用层合并为一个应用层,简化了协议栈的层次结构。同时也可以看到,四层模型中IP和TCP/UDP协议的功能被分别独立出来,使得网络协议的设计和管理更加灵活和简单。
- 网络接口层(Network Interface layer):该层主要处理物理层和数据链路层的功能。
- 网络层(Internet层):该层负责处理数据在网络中的路由和寻址,实现IP地址的分配和转发。
- 传输层(Transport层):该层主要负责建立、维护和终止应用程序之间的连接,实现端口号的分配和管理。
- 应用层(Application层):该层负责处理网络应用程序和用户之间的交互,包括文件传输、电子邮件、网页浏览等应用。
常见协议
1. 网络接口层
- Ethernet(以太网)
- Wi-Fi
- 局域网(LAN)技术,如Token Ring、FDDI等
2. 网络层
- IP(Internet Protocol)
- ICMP(Internet Control Message Protocol)
- ARP(Address Resolution Protocol)
- RARP(Reverse Address Resolution Protocol)
3. 传输层
- TCP(Transmission Control Protocol)
- UDP(User Datagram Protocol)
4. 应用层
- HTTP(Hypertext Transfer Protocol)
- FTP(File Transfer Protocol)
- SMTP(Simple Mail Transfer Protocol)
- DNS(Domain Name System)
- DHCP(Dynamic Host Configuration Protocol)
- Telnet(远程登录协议)
- SSH(Secure Shell)
二、三次握手和四次挥手
三次握手
三次握手是TCP/IP协议中建立可靠连接的过程。完成了三次握手后,TCP连接就建立起来了。这个过程中,每一次握手的目的都是为了确认对方的能力和意愿,确保连接的可靠性和正确性。
第一次握手:
- 客户端先向服务器发送一个同步数据包(报文段)。
- 数据包的 TCP 首部内容:同步 SYN=1 ,确认 ACK=0 ,序号 seq=x
- 根据 TCP 首部内容,表示这是一个请求建立连接的数据包,其中 seq=x 为所传 送数据的第一个字节的序号。
第二次握手:
- 服务器收到客户端发送的第一个数据包后,根据 SYN=1 与 ACK=0 ,判断出为主动建立连接的数据包。
- 若服务器同意连接,则服务器发送一个数据包进行回应。
- 数据包的TCP首部内容:同步SYN=1,确认ACK=1,序号seq=y,确认号 ack=x+1 确认 ACK=1 ,代表服务器同意连接;
第三次握手:
- 客户端收到服务器的确认之后,再给服务器发送一个数据包。
- 数据包的TCP首部内容:同步SYN=0,确认ACK=1,序号seq=x+1,确认号 ack=y+1
四次挥手
四次挥手是TCP/IP协议中关闭连接的过程。完成了四次挥手后,TCP连接就彻底关闭了。这个过程中,每一次挥手的目的都是为了确认对方的能力和意愿,确保数据传输的完整性和可靠性。
第一次挥手:
- 首先客户端向服务器发送连接释放的请求报文(数据包),并停止发送数据。
- 在连接释放报文(数据包)的TCP首部中:终止FIN=1,确认ACK = 0
第二次挥手:
- 服务器收到连接释放的报文之后,给客户端发送确认报文。从客户端到服务器这个方向上的连接就释放了,TCP连接处于半关闭状态。此时客户端无法发送数据给服务器,但是服务器还可以发送数据给客户端,客户端仍可以接收。
- 在服务器发送给客户端确认报文的TCP首部中:终止FIN=0,确认ACK=1,序号位seq=v,确认号ack=u+1
第三次挥手:
- 若服务器已经没有向客户端发送的数据了,其应用进程就通知TCP释放连接,并向客户端发送确认报文。
- 在确认报文的TCP首部中:确认ACK=1,终止FIN=1
第四次挥手:
- 客户端收到服务器的连接释放报文段后,向服务器发出确认报文。
- 在确认报文的TCP首部中:确认ACK=1,终止FIN = 0
三、流量控制
流量控制是为了控制发送方发送速率,保证接收方来得及接受。
TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示(滑动窗口协议)发送端发送的速率,防止丢包,实现流控。
四、滑动窗口
滑动窗口是TCP协议用于实现流量控制的一种机制。发送方和接收方分别维护各自的缓冲区(窗口)。发送方的窗口大小由接受方的TCP首部的窗口字段决定。
滑动过程:
接收方缓冲区大小 = 发送窗口大小
接收方确认大小 = 滑动大小 = 可用窗口大小
五、拥塞控制
TCP主要通过四个算法实现拥塞控制:慢开始、拥塞避免、拥塞发生、快速恢复
慢开始
拥塞窗口(cwnd)从1开始,指数级上升
拥塞避免
由于慢开始cwnd增长的非常快,为了避免网络拥塞,设置了一个门限(ssthresh),当cwnd > ssthresh时,进入拥塞避免,使cwnd的上升速度从指数级降为线性级,控制拥塞窗口的增长速度。
拥塞发生
当触发了重传机制,就进入了拥塞发生算法:
超时重传:
出现超时重传时 TCP 会认为出现了比较严重的网络问题以至于连ACK都收不到,就会启用比较激进的拥塞算法:
- ssthresh 设为 cwnd/2
- cwnd 重置为 1
快速重传:
出现快速重传时 TCP 认为这种情况不严重,因为大部分没丢,只丢了一小部分,所以当发生快速重传的拥塞发生算法:
- cwnd = cwnd/2
- ssthresh = cwnd
快速恢复
快速重传一般和快速恢复算法同时使用,
- cwnd = ssthresh + 3
- 重传丢失的数据包
- 每收到一个重复的ACK,cwnd + 1
- 确认新数据的ACK到达,设置 cwnd = ssthresh
六、TCP和UDP区别
TCP | 面向连接 | 可靠 | 传输效率慢 | 所需资源多 | 要求通信数据可靠的场景 (如文件传输、邮件传输) | 首部20-40字节 |
UDP | 无连接 | 不可靠 | 传输效率快 | 所需资源少 | 要求通信速度快的场景 (如音频、视频) | 首部8字节 |
TCP:点对点面向连接的可靠性字节流传输协议,只能一对一,由于需要保证可靠性所有性能较差,一般用于重要数据的传递,如文件、邮件传输等。
UDP:无连接的不可靠的字节流传输协议,可以一对一,一对多,多对一,多对多,性能相对较好,一般用于直播、语音、视频等要求实时性且允许丢包的场景。