在当今因特网的层次结构中,传输层的协议主要有两种,其一为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. 2017.11.22 mysql数据库实现关联表更新sql语句

    比如有两张表,其中一张表某个字段的值要关联另一张表进行统计,就要用到mysql的update方法,并且left join另一张表进行联合查询. mysql关联表更新统计 sql语句如下: 代码如下 复 ...

  2. removing vmware debugger from visual studio

    removing vmware debugger from visual studio by Ross on 十月 14, 2010 at 5:30 下午 under Visual Studio |  ...

  3. redux详解

    redux介绍 学习文档:英文文档,中文文档,Github redux是什么 redux是一个独立专门用于做状态管理的JS库(不是react插件库),它可以用在react, angular, vue等 ...

  4. centos install rtl8188ce driver

    1.导入公钥,注意大小写. rpm --import http://elrepo.org/RPM-GPG-KEY-elrepo.org 2.安装ELRepo库. rpm -Uvh http://elr ...

  5. 将你的静态工程用Grunt管理

    最近写了一个静态页面,写完之后都会上传到静态服务器上.但是我遇到一个问题,就是每次修改文件后就要重新找一些代码压缩网站去压缩静态文件.有没有什么办法能够自动化的处理呢?答案当然是肯定的. 我们可以借用 ...

  6. File类,递归

    File类 File文件和目录路径名的抽象表示形式.即,Java中把文件或者目录(文件夹)都封装成File对象. File类包含     路径    path E:\...     目录 direct ...

  7. ADO.NET之一:连接层

    ADO.NET大部分由System.Data.dll核心程序集来表示. ADO.NET类库有三种完全不听的方式来实现数据访问:连接式.断开式和通过Entity框架.连接式就是会一直占用网络资源,断开式 ...

  8. poj_3696_The Luckiest number

    Chinese people think of '8' as the lucky digit. Bob also likes digit '8'. Moreover, Bob has his own ...

  9. Java自定义异常信息

    通常在开发过程中,会遇到很多异常,对于一些知道异常的原因,这时候想要返回给浏览器,就需要自定义系统的异常 1.Spring  注入异常处理类 <bean id ="commonExce ...

  10. .NET 客户IP地址捕捉

    MVC模式下要获取客户IP可以在ActionFilterAttribute中进行拦截 filterContext.HttpContext.Request.UserHostAddress 同样,在Web ...