网络——UDP协议,TCP协议浅析


一、传输层

    TCP和UDP都是传输层协议,传输层是OSI模型中的第四层,实现端对端的数据传输,该层是两台计算机经过网络进行数据通信时,第一个端到端的层次,具有缓冲作用。传输层是唯一负责总体数据传输和数据控制的一层,它对会话层等高三层提供可靠的传输服务,对网络层提供可靠的目的地点信息。

      传输层在终端用户之间提供透明传输,向上层提供可靠的数据传输服务。

    端对端的网络连接,比如你要将数据从A发送到E,其中可能经过A->B->C->D->E,单数对于传输层来讲他们并不知道B,C,D,的存在,只认为报文是从A到E的。这就叫做端对端。

二、UDP协议

    UDP协议的全称是用户数据报协议,在网络中与TCP协议一样用于处理数据包,但是又不同于TCP,他是一种无连接,不可靠的协议,在OSI模型中处于第四层——传输层,处于IP协议的上一层,UDP有不提供数据包分组,组装和部队数据包进行排序的缺点,也就是说,当报文发送之后,无法得知其是否安全完整到达,UDP用来支持那些需要在计算机之间传输数据的网络应用

UDP的特点:

1.传输层协议

2.无连接

3.不可靠传输

4.面向数据报

无连接:
UDP协议在传输数据报时是不建立连接的,这个连接是指通信双方不需要建立连接,只要知晓了对方的IP和端口号,并不需要向其发送连接请求,就可以直接发送报文
不可靠:

UDP协议中没有确认机制,没有超时重传机制,报文的传输过程怎么样,丢没丢,它都不关心,即使报文丢失了,他也不会相上层发送错误信息

面向数据报:

UDP是面向数据报的协议, 它不能灵活的控制读写数据的次数和数量,应用层交给UDP多长的报文,UDP只能原样发送,既不会拆分,也不会合并。

假如UDP传输100字节的数据,发送端调用一次sendto,一次性发送100个字节,那么接受端必须调用一次recvfrom接收100个字节,而不能循环调用10次recvfrom,每次接收10 字节

UDP协议段格式:
1.16位源端口号,16位目的端口号

2.16位UDP长度,表示整个数据报(UDP首部+UDP数据)的最大长度。UDP所能传输的数据最大长度是64k(包括UDP首部),64K在当今互联网环境下,是一个非常小的数字。如果我i吗需要传输的数据超过64K,就需要在应用层手动分包,多次发送,并在接收端手动拼接。

3.16位校验和,如果出错,数据报直接丢弃。传输过程中数据报怎样UDP并不关心,但是UDP不会发送以恶错误的数据给对方。校验和就是干这个的

4.UDP的首部固定8字节,方便有效分离报头信息和数据

5.为什么没有IP地址?

UDP是传输层协议,在传输层看来,它只是在和对方主机的传输层进行通信,并不知道下层的通信原理及过程,而IP地址在下一层网络层中的IP协议中。通过IP地址寻访目标主机是网络层干的事,传输层并不关心,UDP只负责将有效的载荷通过目的端口号交付给目标进程

UDP的缓冲区:
1.UDP没有真正意义上的发送缓冲区,调用sendto后会直接将数据交给内核,由内核来交付给网络层相关协议进行之后的传输工作

2.UDP由接收缓冲区,但是接受到数据报后,不能保证他们是按序到达的,如果缓冲区满了,再到达的数据报就会被丢弃

3.UDP数据报既能写,又能读,所以是全双工的(可以同时读写)

4.DUP既然不可靠,为什么还要用?

因为UDP的速度够快,网络中存在一些场景是不追求可靠性的,而追求连接的速度。也就是实时性。比如视频通话

三、TCP协议

TCP协议全称“传输控制协议”。要对数据的传输进行一个详细的控制。TCP协议是一种面向连接,可靠的,基于字节流的传输层协议

TCP的特点:
1.面向连接:通信双方主机要建立连接
2.可靠传输:保证不丢包,不会重复(由确认应答,超时重传等机制确保)
3.基于字节流:数据于数据之间无边界(可能会导致粘包问题)
4.全双工
5.缓冲存储:不会立即发送,选择合适的机会
6.流量控制:窗口机制
TCP协议段格式


1.16位源端口号,16位目的端口号:从哪来,到哪去

2.32位序号:用于标识每个数据报,使目的主机可确认已收到指定报文段中的数据。源主机发送多个报文段时,将其编号,但是发送的顺序并不一定,到达目的主机后,目的主机根据这些编号将这些报文段按顺序排列。

3.32位确认应答号:目的主机返回确认号,使源主机知道某个或每个报文段被接受。如果ACK被设置为1,则该字段有效,确认号等于顺序接收的最后一个报文段的序号+1,(即下次目的主机希望收到的报文段序号值)

4.4位TCP报头长度,表示TCP头部有多少个32位bit(有多少个4字节),所以TCP头部最大长度是15*4=60

5.保留位:全是0 

6.6位标志位:

URG:紧急指针是否有效,置1,有效,表明此数据报中有需要紧急处理的数据,应尽快传送

ACK:仅当ACK=1时,确认号有效,TCP规定,建立连接后所有传送的报文段ACK都必须置1

PSH:用来提示接受端应用程序立刻从TCP缓冲区把数据读走

RST:置1时重新建立连接,如果接收到RST位时,通常发送了某种错误(我们把携带RST标识的报文段成为复位报文段

SYN:请求建立连接。仅在三次握手建立连接时有效。(我们把携带SYN标识的报文段成为同步报文段)

FIN:用来释放一个连接,当FIN=1时,通知对方,本端要关闭了。(结束报文段)

7.16位窗口大小:进行流量控制,这个值是期望一次接收的字节数,即接收窗口的大小

8.16位校验和:发送端填充,CRC校验,接受端验证不通过,则认为数据有问题,此处的校验和不光包含TCP首部,还包含TCP数据

9.16位紧急指针:标识哪部分数据是紧急数据,仅在URG=1时有效。它指出本报文段内紧急数据的字节数(紧急数据结束后面是普通数据),即指出了紧急指针的末尾在报文段中的位置。(注:即使窗口为0时,也可以发送紧急数据)

例如:报文段的序号是1000,前8个字节都是紧急指针,    那么该位就是8

8.40字节头部选项

猜你喜欢

转载自blog.csdn.net/audience_fzn/article/details/80758282
今日推荐