• 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结构更为简单。

    这也只是我个人写的几点不同,还有很多不同,更有好多知识等着我们学习,大佬们多指点。

  • 相关阅读:
    安卓跑马灯
    utf-8加密用于汉字加密(避免乱码)
    设置将edittext的光标到最后
    自定义UIProgressView,实现渐变色进度条,带动画的
    UIImageView帧动画,包含暂停和继续功能
    UIImageView关键帧动画,监听动画结束的回调
    自定义UICollectionViewFlowLayout实现横向滚动时,离中心点越近,item越大,离中心店越远,item越小的效果
    iOS中UIView的Pan手势和UIScrollView滚动手势的冲突解决方案
    使用Cocoapods创建私有库的流程
    git代码仓库迁移的步骤
  • 原文地址:https://www.cnblogs.com/huangbw/p/7594441.html
Copyright © 2020-2023  润新知