在当今因特网的层次结构中,传输层的协议主要有两种,其一为Transmission Control Protocol,即TCP;其二为User Datagram Protocol,即UDP。

1、TCP service model

TCP是使用最广泛的传输层通讯协议,它在两个端系统之间建立连接,并通过两端的状态机来维护连接,为应用层提供可靠的字节流传输服务。

(1)TCP是面向连接的

  在传输实际数据的字节流之前,两个端系统的TCP会通过三次握手来确定建立连接,即所谓的3-way handshake

  

  在上图所示的情形中,主机A试图与主机B建立TCP连接,A会首先发一个SYN(Synchronize)信号和一个用于字节流识别的基数到B申请建立连接。如果B同意,那么B会返回一个SYN信号和A之前所发的基数,以及一个ACK(acknowledgement)表示同意建立连接并确认基数。这时,A会回复一个ACK信号到B,表示接受。至此,两端表征连接状态的状态机被初始化,双向的连接就已经建立起来,就等待字节流的传递。

  在数据传输完成之后,并且TCP连接被要求解除(teardown),两端的传输层会通过所谓的四次挥手来解除连接关系。

  

   主机A认为它不会再向B发送数据之后,请求关闭连接,A会向B发送一个FIN(Finish)信号。B接到这个信号后,会回复ACK到A,这时B会关闭从A来的数据流。A——>B的数据流被关闭,但是B可能还有数据要发往A,所以B还会发送数据到A,直到发送完成。此后,B会发送一个FIN到A申请终结连接,A会发送一个ACK表示同意。至此,A、B间的双向连接被关闭。至于A、B知道什么时候该发什么信号,是由其背后的状态机决定的。连接解除后,两端的状态机也被删除。

(2)TCP字节流的基本单元——TCP报文段(Segment)

  根据网络中的分组交换原则,TCP字节流被划分成多个TCP报文段。一个TCP报文段,主要有首部和数据两部分。首部的各个域描述了该报文段的性质,数据则是来自应用层的数据,如HTTP请求。TCP报文段生成之后,将会交付网络层进行下一步处理。

  TCP报文段的结构:

  源端口和目标端口的作用:发送数据和回复信息的目标位置

  序列号和确认序列号:序列号用于检查传输数据的完整性,并用于按序重构数据;确认序列号用于表示接收方正在等待的下一个数据序列号,以保证每个数据段都被接收。

  求和检查(Checksum):用于检查数据是否出现错误,如果有会要求重新发送。

  窗口规模:用于流量控制,避免接收方被淹没。

(3)可靠的数据传输保证机制

  上述重点字段保证的数据确保递交到位机制、数据正确性检查机制、流量控制机制,还有通过多字段保证的TCP连接身份识别机制。

2、UDP service model

  与TCP比较,UDP的服务模型要简单很多,以至于被认为是只指定传输端口的传输层协议。

  UDP不会建立连接,不保证数据送达(忽略丢包),也没有Sequence number来保证数据的正确顺序。它只有单向的传输,而不会有双向的交流。

  UDP最大的优点是简单,那些不需要确保递交、流量控制、按需递交的应用,通常会选择UDP作为其传输层协议。如DNS。

(3)小结

  这篇随笔浅谈了一下传输层的两个协议——TCP和UDP,说到了它们的性质和运行机制,各自的优势。

  总的来说,TCP是面向连接的传输层协议,它通过诸多字段和双向交流,来给应用层提供可靠的字节流传输服务。在传输数据之前,要通过三次握手建立状态机和连接;传输数据之后,要通过四次挥手解除连接。为了将所有数据传输到目的地,TCP通常会重新发送数据段。而UDP则更加简单,只负责将数据段递交给网络层,没有建立连接的过程,不会去维护状态。

  才疏学浅,还有待进步,欢迎大家交流。

  

