一、TCP与IP网络模型
计算机与网络设备之间要互相通信,双方就必须基于相同的方法。比如,如何探测到通信目标,由哪一方发起通信,使用哪种语言等,这些通信规则,必须提前规定好;
不同的硬件、操作系统之间的通信,都遵循了一种规则,我们把这种规则成为协议(protocol)。
而TCP/IP模型是互联网的基础,它是一系列网络协议总称。这些协议可以划分为四层:
- 链路层:负责封装和解封装IP报文,发送和接收ARP、RARP报文等;
- 网络层:负责路由,把分组报文发送给目标网络或主机;
- 传输层:负责对报文进行分组和重组,并以TCP或UDP协议格式封装报文;
- 应用层:负责向用户提供应用程序,比如HTTP、FTP等;
在网络体系结构中,网络通信的建立必须在通信双方的对等层进行,不能交错进行;
在整个数据传输过程中,数据在发送端时,经过各层时都要附加上相应层的协议头和协议尾(仅数据链路层需要封住协议尾),也就是对数据进行协议封装,以标识对应层所用的通信协议;
二、UDP
UDP全称用户数据报协议,在网络层,它与TCP协议一样用于处理数据包,是一种无连接的协议;
UDP处在OSI模型中的传输层;
UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点。也就是说,当报文发送之后,是无法得知其是否完整到达
特点:
1. 面向无连接
UDP发送数据前,不会通过握手建立连接(TCP需要),想发数据就发数据,只是当做一个数据的搬用工,不会对数据进行任何的拆分和拼接操作;
- 在发送端,应用层将数据传递给传输层的UDP协议,UDP只会给数据增加一个协议头(标识是UDP),然后就传递给网络层
- 在接收端,网络层将数据传递给传输层,UDP只去掉了IP报文头,就传递给应用层了,不会做任何拼接操作;
2. 有单播、多播、广播功能
UDP不止支持一对一的传输方式,同样支持一对多,多对一的方式;
3. UDP是面向报文的
发送方的UDP对应用程序传下来的报文,在添加协议头后,就交给IP层(网络层);
UDP对应用层的报文,既不合并,也不拆分,而是保留这些报文的辩解
因此,应用程序必须选择合适大小的报文;
4. 不可靠性
- 首先体现在无连接上,通信都不需要建立连接,想发就发;
- 并且受到什么数据就传递什么数据,不会备份数据,发送数据也不关心对方有没有受到;
- 网络环境时好时坏,但是UDP没有拥塞控制,一直会以恒定的数据发送数据,即使网络条件不好,也不会对发送速率进行调整,这样在网络不好的情况下,可能会导致丢包;
5. 头部开销小,传输报文是很高效的;
UDP头部包含以下数据:
- 两个十六位的端口号,分别为源端口和目标端口
- 整个数据报文的长度
- 整个数据报文的校验和(IPv4可选字段),该字段用于发现头部信息和数据中的错误;
因此UDP的头部开销小,只有八个字节,相比TCP至少有二十个字节,在传输数据报文是高效的;
三、TCP
当一台计算结想要与另一台计算机通讯时,两台计算机之间的通信需要畅通而且可靠,这样才能保证收发数据的准确;
例如:当你想查看电子邮件时,希望完整且按顺序查看网页,而不丢失任何内容;当你下载文件时,希望获得完整的文件,而不是文件的一部分。这是就用到了TCP;
TCP协议全称传输控制协议,是一种面向连接的、可靠地、基于字节流的传输层通信协议,由IETF的RFC793定义。
TCP是面向连接的、可靠的流协议;
1. TCP连接过程
三次握手
- 第一次:客户端向服务端发送连接请求报文段,该报文段中包含自身的数据通讯初始序号,请求发送后,客户端便进入
SYN-SENT
状态; - 第二次:服务端收到连接请求报文段后,如果同意连接,则会发送一个应答,该应答中也会包含自身的数据通讯初始序号,发送完成后便进入
SYN-RECEIVE
状态。 - 第三次:当客户端收到连接同意的应答后,还需要向服务端发送一个确认报文,客户端发完这个报文后便进入
ESTABLISHED
状态,服务端收到这个应答后,也进入ESTABLISHED
状态,此时连接建立成功。
2. TCP断开连接过程
四次握手
- 第一次:当客户端认为数据发送完成, 则需要向服务端发送释放请求
- 第二次:服务端收到释放请求时,会告诉应用层要释放TCP连接,然后会发送ACK包,并进入
CLOSE_WAIT
;此时表明客户端到服务端的连接已经释放,服务端不会再接受客户端的数据了。 - 第三次:服务端如果此时还有没发完的数据,则会继续发送;发送完毕后,会向客户端发送连接释放请求,然后服务端进入
LAST-ACK
状态; - 第四次:客户端收到释放请求后,向服务端发送确认应答, 此时客户端进入了
TIME-WAIT
,这个状态会持续2MSL(最大段生存期,指报文段在网络中生存时间,超时会被抛弃)时间,若该时间段内没有服务端的重发请求的话,就进入CLOSED
状态;当服务端收到确认应答后,也进入CLOSED
状态;
3. TCP协议的特点
- 面向连接
指发送数据之前必须在两端建立连接,建立连接的方法是“三次握手”,这样能建立可靠的连接 - 仅支持单播传输
每条TCP连接只能有两个端点,只能进行点对点的数据传输,不支持多播和广播传输方式; - 面向字节流
TCP不像UDP那样一个个报文独立地传输,而是在不保留报文边界的情况下,以字节流方式进行传输; - 可靠传输
TCP为了报站报文传输的可靠性,就给每一个包一个序号,同时序号也保证了传送到接收到实体的包的按序接受。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK),如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传; - 提供拥塞控制
当网络出现拥塞的时候,TCP能投减小往网络注入数据的速率和数量,缓解拥塞 - TCP提供双工通信
TCP允许通信双方的应用程序在任何时候都能发送数据,因为TCP连接的两端都设有缓存,用来临时存放双向通信的数据。
四、TCP和UDP比较
UDP | TCP | |
---|---|---|
是否连接 | 无连接 | 面向连接 |
是否可靠 | 不可靠传输,不使用流量控制和拥塞控制 | 可靠传输,使用流量控制和拥塞控制 |
连接对象个数 | 支持一对一,一对多,多对一和多对多交互通信 | 只能是一对一通信 |
传输方式 | 面向报文 | 面向字节流 |
首部开销 | 首部开销小,仅8字节 | 首部最小20字节,最大60字节 |
适用场景 | 适用于实时应用(IP电话、视频会议、直播等) | 适用于要求可靠传输的应用,例如文件传输 |
网友评论