zoukankan      html  css  js  c++  java
  • android ------- TCP与UDP

    TCP

    TCP(Transmission Control Protocol,传输控制协议) 即传输控制协议,是一种传输层通信协议

     

    特点:面向连接、面向字节流、全双工通信、可靠

    面向连接:指的是要使用TCP传输数据,必须先建立TCP连接,传输完成后释放连接,就像打电话一样必须先拨号建立一条连接,打完后挂机释放连接。

    全双工通信:即一旦建立了TCP连接,通信双方可以在任何时候都能发送数据。

    可靠的:指的是通过TCP连接传送的数据,无差错,不丢失,不重复,并且按序到达。

    面向字节流:流,指的是流入到进程或从进程流出的字符序列。简单来说,虽然有时候要传输的数据流太大,TCP报文长度有限制,不能一次传输完,要把它分为好几个数据块,但是由于可靠性保证,接收方可以按顺序接收数据块然后重新组成分块之前的数据流,所以TCP看起来就像直接互相传输字节流一样,面向字节流。

    TCP建立连接

    必须进行三次握手:若A要与B进行连接,则必须 

     

    第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认。即A发送信息给B

    第二次握手:服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认。即B收到连接信息后向A返回确认信息

    第三次握手:客户端收到服务器的(SYN+ACK)报文段,并向服务器发送ACK报文段。即A收到确认信息后再次向B返回确认连接信息

     

    (此时,A告诉自己上层连接建立;B收到连接信息后告诉上层连接建立。)

     

    这样就完成TCP三次握手 = 一条TCP连接建立完成 = 可以开始发送数据

    为什么TCP建立连接需要三次握手?

    防止服务器端因为接收了早已失效的连接请求报文从而一直等待客户端请求,从而浪费资源。

    TCP释放连接四次握手

    现在假设A主动释放连接:(数据传输结束后,通信的双方都可释放连接),其释放TCP连接的过程如下:

    第一次握手: A发送释放信息到B;(发出去之后,A->B发送数据这条路径就断了)
    第二次握手: B收到A的释放信息之后,回复确认释放的信息:我同意你的释放连接请求
    第三次握手: B发送“请求释放连接“信息给A
    第四次握手: A收到B发送的信息后向B发送确认释放信息:我同意你的释放连接请求
     
    首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

    为什么TCP释放连接需要四次挥手?

    为了保证双方都能通知对方“需要释放连接”,即在释放连接后都无法接收或发送消息给对方

    需要明确的是:TCP是全双工模式,这意味着是双向都可以发送、接收的

    释放连接的定义是:双方都无法接收或发送消息给对方,是双向的

    当主机1发出“释放连接请求”(FIN报文段)时,只是表示主机1已经没有数据要发送 / 数据已经全部发送完毕; 


    但是,这个时候主机1还是可以接受来自主机2的数据。

    当主机2返回“确认释放连接”信息(ACK报文段)时,表示它已经知道主机1没有数据发送了 
    但此时主机2还是可以发送数据给主机1

    当主机2也发送了FIN报文段时,即告诉主机1我也没有数据要发送了 
    此时,主机1和2已经无法进行通信:主机1无法发送数据给主机2,主机2也无法发送数据给主机1,此时,TCP的连接才算释放

    UDP

    (User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!

    特点:无连接的、不可靠的、面向报文、没有拥塞控制

    无连接的:和TCP要建立连接不同,UDP传输数据不需要建立连接,就像写信,在信封写上收信人名称、地址就可以交给邮局发送了,至于能不能送到,就要看邮局的送信能力和送信过程的困难程度了。

    不可靠的:因为UDP发出去的数据包发出去就不管了,不管它会不会到达,所以很可能会出现丢包现象,使传输的数据出错。

    面向报文:数据报文,就相当于一个数据包,应用层交给UDP多大的数据包,UDP就照样发送,不会像TCP那样拆分。

    没有拥塞控制:拥塞,是指到达通信子网中某一部分的分组数量过多,使得该部分网络来不及处理,以致引起这部分乃至整个网络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿,即出现死锁现象,就像交通堵塞一样。TCP建立连接后如果发送的数据因为信道质量的原因不能到达目的地,它会不断重发,有可能导致越来越塞,所以需要一个复杂的原理来控制拥塞。而UDP就没有这个烦恼,发出去就不管了。

    TCP与UDP区别总结:

    1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
    2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保   证可靠交付
    3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
    4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
    5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
    6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

    参考资料

    https://blog.csdn.net/guyuealian/article/details/52535294

    https://blog.csdn.net/carson_ho/article/details/53366856

    https://blog.csdn.net/qq_33951180/article/details/60767876

  • 相关阅读:
    iOS 自定义UITabBarController的tabBar
    iOS 设置导航栏之二(设置导航栏的颜色、文字的颜色、左边按钮的文字及颜色)
    iOS 设置导航栏的颜色和导航栏上文字的颜色
    iOS 修改UITextField的placeholder属性的字体颜色(修改UITextField占位符字体的颜色)
    iOS TPKeyboardAvoiding自动识别键盘的高度
    iOS 获取快递物流信息(GCD异步加载)
    iOS 图片循环滚动(切片效果)
    iOS block在两个页面间的简单传值
    swift
    iOS 10 之后权限设置
  • 原文地址:https://www.cnblogs.com/zhangqie/p/8875845.html
Copyright © 2011-2022 走看看