OSI 七层模型
TCP/IP 五层模型
应用层
状态码
- 1XX Informational(信息性状态码) 接收的请求正在处理
- 2XX Success(成功状态码) 请求正常处理完毕
- 3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
- 4XX Client Error(客户端错误状态码) 服务器无法处理请求
- 5XX Server Error(服务器错误状态码) 服务器处理请求出错
运输层
基本术语
- 进程:指计算机正在运行的实体
- 应用进程的相互通信: 一台主机的进程和另一台主机的一个进程交换数据的过程
- 传输层的复用与分用:复用是指发送方不同的进程可以通过一个传输层协议传送数据, 分用指的是接收方的传输层在剥去报文的首部后能把这些数据正确地交到目的应用进程中。
- TCP:传输控制协议
- UDP:用户数据报协议
- 端口:为的是确认对方机器是哪一个进程在和自己交互
- 停止等待协议:指发送方每发送完一个分组就停止发送,等待对方确认,在收到确认之后再发送下一个分组。
- 流量控制:控制对方的发送速率,既要让接收方来得及接收,也不要使网络发送拥塞
- 拥塞控制:防止过多数据注入网络中,防止路由器或者链路过载。
重要知识
- 网络层为主机提供逻辑通信,运输层为进程提供逻辑通信。
- 运输层两个重要协议:TCP和UDP。
- 硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层各种进程交互的一种地址。
- 运输层的端口号分为服务器端使用的端口号和客户端暂时使用的端口号。
- UDP的主要特点:无连接、尽最大努力交互、面向报文、无拥塞控制、支持一对一,一对多,多对一和多对多的交互通信,首部开销小
- TCP:面向连接、只能是一对一,提供可靠交互,提供全双工通信,面向字节流
- TCP用主机的IP地址加上主机上的端口号作为TCP连接的端点,这个端点就称为套接字,每一条TCP连接都被两个可确定的端口所确定。
- 停止等待协议:为了实现可靠传输,每传输完一个分组就停止发送,等对方确认之后,再继续发送下一个分组。
- 停止等待协议的超时重传(自动重传ARQ):只要超过一段时间仍然没有收到确定,就重传前面发送过的分组。若在该协议中收到重复分组,则还要继续发送确认(因为确认分组也有可能会丢失)
- 发送维持一个发送窗口,凡是位于窗口之内的分组可以连续发送出去,而不需要等待对方确认,接收方按最后一个分组发送确认,表面到这个分组的位置的全部分组已经全部接收。(滑动窗口机制)
- 滑动窗口机制:用于流量控制
- 发送窗口:拥塞控制窗口的大小取决于网络的拥挤程度,并且动态变化,TCP发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口较小的一个。
- 流量控制:点对点通信量的控制,是个端对端的问题,流量控制所要做到的就是抑制发送端发送数据的速率,以适应接收方的接受能力。
- 拥塞:在某段时间,软对某一资源的需求超过了该资源所能提供的可用部分,网络性能就会变差,如信道运输数据的能力
- 拥塞控制:复制过多的数据注入到网络中,防止路由器或者链路不至于过载,拥塞控制是一个全局性的过程,设计到所有主机、路由器以及降低网络传输性能有关的所有因素
- TCP拥塞控制的四种算法:慢开始、拥塞避免、快重传和快恢复。
- 运输层连接的三个阶段:连接建立、数据传送和连接释放。
TCP三次握手四次挥手
一开始,服务器首先创建传输块TCB(存储每一个连接中的重要信息),准备接受客户进程的连接请求,此处,服务器进程便进入的LISTEN(监听)状态。
三次握手
- 客户端首先创建一个TCB,在打算建立TCP连接之时,向服务器发出连接请求报文,SYM=1(SYM=1的报文段表示为一个连接请求报文),seq=x ,TCP规定,SYM=1的报文段需要消耗掉一个序列号。此处客户端进入SYN-SENT(同步已发送)状态
- 服务器收到请求之后,如果同意建立连接,则向客户端发出确认。ACK=1,SYM=1,ack=x+1,seq=y.TCP 规定,在连接建立后,所有传送的报文端都需要把ACK置为1,此时服务器端进入SYN-RCVD(同步收到)状态
- 客户端收到服务器端的确认后,还要给服务器确认。ACK=1,ack=y+1,seq=x+1, 此时不是SYN请求连接报文了,ACK报文段是可以携带数据的,但是此处不用,所以seq=x+1.此时客户端进入ESTABLISHED(已经建立)的状态
四次挥手
数据传输结束后,通信双方都可释放连接,现在客户端和服务器端都处于ESTABLISHED状态。
- 客户端发送连接释放报文,FIN=1,seq=u,u是前面已经传送过的数据的最后一个字节加1.TCP规定,FIN报文段即使不携带数据,它也要消耗一个序号。此时,客户端进入FIN-WAIT-1(终止等待1)状态,等待B确认。
- 服务器收到连接释放报文段后发出确认,ACK=1(ACK=1时,ack才有效),ack=u+1,seq=v,V是服务器之前传送过的数据的最后一个字节的序号+1,此时服务器进入CLOSE-WAIT(关闭等待)状态
此时客户端进入FIN-WAIT-2(终止等待2)状态,等待B发出连接释放报文 - 若服务器已经没有要向客户端发出的数据,应用进程就通知TCP释放连接。FIN=1,ACK=1,ack=u+1,seq=w,seq之所以为w,是因为B可能还有一些数据发送到了给A,此时服务器进入LAST-ACK(最后确认状态)。
- 客户端收到服务器段的连接释放报文后,必须要对服务器进行确认。ACK=1,ack=w+1,seq=u+1客户端进入TIME—WAIT(时间等待)状态,然后在进入CLOSE状态。
Time-Wait 的作用
- 确保最后一个确认报文能够到达。如果 B 没收到 A 发送来的确认报文,那么就会重新发送连接释放请求报文,A 等待一段时间就是为了处理这种情况的发生。
- 等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文。
问题
- 端口和套接字的意义
- 无连接UDP的特点
- 面向连接TCP的特点
- 在不可靠的网络上实现可靠传输的工作原理,停止等待协议和APQ协议
- TCP滑动窗口、流量控制、拥塞控制和连接管理。