一、概述
在计算机的时代里,我们都觉得很神奇,为什么另一端的信息可以实时的发送到我们这一端,我们常说地球村,地球那么大,为什么说它是个村呢?原因很简单,因为互联网,互联网把我们大家联系在一起。 说到互联网,我们大家都不陌生,那互联网到底是什么呢?互联网通俗的;来说就是网络的网络。我们通过网络联系在一起,通过网络实现各种信息、媒体传递。“没有规矩,不成方圆!”那这么多的网络想要联系起来,没有一套“规矩”也是不行的,所以,在互联网的世界里,它也要遵循一种网络协议,也就是所说的TCP/IP协议。
二、网络分层模型
为了简化网络各层的操作,提供标准接口便于实现和维护。我们采用网络分层,分层后的网络,每一层都是独立的,各不关心。同时可以使用最合适的技术来实现,我们只需要保证提供的功能以及暴露的接口规则有没有改变;我们在处理网络问题的时候也比较方便,容易操作。 IOS组织定义了一个计算机互联的标准分层模型。 互联网实际使用的是TCP/IP模型是OSI七层网络模型的简化版:
三、TCP & UDP
在网络模型中,我们一般关心的是应用层和传输层,而我们要讨论的TCP与UDP就在传输层。接下来我们详细讨论两个协议的优缺点:
一、TCP
一、结构格式
- TCP(Transmission Control Protocol)协议:传输控制协议,提供面向连接、可靠的数据服务,TCP主要提供完整性服务。
- 每一条TCP连接只能有两个端点(服务器、客户端),所以每一条TCP来连接都是点对点的。
- TCP面向的是字节流。
- TCP具备“可靠性传输”、“流量控制”、“拥塞控制”等功能。
TCP报文段包括TCP首部和TCP数据部分: TCP协议首部格式: TCP首部包括20字节的固定首部 + 长度可变的其他选项。 如图所示: 源端口和目的端口(4个字节) 该部分表示的是发送方端口和接收方端口。
序号(4个字节) 序号字段表示的是本报文段所发送的数据的第一个字节的序号,代表每次数据发送的位置。每发送一次数据,就累加一次该数据字节数的大小。 确认号(4个字节) 期望收到对方的下一个报文数据的第一个字节的序号。 数据偏移(4个字节) 数据部分距离报文首部的偏移量。报文部分最大60个字节,也就是说数据偏移量最大为40字节。 控制位(8位) 用于传输过程中,传递控制标志位。 窗口 窗口值作为接收方让发送方设置其发送窗口的依据,单位是字节。(因为接收方的数据缓存空间有限)
二、建立连接与释放连接
TCP既然是面向连接的,那它就有连接的过程: 三次握手:
- 第一次握手:客户算先向服务器发送一个同步数据包,数据包的TCP首部内容需要包括:同步SYN=1,确认ACK=0。客户端由close变为syn-sent状态。
- 第二次握手:服务器收到客户端发送的一个数据包后,若同意连接,则返回同步SYN=1,确认ACK=1。服务器由listen变为syn-rcvd状态。
- 第三次握手:客户端收到服务器的确认后,再给服务器发送一个数据包,TCP首部包括:同步SYN=0,确认ACK=1。客户端最后变为estab-lished。
四次挥手: 第一次挥手:客户端向服务器发送释放连接的请求报文,并停止发送数据,TCP首部包括:终止FIN=1,确认ACK=0。 第二次挥手:服务器收到客户端的释放连接之后,给客户端发送确认报文,但此时服务器端的报文数据还没有发送完,继续发送,TCP首部包括:FIN=0,ACK=1。 第三次挥手:服务器已经将数据全部发送完毕,其应用程序就向客户端发送报文,TCP首部包括:ACK=1,FIN=1. 第四次挥手:客户端收到服务器的连接释放报文后,向服务器发送确认报文,TCP首部包括:确认ACK=1,终止FIN=0。
三、重传机制
**重传超时:**重传超时是指当发送方发送了数据后,在规定的时间内没有得到应答,发送端就进行超时重传。 超时重传: 超时重传是TCP协议重传机制的一种,再重发超时的时间间隔内,没有等到确认应答,发送端就可以认为丢包,需要重传。有两种情况:一是发送时的丢包,二是响应时的丢包。 快速重传当接收到三次同样的ACK时,就会触发重发机制。但是这样存在一个弊端:在重传的时候,不知道是重传之前的一个还是重传所有的。 ASCK方法为了解决快速重传出现的问题,有了SACK方法,这种方式就是在TCP首部字段里加一个SACK。他是可以将缓存的地图发送给发送方,这样发送方就可以知道那些数据收到了哪些没收到,只重传丢失的数据。
四、窗口
TCP协议通过滑动窗口的机制解决了流量控制和乱序重排的问题。 窗口滑动: 客户端向服务器发送请求数据报文。 服务器收到请求报文后,发送确认报文和x字节的数据,窗口减少为窗口大小-x,指针向右移动x个。 客户端收到x字节后,窗口右移。 服务器再次发送窗口大小-x字节数据,窗口耗尽,服务器无法继续发送数据。 客户端收到数据后,窗口右移。 服务器收到确认报文后,指针后移,窗口增大到初始大小。 拥塞控制有四个算法:慢开始、拥塞避免,快重传、快恢复。 慢开始 在不知道网络的情况下,当达到一个门限值前,我们执行的是慢开始,令cwnd=1,发送方只能发送一个,之后就指数增长。 拥塞避免 当达到门限值时,按照加数增长。如果出现了超时,则将门限值(ssthresh)= cwnd/2,然后开始执行快开始。 快重传 在接受方,当收到三个相同的ACK时,就立即重传对方尚未收到的报文段。 快恢复 当超时恢复后,不执行慢开始,而执行快恢复(线性增大)。
五、可靠性传输
TCP通过校验和、序列号、确认应答、超时重发、高速重发、连接管理、流量控制、窗口控制、拥塞控制和ARQ协议来保证可靠性传输。
二、UDP
UDP(User Datagram Protocol)协议:用户数据包协议,提供无连接、尽最大努力的数据传输服务(不保证数据传输的可靠性),UDP主要提供及时性服务。 UDP协议使用的场景:
- 包总量较少的通信
- 视频、音频等多媒体通信
- 限定于LAN等特定网络中的应用通信
- 广播通信
UDP协议的首部格式: UDP首部没有序列字段,因为UDP协议只需要传输一个数据包,不需要序号。 首部字段有8个字节,由4个字段组成:源端口、目的端口、长度和校验和。
|