TCP与UDP
Posted 大大控
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP与UDP相关的知识,希望对你有一定的参考价值。
网络知识学习篇,恶补网络知识。
讲主题之前,先补习一下基础知识。
OSI网络模型
OSI模型,Open System Interconnection 开放式通信系统互联参考模型,是国际标准化组织ISO提出的一个试图使全世界计算机互联为网络的标准框架,简称OSI。
OSI网络模型按照功能划分了七层,由下往上分别是物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。
OSI模型是最经典的网络模型,但是结构过于复杂,我们常用的是TCP/IP模型。
TCP/IP模型
TCP/IP是一个协议族,里面有很多的协议,之所以叫CP/IP是因为TCP和IP是里面两个很重要的协议,就这样命名了。TCP/IP现在已经成为了Internet上通信的工业标准。
TCP/IP总共分为四层,从下往上分别是网络接口层,网络层,传输层和应用层。
应用层:各种服务和应用程序通过该层利用网络。常用协议:HTTP超文本传输协议,FTP文本传输协议,SMTP简单邮件传输协议Telnet远程登录,SNMP简单网络管理协议,DNS域名系统。
传输层:确认数据传输并进行纠错处理。常用协议便是今天的主角:TCP传输控制协议和UDP用户数据报协议。
网络层:负责数据传输、路径及地址选择。常用协议有IP Internet协议,ICMPI Internet控制信息协议,ARP地址解析协议,RARP方向地址解析协议。
最后是网络接口层:针对不同的物理网络连接形式的协议。常用协议比如Ethernet以太网。
咳咳,敲黑板!
TCP
TCP 传输控制协议,这是一个面向连接的协议,也就是说在收发数居前,必须和对方建立一个可靠的连接,这也就到了面试中常常问到的一个点,三次握手。
说三次握手之前先来一波名次解释,下面将会出现。
ACK:TCP报头的控制位之一,作用是对数据进行确认,确认由目的端发回来告诉发送端这个序列号之前的数据段收到了,ACK位置为1标识有效,为0确认无效,无效将会要求重发数据以保证数据的完整性。
SYN:同步序列号,建立连接的时候使用,发送端将SYN位置置为1向目的端发送。
FIN:当发送完成发送,TCP完成数据传输以后需要断开连接时,提出断开的一方将FIN置为1.
三次握手过程:
1、主机A向主机B发送一个一个数据段,这个数据段中带有同步序列号SYN的标志位,向主机B请求连接,说的通俗一点这一步就相当于A告诉B,我要发数据了,行不?你能拿哪个序列号最为起始数据段来回应我啊?
2、主机B收到了A发送的数据段,用一个带有确认应答ACK和同步序列号SYN标志位的数据段响应主机A,这一步通俗讲就是B收到A的问话后回复。我收到了,你可以发数据,你要用那个序列号作为其实数据段来回应我?
3、主机A收到了主机B的响应,再发送一个带有确认应答ACK的数据段,确认已收到B的响应,这一步通俗讲就是A主机告诉B主机,我收到了你的回复,我要开始传数据了。
这样三次握手完成,主机A和主机B建立了连接,可以传输数据。
TCP建立连接是三次握手,而断开连接需要四次挥手。
四次挥手的过程:
1、主机A完成传输数据任务了,需要断开,就将控制位FIN置1,提出停止连接的请求。
2、主机B收到后做出响应,确认这一方向的TCP连接将关闭,也就是告诉自己的相应的应用程序对方请求关闭,将ACK置1.
3、B主机再向A主机发送断开请求,FIN置1.
4、主机A收到请求后进行确认,将ACK置1,这样AB之间双向关闭结束。
三次握手和四次挥手可以发映出TCP使用面向连接的通信方式,使得数据通信的可靠性大大提高,发送端和接收端在正式传输数居前就有了交互,为正式传输打下了基础。
UDP
UDP 用户数据报协议,是一个非连接的协议,和TCP的面向连接相对,UDP在传输数据之前,发送端和接收端不建立连接,当它想传送数据时就抓取应用程序中的数据尽可能快的将它扔出去。发送端速度只是受到应用程序的生成数据的速度,计算机的能力和带宽的限制。接收端,UDP会把每个消息段放入队列,让应用程序每次从队列中读一个消息段。
UDP的吞吐量不受拥挤算法的调整,只受软件生成数据的速度,发送端接收端机器性能还有带宽的限制。
UDP传输数据的时候不需要建立连接,不需要维持连接状态,所以对系统资源要求少,且一台服务器可以实现向多台客户机发送相同的数据。说到资源要求少,UDP信息包的标题为8字节,而TCP包头最小长度为20字节,相对来说额外开销小。
UDP不保证可靠交付,使用尽最大努力交付,所以主机不需要维持复杂的链接状态表。
前面也说到,UDP是非连接的协议,而是面向报文的。发送端应用程序交下来的报文,进行添加首部处理后就交付给IP层,不进行其他处理,不拆分要不合并,保留报文辩解,所以以UDP传输时,应用程序需要选择合适的报文大小。
我们平时测试两台电脑是否通信所说的是否PING通,用的就是UDP,发送方发送一个UDP数据报,对方主机收到数据报的话就反馈回来,那么就是能PING通。
小结
TCP和UDP的主要区别:
1、TCP面向连接,UDP面向报文。TCP是流模式,UDP是数据报模式
2、TCP需要建立连接,维持连接状态,系统资源要求更多,而UDP不需要维持双方连接状态,系统资源要求少,且可以向多台客户机同时发送数据。
3、TCP包头最小长度20字节,UDP信息报标题8字节,额外开销少。
4、TCP的连接保证了数据的可靠性,UDP不保证可靠交付。
5、TCP保证数据的顺序,UDP不保证数据顺序。
6、UDP结构更为简单。
这也只是我个人写的几点不同,还有很多不同,更有好多只是等着我们学习,大佬们多指点。
以上是关于TCP与UDP的主要内容,如果未能解决你的问题,请参考以下文章