网络知识之TCP、UDP

网络知识之TCP、UDP

一、基础知识

1、数据的封装

当高层发送了应用数据后(比如:图中用QQ发送了一个Hello的消息),首先就会到达传输层,传输层会给应用层数据添加TCP/UDP头,传输层会判断应用层的这个数据是从哪个应用软件过来的,即:找到对应的端口号,因此在TCP/UDP头中是包含源端口与目的端口的信息的。例如:发送的是QQ消息,那么源端口就是发送方的进程端口,目的端口就是QQ服务器的对应端口(因为一般需要走QQ服务器,然后再到达接收方),因此传输层完成的是进程到进程之间的通信。(保证是同一个进程之间的通信,不会出现发送QQ消息,结果接收方在微信收到的情况)

image-20230619114427182

注意:

  • 端口号是属于应用层的,只有应用层协议才有端口号!
  • 源端口号和目的端口号不一定是相同的。比如我们去访问网页,正常就是使用80端口号的Http协议,但并不是指源端口号和目的端口号都是80,而是指目的端口一定是80,源端口号是大于1024的随机端口(因为源端口号是源主机动态分配的,其值不小于1024),即:发送方需要什么服务,目的端口号才是服务(协议)对应的端口号,源端口只不过是取一个随机的端口号去和这个目的端口号形成TCP/UDP连接。(例如,下图中应用层协议是Http,代表目的端口号一定为80,源端口号是随机的)

image-20230619125256595

2、各层协议及其依赖关系

国际标准组织定义了应用层的各个协议与TCP、UDP之间的依赖关系,比如应用层采用的ftp协议,那么当ftp数据到达传输层时,究竟是加TCP头还是加UDP头呢,这个标准就已经被定义好了,具体的依赖关系如下图所示,根据关系图我们可以知道:ftp数据到达传输层时,会选择使用TCP协议。

image-20230619123419495

二、TCP协议和UDP协议

1、TCP协议

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。其主要的职责是:(1)实现主机之间进程到进程之间的通信(最主要)(2)保证可靠的数据传输。

2、UDP协议

UDP(User Datagram Protocol,用户数据报协议)是一种无连接的传输层通信协议。其主要的职责是:实现主机之间进程与进程之间的通信,但是不具备可靠性。

3、TCP和UDP协议的对比

(1)TCP可以保证可靠的数据传输,即:可以保证发送方发送的数据一定会到达接收方,因为TCP是面对连接的,意味着在数据的传输之前,需要建立连接,而且在传输的过程中还存在重传机制,故TCP是面向连接且可靠的;UDP无法保证可靠的数据传输,因为UDP是无连接的,发送过去之后,没办法保证一定能到达接收方,但UDP的传输速度要比TCP快。

(2)TCP头有20个字节,UDP头有8个字节。

TCP头部结构:

image-20230619142627107

UDP头部结构:

image-20230619142722545

TCP可以保证可靠的数据传输,

TCP协议能保证Hello这个数据一定能够到达对方,但UDP没办法保证。UDP的传输速度比较快,TCP的传输速度比较慢。

UDP头只有8个字节,TCP头有20个字节。

设备能完成哪一层相应的功能,它就在哪一层。

三、TCP三次握手与四次挥手

1、TCP三次握手

image-20230619143021734

1、客户端发送建立TCP连接的请求报文,其中报文中包含seq序列号,是由发送端随机生成的,并且将报文中的SYN字段置为1,表示需要建立TCP连接。(SYN=1,seq=x,x为随机生成数值);

2、服务端回复客户端发送的TCP连接请求报文,其中包含seq序列号,是由回复端随机生成的,并且将SYN置为1,而且会产生ACK字段,ACK字段数值是在客户端发送过来的序列号seq的基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP建立请求已得到验证。(SYN=1,ACK=x+1,seq=y,y为随机生成数值)这里的ack加1可以理解为是确认和谁建立连接;

3、客户端收到服务端发送的TCP建立验证请求后,会使自己的序列号加1表示,并且再次回复ACK验证请求,在服务端发过来的seq上加1进行回复。(SYN=1,ACK=y+1,seq=x+1)。

2、UDP四次挥手

image-20230619143551377

1、客户端发送断开TCP连接请求的报文,其中报文中包含seq序列号,是由发送端随机生成的,并且还将报文中的FIN字段置为1,表示需要断开TCP连接。(FIN=1,seq=x,x由客户端随机生成);

2、服务端会回复客户端发送的TCP断开请求报文,其包含seq序列号,是由回复端随机生成的,而且会产生ACK字段,ACK字段数值是在客户端发过来的seq序列号基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP断开请求已经得到验证。(FIN=1,ACK=x+1,seq=y,y由服务端随机生成);

3、服务端在回复完客户端的TCP断开请求后,不会马上进行TCP连接的断开,服务端会先确保断开前,所有传输到A的数据是否已经传输完毕,一旦确认传输数据完毕,就会将回复报文的FIN字段置1,并且产生随机seq序列号。(FIN=1,ACK=x+1,seq=z,z由服务端随机生成);

4、客户端收到服务端的TCP断开请求后,会回复服务端的断开请求,包含随机生成的seq字段和ACK字段,ACK字段会在服务端的TCP断开请求的seq基础上加1,从而完成服务端请求的验证回复。(FIN=1,ACK=z+1,seq=h,h为客户端随机生成)
至此TCP断开的4次挥手过程完毕。

posted @ 2023-06-19 15:00  6小1  阅读(39)  评论(0编辑  收藏  举报