七层架构:
- 物理层:通信信道上原始比特流。网卡是这层
- 数据链路层:物理寻址,同时将原始比特流转化为逻辑传输线路。比特数据组成了帧,交换机就是这层
- 网络层:将网络地址翻译成对应的物流地址 路由器 IP协议
- 传输层: 最重要的一层。接受上一层的协议,流量控制,在必要的时候把数据进行分割,并将这些数据交给网络层 TCP和UDP协议
- 会话层:不同机器上的用户之间建立及管理回话
- 表示层:信息的语法语义以及他们的关联,加密解密,转换翻译,压缩解压缩。
- 应用层: http协议
OSI 只是概念上的划分,是一个简单的标准,TCP/IP四层网络模型是具体实现。
OSI七层模型 | TCP/IP概念层模型 | 功能 | TCP/IP协议族 |
---|---|---|---|
应用层 | 应用层 | 文件传输,电子邮件,文件服务,虚拟终端 | TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet |
表示层 | 数据格式化,代码转化,数据加密 | ||
会话层 | 解除或建立与别的接点的联系 | ||
传输层 | 传输层 | 提供端对端的接口 | TCP,UDP |
网络层 | 网络层 | 为数据包选择路由 | IP ,ICMP |
数据链路层 | 链路层 | 传输有地址的帧以及错误检测功能 | |
物理层 | 以二进制数据形式在屋里媒体上传输数据 |
TCP / IP协议
TCP / IP协议定义
TCP/IP协议是指能够在多个不同网络间实现信息传输的协议簇。不仅仅是指 TCP和IP这两个协议,而是指FTP、SMTP、TCP、UDP、IP等协议构成的协议簇,只是因为TCP 和 IP 协议最具有代表性,所以被称为TCP/IP协议。
TCP/IP协议组成
TCP/IP模型分为四层(应用层,传输层,网络层,链路层):
- 应用层
- 应用层是TCP/IP协议的第一层,直接为应用进程提供服务。不同的程序会根据自己的需求来使用应用层的不同协议。邮件用SMTP,万维网用HTTP,远程登陆服务用TELNET
- 应用层可以加密解密格式化数据
- 应用层可以建立或解除与其他接点的联系,这样可以充分节省网络资源。
- 传输层
- 网络层
在TCP/IP协议中,网络层可以进行网络连接的建立和终止以及IP地址的寻找等功能
- 链路层
在TCP/IP协议中,网络层位于第四层。由于网络接口层兼并了物理层和数据链路层,所以,网络接口层既是传输数据的物理媒介,也可以为网络层提供一条准确无误的线路。
ARP协议
ARP协议是地址解析协议,是根据IP地址获取MAC地址的一个网络协议。
应用层报文怎么传输到另一个应用层
应用层数据报文向外发送时,数据是由最上面的应用层向下一层层封装后发送给物理层;而接收数据时,数据是由物理层向上一层层解封后发给应用层。
TCP三次握手
三次握手过程
SYN
: 发起一个新连接seq
: 序号ACK
: 确认序号有效
- 第一次握手:建立连接时,客户端发送syn包到服务器(seq=x),并进入
SYN_SENT
状态,等待服务器确认。 - 第二次握手:服务端收到
SYN
,必须确认客户的SYN(ack = x+1)
,同时自己发送一个SYN,序号seq=y
,随后服务器进入SYN_RECV
状态。 - 第三次握手: 客户端收到服务器的
SYN+ACK
包,向服务器发送确认包ACK(ack = y+1)
,此包发送完毕,客户端和服务器进入ESTABLISHED
(TCP连接成功)状态。
为什么需要三次握手才能建立连接?
为了初始化Sequence Number
为什么要有最后一次ACK
客户端首先向服务器发送一个连接请求,但是可能这个连接请求走了远路,等了很长时间,服务器都没有收到,那么客户端可能会再次发送,此时服务器端收到并且回复SYN、ACK;在这个时候最先发送的那个连接请求到达服务器,那么服务器会回复一个SYN,ACK;但是客户端表示自己已经收到确认了,并不搭理这个回复,那么服务器可能陷入等待,如果这种情况多了,那么会导致服务器瘫痪,所以要发送第三个确认。
TCP四次挥手
四次挥手过程
- 客户端发动停止连接报文,停止发送数据。释放数据报文首部,FIN=1,其序号为seq=u(这个u就是前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
- 服务器收到释放报文,发出确认报文,ACK=1,ack = u+1,并且带上自己的序号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。此时,服务器处于CLOSE-WAIT状态。
- 客户端收到服务器的确认请求之后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这期间还要接受服务器发送的最后的数据)。
- 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LASK_ACK最后确认状态,等待客户端的确认。
- 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时的TCP连接还没有释放,必须经过2MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
- 服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次TCP连接。可以看到,服务器结束TCP连接的时间比客户端早一些。
四次挥手原因
TCP 协议是一种面向连接的,可靠的,基于字节流的运输层通信协议。TCP是全双工模式,这就意味着,当客户端发出FIN报文段时,只是表示客户端已经没有数据要发送了,但是,客户端还是可以接受来自服务端的数据。当服务端返回ACK报文段时,表示它已经知道客户端没有数据发送了,但是服务端还是可以发送数据到客户端,当服务端也发送了FIN报文段时,这个时候就表示服务端也没有数据要发送了。之后,彼此就会愉快的中断这次TCP连接。
简单的说,前两次挥手用于关闭一个方向的数据通道,后两次挥手用于关闭另外一个方向的数据通道。
TCP和UDP的区别
- 连接: TCP是面向连接的传输层协议,即传输数据之前必须先建立好连接。UDP无连接。
- 服务对象: TCP点对点的两点间服务,即一条TCP连接只能有两个端点。UDP支持一对一,一对多,多对多的交互通信。
- 可靠性: TCP可靠交付,无差错,不丢失,不重复,按序到达。UDP尽最大努力交付,不保证可靠交付。
- 拥塞控制: TCP有拥塞控制可流量控制保证数据传输的安全性,UDP没有拥塞控制,网络拥塞不会影响源主机的发送效率。
- 报文长度: TCP动态报文长度,即TCP报文长度是根据接收方的窗口大小和当前网络拥塞情况决定的。UDP面向报文,不合并,不拆分,保留上面传下报文的边界。
- 首部开销: TCP 首部开销大,首部20个字节,UDP首部开销小,8字节。
- 试用场景: 数据完整性需要让位与通信实时性,则应该选择使用TCP协议,反之,应该使用UDP协议。
TCP中的缓存有什么用?
TCP缓存区是什么?每个socket被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区。
TCP的发送缓冲区是用来缓存应用程序的数据,发送缓冲区的每个字节都有序列号,被应答确认的序列号对应的数据会从发送缓冲区删除掉。
TCP的滑动窗口
TCP使用滑动窗口做流量控制与乱序重排。