TCP与UDP
TCP/IP协议中有两个具有代表性的传输层协议,分别是TCP和UDP
传输层
传输层通过端口号识别自己所传输的数据部分究竟应该发给哪个应用
TCP/IP协议的众多应用协议大多以客户端/服务端的形式运行,服务端程序在UNIX系统中叫做守护进程,如HTTP的服务端程序是httpd,而ssh的服务吨程序是sshd。确认一个请求是发送给哪个服务端,可以通过所收到的数据包的目标端口号识别。当收到TCP的建立连接请求时,如果目标端口为22,则转给sshd,如果为80则转给httpd,随后这些守护进程会对该链接上的通信传输进行管理
TCP 和 UDP
在TCP/IP中能实现传输层功能的、具有代表性的协议是TCP和UDP+
- TCP是面向连接的、可靠的流协议。流指的是不间断的数据结构,可以想象成排水管道中的水流。TCP为提供可靠性传输,实行顺序控制、重发控制机制,此外还具有流控制、拥塞控制等众多功能
- UDP是不具有可靠性的数据报协议,在UDP的情况下不能保证消息一定到达,需要根据应用需要进行重发管理
TCP和UDP区分
TCP用于在传输层需要实现可靠传输的情况,TCP是面向连接并且具有顺序控制、重发控制等机制,可以为应用提供可靠传输。
UDP主要用于对高速传输和实时性有较高要求的通信
端口号
数据链路中的IP中的地址分别是MAC地址和IP地址,前者识别同一链路中不同计算机,后者用来识别TCP/IP网络中互联的主机和路由器。在传输层中的地址概念就是端口号,端口号用来识别同一计算机中进行通信的不同应用程序。
UDP
UDP(User Datagram Protocal),UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务
即使出现网络拥堵的情况,UDP也无法进行流量控制等避免网络拥塞的行为,此外,传输途中即使出现丢包,UDP也不负责重发,也不包含顺序纠正的功能。
由于UDP面向无连接,并且本身处理简单高效,常用于以下几个方面:
- 包总量较少的通信(DNS、SNMP等)
- 视频、音频等多媒体通信(即时通信)
- 广播通信
TCP
TCP是对传输、发送、通信进行控制的协议
TCP可以进行丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。根据TCP的机制,在IP这种无连接的网络上也能实现高可靠性的通信
连接
是指各种设备、线路或网络中进行通信的两个应用为了相互传递信息而专有的通信线路。一旦建立连接,程序只使用这个线路发送和接受数据,可以保障信息的传输。
TCP的特点
通过校验和、序列号、确认应答、重发控制、连接管理以及窗口控制灯机制实现可靠传输
通过序列与确认应答提高可靠性
在TCP中,当主机接收到数据时,会返回一个已收到消息的通知,这个通知就是确认应答(ACK)
TCP通过确认应答实现可靠的数据传输,当发送端发出数据后会等待对端的确认应答,如果有确认应答,说明数据已经成功到达
在一定时间内没有等到确认应答,可以认为数据已经丢失,并进行重发。因此,即使产生了丢包,仍然能保证数据到达对端
当源主机重发数据后确认应答才到达的情况下,目标主机会反复收到相同数据,为了提供可靠的传输,必须放弃重复的数据包,因此引入了序列号机制。序列号是按顺序给发送数据的每个字节都标上号码的编号,接收端查询接收数据TCP首部的序列号和数据的长度,确认下一步应该接受的序列号。通过序列号和确认应答可以实现可靠传输。
重发超时
重发超时是指在重发数据之前,等待确认应答到来的时间间隔,如果超过这个时间未收到ACK,发送端将进行数据重发。
数据重发之后若还是收不到ACK则会再次发送,此时等待确认的时间会指数增长
当重发到达一定次数时,如果依然没有ACK返回,则会认为网络发生异常,强制关闭连接
TCP的连接管理
TCP提供面向有连接的通信传输,在数据通信之前通过三次握手来建立连接。
建立连接
客户端通过TCP首部发送一个SYN包作为建立连接的请求,发送后将等待服务端的确认应答,此时服务端返回确认应答,并且返回了SYN包表示请求确认连接,当客户端接受到服务端的确认应答和SYN包时,再次返回针对服务端发送的SYN的确认应答,此时连接建立成功,称为三次握手。
断开连接
客户端发送FIN请求切断连接,此时服务端可能还有没发完的数据,所以服务端先返回ACK,表示接收到请求,但是还没有准备好断开连接。此时客户端进入FIN_WAIT状态,等待服务端的FIN报文。当服务端确认数据已经发送完时,这向客户端发送FIN报文,请求关闭连接。客户端收到FIN报文,确定可以关闭连接,但是怕服务端不知道要关闭连接,所以发送ACK进入TIME_WAIT状态,如果服务端没有收到ACK(第二次FIN的确认应答)可以进行重传。服务端收到ACK后知道可以断开连接了,客户端在等待2MS后依然没收到回复,说明服务端已正常关闭,客户端随即关闭。TCP连接关闭,称为四次挥手。
利用窗口控制提高速度
TCP以段位单位发送数据,每发一个段进行一次确认应答处理。这种方式的缺点是包的往返时间越长性能越低。
TCP引入了窗口的概念,用滑动窗口的方式并行处理,确认应答不再是每个分段,而是以更大的单位进行确认,发送端在发送一个段后不需要一直等待确认应答,而是继续发送。
窗口大小是指无需等待确认应答而可以继续发送数据点的最大值,这个机制的实现使用了缓冲区,同时对多个段同时进行确认应答的功能
窗口控制和重发控制
确认应答未返回
在确认应答未能返回的情况下,数据已经到达对端,不需要进行重发。通过窗口控制,即使有少部分确认应答丢失也不会进行数据重发,可以通过下一个确认应答进行确认
报文段丢失
接受主机如果没有收到自己期望序号的数据时,会对之前收到的数据进行确认应答
在窗口比较大,又出现报文段丢失的情况下,同一个序号的确认应答将会被重复不断的返回,当发送端连续3次接到同一个确认应答时,就会将其对应的数据进行重发,这种机制称作高速重发机制。
流控制
TCP提供流控制机制让发送端根据接收端的实际接收能力控制发送的数据量。
接收端主机向发送端通知自己可以接受的数据大小,这个大小被称作窗口大小。
在TCP首部中就包含一个字段表示窗口大小,这个数值越大,网络吞吐量越高。
当接收端的缓冲区面临数据溢出时,窗口大小会随之改变。
拥塞控制
计算机网络通常处于共享环境,可能会因为其他主机之间的通信导致网络拥堵,当网络拥堵时如果突然发送较大量数据可能会导致网络瘫痪。
TCP为了防止该问题的出现使用慢启动算法对发送数据量进行控制。