zoukankan      html  css  js  c++  java
  • UNP学习笔记(第二章:传输层)

    本章的焦点是传输层,包括TCP、UDP和SCTP。

    绝大多数客户/服务器网络应用使用TCP或UDP。SCTP是一个较新的协议。

    UDP是一个简单的、不可靠的数据报协议。而TCP是一个复杂、可靠的字节流协议。

    这里重点放在TCP中。

    用户数据报协议(UNP)

    应用程序往UDP套接字写入一个消息,该消息随后被封装到一个UDP数据报,该UDP数据报进而又被封装到一个IP数据报,然后发送到目的地(面向非连接的)。

    UDP不保证UDP数据报会达到最终目的地,不保证各个数据报的先后顺序跨网路后保持不变,也不保证每个数据报只到达一次。

    传输控制协议(TCP)

    相对于UDP,TCP客户先于某个给定的服务器建立一个连接,再跨该连接与那个服务器交换数据,然后终止连接(面向连接的)。

    其次,TCP还提供了可靠性:当TCP向另一端发送数据时,它要求对端返回一个确认。如果没有收到确认,TCP就自动重传数据并等待更长的时间。在数次重传失败后,TCP才放弃。

    TCP连接的建立和终止

    三次握手,建立一个TCP连接时会发生下述情况

    1.服务器必须准备好接受外来连接。这通常通过调用socket、bind和listen这3个函数来完成,我们称之为被动打开。

    2.客户通过调用connect发起主动打开。这导致客户TCP发送一个SYN(同步)分节,它告诉服务器将在(待建立)连接中发送的数据的初始序列号(J)。

    3.服务器必须确认(ACK)客户的SYN,同时自己也得发送一个SYN分节,它含有服务器将在同一连接中发送数据的初始序列号(K)。

    4.客户必须确认服务器的SYN。

    图中客户的初始序列号是J,服务器的初始序列号是K。ACK中的确认号是发送这个ACK的一段所期待的下一个序列号。

    TCP连接终止

    TCP终止一个连接需要4个分节

    1.某个应用进程首先调用close,我们称该端执行主动关闭。该端的TCP于是发送一个FIN分节,表示数据发送完毕。

    2.接受到这个FIN的对端执行被动关闭。这个FIN由TCP确认。它的接收也作为一个文件结束符传递给接收端应用程序。

    3.一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN。

    4.接收这个最终FIN的原发送端TCP确认这个FIN。

    TCP状态转换图

    观察分组

    下面展示了一个完整的TCP连接所发生的实际分组交换情况。

    TIME_WAIT状态

    TIME_WAIT状态有两个存在的理由:

    1.可靠地实现TCP全双工连接的终止;

    2.允许老的重复分节在网络中消逝。

  • 相关阅读:
    自动发现
    1.1 开启二进制日志
    mysql
    html常见的块元素和行内元素(特别注意个别块元素不能嵌套其他块元素)
    Linux查看物理CPU个数、核数、逻辑CPU个数
    查看linux服务器的系统信息
    谷歌浏览器无法输入中文——解决
    Linux下查看正在使用的端口
    入园第三天-记录
    Visual Studio2015 Community一些必备插件
  • 原文地址:https://www.cnblogs.com/runnyu/p/4657081.html
Copyright © 2011-2022 走看看