网络协议栈中的Tcp与Udp

简述

关于TCP/IP协议栈,我们重点了解以下几点,tcp,upd,ip等协议的报文结构,以及四层模型之间的关系、拥塞控制、tcp和udp的区别等等
我们先来简单看看OSI模型和TCP/IP模型的区别

网络协议栈中的Tcp与Udp_第1张图片
osi与tcp-300x231.gif

OSI模型分为了7层,而TCP/IP只有4层,在现实应用中,也采用的是TCP/IP 4层模型的协议栈。从上图中,我们可以看出各层协议分布及对应关系。也可以看出应用层的部分常用协议分别对应tcp还是udp。

TCP报文结构

网络协议栈中的Tcp与Udp_第2张图片
tcp报文结构-300x228.gif

我们来简单的分析一下这个结构及部分字段的作用

端口号:

端口号可分为3大类:
(1)公认端口(Well Known Ports):从0到1023,它们紧密绑定(binding)于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如:80端口实际上总是HTTP通讯。
(2)注册端口(Registered Ports):从1024到49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。例如:许多系统处理动态端口从1024左右开始。
(3)动态和/或私有端口(Dynamic and/or Private Ports):从49152到65535。理论上,不应为服务分配这些端口。实际上,机器通常从1024起分配动态端口。但也有例外:SUN的RPC端口从32768开始。

顺序号

顺序号:4字节 顺序号是在源主机发送数据段时对数据的排列顺序,以便于接收方能按顺序接受数据,提高了数据在传输过程中的可靠性(有的数据必须按顺序传送和接受,如语音IP)

确认号

确认号就是目的主机在接受到数据后反馈给源主机的信息,告诉源主机数据已接收

窗口字段

窗口字段用来进行流量控制。
首部中的窗口字段用来将自己目前的接收缓存大小通知对方的TCP,在数据传递过程中,接收缓存会随时变化,TCP在向对方发送确认或发送数据时,都将现在的接收缓存大小写入首部的窗口字段中,发送给对方,对方收到后,所发送数据的大小不会超过窗口字段的值,从而保证了接收方缓存不会溢出。
总结就是决定后面数据报文大小的字段。

标志位信息:

URG—表明一些紧急的数据被替换
ACK—表明确认序号是有效的
PSH—表明数据应该尽快传给应用
RST—重置链接
SYN—初始化连接的同步序号
FIN—意味着发送端已经完成数据的传输

字段字节数

源端口号:2字节
目的端口: 2字节
确认号:4字节
窗口字段:2字节
标志位 6位 包头长度 4位 保留字段 6位 共 2字节
校验码 2字节 表明传输过程中报头是否被损坏
紧急指针 2字节 指向包中的第一个紧急字节
可选字段(变长) 偏移(变长) 共4字节 指定不同的TCP选项
数据(变长) 包含上层的数据信息
根据上述内容,我们可以看到除去可选字段和数据。tcp报文最小为20字节。

UDP报文结构

udp报文结构-300x76.gif

源端口号 2字节
目的端口号 2字节
UDP报文长度 2字节 所以udp报文最大为 65536
UDP校验和 2字节
数据(可变)

UDP和TCP的区别

TCP协议是有连接的,有连接的意思是开始传输实际数据之前TCP的客户端和服务器端必须通过三次握手建立连接,会话结束之后也要结束连接。而UDP是无连接的
• TCP协议保证数据按序发送,按序到达,提供超时重传来保证可靠性,但是UDP不保证按序到达,甚至不保证到达,只是努力交付,即便是按序发送的序列,也不保证按序送到。
• TCP协议所需资源多,TCP首部需20个字节(不算可选项),UDP首部字段只需8个字节。
• TCP有流量控制和拥塞控制,UDP没有,网络拥堵不会影响发送端的发送速率
• TCP是一对一的连接,而UDP则可以支持一对一,多对多,一对多的通信。
• TCP面向的是字节流的服务,UDP面向的是报文的服务。

总结

到这里我们简单的说完了tcp和udp的报文结构,下篇博文我们将详细的去解析tcp的三次握手和四次挥手。

你可能感兴趣的:(网络协议栈中的Tcp与Udp)