网络基础TCPUDP协议
Posted Ai网事
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络基础TCPUDP协议相关的知识,希望对你有一定的参考价值。
说起TCP、UDP协议,一般都会先讲TCP、UDP协议的区别。而一讲到TCP、UDP协议的区别,我们一般都会像背书一样的说到:TCP协议是面向连接的,UDP协议是无连接的。那么再往下,为什么TCP协议是面向连接的?UDP就是无连接的?TCP、UDP协议哪种比较好?TCP、UDP协议报文的结构,工作的原理是怎样的呢?
会了不难,难了不会,关键是有时会了,过几天又不会了。
为啥?
忘记了!
所以,温故知新,今天就一起温故一下吧。
TCP协议是面向连接的,在数据传输之前,TCP先要在发送方与接收方之间建立一条虚拟连接,然后进行数据传输,数据传输完成以后,TCP关闭这条虚拟连接。
TCP协议有五个服务特征:全双工、点对点、面向字节流、支持数据缓冲和立即发送、提供紧急数据功能。
TCP连接有三个阶段:连接建立、数据传输、连接拆除。
TCP协议的核心就是重传和窗口机制。重传很好理解,就是在指定时间内,如果没有收到接收端返回的收到确认,那么发送端就会进行重发。
窗口分为接受端窗口和发送端窗口,发送端窗口又叫做拥塞窗口。这两者都可以控制传输数据大小,避免拥塞。
先看下上面这张TCP头部报文示意图。
最上面一行,画的是一把尺子,尺子的刻度从00到31。这把尺子不是TCP头部的结构,而是画上去用来丈量TCP头部各部分长度的。这把尺子的单位是位(bit),也就是我们说的比特。因为8位=1个字节,所以每一行从左到右的大小是32bit,4个Byte。TCP头部前5行叫做固定部分,最后一行TCP Options叫做可选项,长度是不固定的,其大小在0-40字节之间变化。所以一个TCP 头部有20字节的固定大小,也就是说TCP头部最小为20字节,最大为60字节。
总体看完以后,再逐一研究每一个字段的功能。
Source port:源端口号字段,大小为16位,2个字节。
Destination port:目的端口号字段,大小也是16位,2个字节。
源端口、目的端口都是OSI七层模型中传输层的概念,端口其实就是主机不同进程的一个标识。
Sequence Number:序列号,大小为32位,4个字节。因为IP数据包是不可靠的,在传输过程中会出现丢失或者乱序的情况。而TCP报文是封装在IP包头内的,所以接受方在收到TCP报文以后,要根据Sequence Number对TCP报文进行排序重组。
Acknowledgement Number:确认号,大小为32位,4个字节。是接收方对发送方发送过来的数据的确认响应,告知发送方报文已收到,可以发送下一个分组了。如果接收方不回复ACK,那么发送方在计时超时后就会重新发送之前的分组报文。
HL:head length,这个字段本身的大小是4位,用它来表示TCP报头的大小。报头示意图中每一行是4字节,而HL其实是表示报头一共有多少行的。4位可以表示最大的10进制数值是15(8+4+2+1),那么报头最大就会有15行,即60字节。(尽量理解吧,抓包软件中会直接显示数据报头大小的)
Flags:12位,包含Reserved、Nonce、CWR、ECN、Urgent、ACK、Push、Reset、Syn、Fin字段。
Reserved:保留位,3位。它的作用就是没作用,只做保留。有的人将Nonce、CWR、ECN一起划分到Reserved中,那么reserved占6位,还有的人单独将Nonce划分到Reserved中,那么Reserved占4位,都不准确,我们看一下wirshark抓包情况。
从数据包看Reserved占用3位,其余字段均占用1位,并且都包含在Flags中。
Nonce:用于防止TCP发送者的数据包标记被恶意或者意外改动。
CWR:回传拥塞指示,即指示发送者应减少信息发送量。
ECN-Echo:确认接收到了拥塞指示回应。
以上三位(ECN)是可选项,当ECN被使用时,必须在连接建立时,通过SYN和SYN-ACK段中包含适当选项来协商。
Urgent:Urgent pointer是否有效的标记位,当Urgent为1时,Urgent pointer有效,当Urgent为0时,Urgent pointer无效。(稍后介绍Urgent pointer以及紧急数据的机制)
ACK:确认标志位,置1有效,作用为接收方告知发送方数据已被正常接收。
PUSH:推送标志位,置1有效,正常发送端发送给接收端的数据会被放在接收端的数据缓冲区中,当数据缓冲区满了以后,将数据交给应用层处理。当一段分组数据的PUSH位被发送端置1时,接收端接收后会直接将这段分组数据交由应用层处理,而不是先放到数据缓冲区内。
Reset:连接复位请求,用来复位TCP连接,置1有效。
SYN:TCP建立连接时的握手信号,置1有效。
FIN:双方数据传输完成,发送FIN连接被断开。
Window:接收窗口,大小为16位,2个字节。用来告知发送端自己能接收的数据量,从而达到流量控制的目的。接收端win的大小一定要大于发送端len的大小。
Checksum:TCP校验,大小为16位,用来校验TCP数据的有效性。
Urgent Pointer:与Urgent字段配合使用,当Urgent置1时有效。一般情况下,数据被接收端接收以后,先放在缓存中,待重组后再交给应用层进行处理。而如果是紧急数据,则不进行缓存而直接交给应用层进行处理。Urgent Pointer 就是用来标记哪部分数据属于紧急数据。其紧急数据部分=sequence number+urgent pointer。
TCP options:选项字段,虽然在示意图中只画了一行,但其大小在0-40字节之间,它设定了接收方能够接受的TCP最大载荷能力。缺省为536字节。
UDP相对于TCP,只在IP数据报服务至上增加了很少一点功能,即端口和差错检测,所以UDP的首部开销很小,只有8个字节。
UDP虽然没有TCP有那么多机制对传输服务进行保障,但是UDP却有这非常高效的传输效率。UDP传输之前不需要建立连接,既不保证可靠交付,也没有拥塞控制。因为UDP传输效率高,又支持一对一、一对多、多对一、多对多的交互通信,所以非常适合多媒体的通信要求。
基于TCP和UDP的区别,所以场景要求不同,应用不同。例如同样是文件传输,如果网络质量不能保证,我们会优先选择FTP协议来传输文件。但如果网络质量可靠,我们可能会选择TFTP协议来进行文件传输。另外像一些即时通信的软件,都是采用的UDP协议。而像邮件、HTTP之类的应用则采用TCP协议。
好了,先聊这么多,聊的不好多指教。
如果觉得作者辛苦,请点击一下下方的广告
以上是关于网络基础TCPUDP协议的主要内容,如果未能解决你的问题,请参考以下文章