浅谈传输层协议TCP和UDP的更多相关文章

  1. 传输层协议TCP和UDP

    本文力图简洁,让读者对TCP和UDP有个初步的认知.闲话少说,现在开始吧.TCP和UDP都是传输层的协议.TCP通过三次握手建立可靠连接,对未送达的消息重新进行发送.UDP不建立连接而直接发送,对未送 ...

  2. TCP/IP中的传输层协议TCP、UDP

    TCP提供可靠的通信传输,而UDP则常用于让广播和细节控制交给应用的通信传输. 传输层协议根据IP数据报判断最终的接收端应用程序. TCP/IP的众多应用协议大多以客户端/服务端的形式运行.客户端是请 ...

  3. 常用传输层协议(tcp/ip+udp)与常用应用层协议简述(http)

    一.计算机网络体系结构 二.TCP与UDP差异 1.TCP是面向连接的可靠传输,UDP是面向无连接的不可靠传输 面向连接表现在3次握手,4次挥手:可靠传输表现在未进行4次挥手时的差错重传,超时重传: ...

  4. 传输层协议TCP和UDP分析

    分析所用软件下载:Wireshark-win32-1.10.2.exe 阅读导览 1. 分析应用TCP协议,以及TCP链接管理 2. 分析应用UDP协议 分析要求 (1)TCP部分: 学习3CDaem ...

  5. UNIX网络编程---传输层:TCP、UDP、SCTP(二)

    UNIX网络编程----传输层:TCP.UDP.SCTP 一.概述 本章的焦点是传输层:包括TCP.UDP.和SCTP(流控制传输协议).SCTP是一个较新的协议,最初设计用于跨因特网传输电话信令. ...

  6. 数据通讯与网络 第五版第24章 传输层协议-TCP协议部分要点

    上一博客记录了UDP协议的关键要点,这部分记录TCP协议的关键要点. 24.3 传输控制协议(TRANSMISSION CONTROL PROTOCOL) TCP(Transmission Contr ...

  7. 传输层的TCP和UDP协议

    作者:HerryLo 原文永久链接: https://github.com/AttemptWeb... TCP/IP协议, 你一定常常听到,其中TCP(Transmission Control Pro ...

  8. 01网络编程(基础知识+OSI七层协议+TCP与UDP)

    目录 01 网络编程 一.软件开发架构 1.1 CS架构 1.2 BS架构 二.网络理论前戏 2.1 简介 2.2 常见硬件 三.OSI七层协议(五层) 3.1 七层协议 3.2 五层协议 3.3 知 ...

  9. [转帖]技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解

    技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解    http://www.52im.net/thread-1309-1-1.html   本文来自腾讯资深研发工程师罗成的技术分享, ...

随机推荐

  1. 5.2 Array类型

    ◆  创建数组的基本方式有两种. ①第一种是使用Array构造函数,new关键字可省略 var colors = new Array(); var colors = new Array(20); // ...

  2. centos安装django

    1.如果默认安装的是python2.6,先升级至python2.7 参考:http://www.cnblogs.com/tiger2soft/p/5677843.html 2.安装pip 先下载get ...

  3. spring-JDBC Template

    JDBC Template概念 为简化持久化操作,spring在JDBC API之上提供JDBC Template组件 提供统一模板: 环境配置 1.创建MySQL数据库 2.搭建maven项目,并引 ...

  4. datatable 单元格默认文本

    在列字段中添加属性:"defaultContent": "-"

  5. OpenStack Grizzly版本部署(离线)

    参考原版地址:https://github.com/mseknibilel/OpenStack-Grizzly-Install-Guide 图转自原版地址 部署拓扑: 部署环境:vmware stat ...

  6. python__系统 : 线程

    线程之间,全局变量可以共享,但是局部变量依然是不共享的,线程的创建方式: threading.Thread(),还可以定义一个类继承Thread,重写他的run方法,具体和进程的写法一样. 那么,线程 ...

  7. 【PHP项目】【Smarty】Smarty截取字符串方法truncate

    smarty truncate 截取字符串  //在sql中truncate是删除表格(truncate是只删除内容,delete彻底删除)从字符串开始处截取某长度的字符,默认的长度为80指定第二个参 ...

  8. JZOJ 3521. 道路覆盖

    Description ar把一段凹凸不平的路分成了高度不同的N段,并用H[i]表示第i段高度.现在Tar一共有n种泥土可用,它们都能覆盖给定的连续的k个部分. 对于第i种泥土,它的价格为C[i],可 ...

  9. LAMP架构的搭建

    什么是LAMP架构? L : Linux,2.6.18-308.el5(redhat5.8) A :Apache,httpd 2.4.4 M :  mysql-5.5.28  P : php-5.4. ...

  10. \r \r\n \t的区别

    \n 软回车:      在Windows 中表示换行且回到下一行的最开始位置.相当于Mac OS 里的 \r 的效果.      在Linux.unix 中只表示换行,但不会回到下一行的开始位置. ...