zoukankan      html  css  js  c++  java
  • TCP/IP协议

    一、计算机网络体系结构分层

     

     

     

     

     

     

     

     

    二、TCP/IP协议

           从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议。实际生活当中有时也确实就是指这两种协议。然而在很多情况下,它只是利用 IP 进行通信时所必须用到的协议群的统称。具体来说,IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都属于 TCP/IP 协议。他们与 TCP 或 IP 的关系紧密,是互联网必不可少的组成部分。TCP/IP 一词泛指这些协议,因此,有时也称 TCP/IP 为网际协议群。

          互联网进行通信时,需要相应的网络协议,TCP/IP 原本就是为使用互联网而开发制定的协议族。因此,互联网的协议就是 TCP/IP,TCP/IP 就是互联网的协议。

    三、数据包

          每个分层中,都会对所发送的数据附加一个首部,在这个首部中包含了该层必要的信息,如发送的目标地址以及协议相关信息。通常,为协议提供的信息为包首部,所要发送的内容为数据。在下一层的角度看,从上一层收到的包全部都被认为是本层的数据。

    四、UDP

    • DP 不提供复杂的控制机制,利用 IP 提供面向无连接的通信服务。
    • 并且它是将应用程序发来的数据在收到的那一刻,立即按照原样发送到网络上的一种机制。即使是出现网络拥堵的情况,UDP 也无法进行流量控制等避免网络拥塞行为。
    • 此外,传输途中出现丢包,UDP 也不负责重发。
    • 甚至当包的到达顺序出现乱序时也没有纠正的功能。
    • 如果需要以上的细节控制,不得不交由采用 UDP 的应用程序去处理。
    • UDP 常用于一下几个方面:1.包总量较少的通信(DNS、SNMP等);2.视频、音频等多媒体通信(即时通信);3.限定于 LAN 等特定网络中的应用通信;4.广播通信(广播、多播)。

    五、TCP

    • TCP 与 UDP 的区别相当大。它充分地实现了数据传输时各种控制功能,可以进行丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。而这些在 UDP 中都没有。
    • 此外,TCP 作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。
    • 根据 TCP 的这些机制,在 IP 这种无连接的网络上也能够实现高可靠性的通信( 主要通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现)。

    六、TCP报文格式简介

           1、重要字段解释:

        序号(sequence number):Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。

        确认号(acknowledgement number):Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。

        标志位(Flags):共6个,即URG、ACK、PSH、RST、SYN、FIN等。具体含义如下:

          URG:紧急指针(urgent pointer)有效。

          ACK:确认序号有效。

          PSH:接收方应该尽快将这个报文交给应用层。

          RST:重置连接。SYN:发起一个新连接。FIN:释放一个连接。

    七、TCP的三次握手

      1、为什么非要用三次握手

        三次握手是为了防止已失效的链接请求报文突然又传送到了服务器而产生错误。

        客户端发出的连接请求报文并未丢失,而是在某个网络节点长时间滞留了,以致延误到链接释放以后的某个时间才到达服务器。服务器误以为这是客户端发出的一个新的连接请求,于是就向客户端发送确认数据包,同意建立连接。

        若不采用三次握手,那么只要服务器发出确认数据包,新的连接就建立了。由于客户端此刻并没有发出连接请求,所以客户端不会理服务器的确认,也不与服务器通信,而这时服务器一直再等待客户端的请求,这样服务器就白白的浪费了一定的资源。

    八、TCP四次挥手

      但是为什么客户端要等待2MSL时间的原因:确保由于网络堵塞等原因迟到且客户端重发的消息在本次连接中作废掉,而不会进入下一次连接中

  • 相关阅读:
    Java分享笔记:关于Java反射机制
    Java分享笔记:自定义枚举类 & 使用enum关键字定义枚举类
    Java分享笔记:RandomAccessFile流 & 在文件指定位置插入内容
    Spark-源码-SparkContext的初始化
    Spark-源码-Spark-StartAll Master Worler启动流程
    Spark-源码-Spark-Submit 任务提交
    Hadoop2学习路程-HDFS
    JavaSE 第二次学习随笔(五)
    JavaSE 第二次学习随笔(四)
    JavaSE 第二次学习随笔(三)
  • 原文地址:https://www.cnblogs.com/lax-17xu/p/14767607.html
Copyright © 2011-2022 走看看