一:概述

  - 由于 IP 的传输是无状态的IP 提供尽力服务,但并不保证数据可以到达主机。

  - 所以,数据的完整性需要更上层的 传输层来保证。TCP和UDP 均属于 传输层。

二:UDP

  - 特点

    - 不具有可靠性的数据报协议。

    - UDP 虽然可以确定发送消息的大小,却不能保证消息的到达。

  - 应用场景

    - 即时通讯

    - 包总量较少通讯

    - 广播通信

三:TCP

  - 特点

    - 面向连接的,可靠的流协议。

    - 流即为不间断的数据结构,虽然可以保证发送的顺序,但是还是犹如没有任何间隔的发送给服务端。

  - 应用场景

    - 对数据完整性有要求的通信。

四:TCP 是通过什么机制实现可靠传输的?

  - 确认应答

    - 问题

      - 发送端在发送数据之后,并不知道发送的数据是否成功到达了接收端。

    - 解决方案

      - TCP 通过肯定的确认应答ACK(Positive Acknowled-gement)实现可靠的数据传输。

      - 如果有确认应答,说明数据已经成功到达对端。反之,则丢失的可能性很大。

  - 序列号

    - 问题

      - 在发送端发送数据时,可能因为 某些原因(网络问题/硬件问题) 导致接收端没有收到信息。

      - 这样会导致发送端重复发送,接收端会反复接收同样的数据包(然后抛弃数据包)

      - 造成主机的压力,和资源的浪费。

    - 解决方案

      -  发送端,数据的每一个字节标明编号

      -  接收端,根据首部的序列号和长度,将下一步应该接受的序列号返回。

      -  这样,通过序列号和确认应答号,TCP 可以实现可靠传输。

      - 

  - 重发控制

    - 定义

      - 重发超时指的是在重发数据之前,等待确认应答的时间间隔

      - 如果超过了这个时间,发送端将重发数据。

    - 问题

      - 由于每个网络和当时发生的情况不一样,所以重发超时的时间是不定的

    - 解决方案

      - TCP 会计算数据往返时间和’偏差'。计算超时时间。

      - 数据若是重发之后还是没有应答,则会 2/4/…. 指数增长

      - 当到达一定次数,则会强制关闭连接。

  - 连接管理

    - 三次握手 (建立连接)

    - 四次挥手 (断开连接)

    - 

  - 发送数据 (分段传输)

    - 问题

      - 在 TCP 的数据传输中,要规定传输数据的大小,以避免出现发送端发送数据过大导致接收端无法处理的问题。

    - 解决方案

      - 在建立TCP连接时,发送端和接收端确定数据包大小,我们也可以称为 “最大消息长度” MSS(Max Segment Size)。

      -  TCP 在传输大数据时,是以MSS进行切割发送,重试也是以MSS为单位。

      - 

  - 窗口控制

    - 问题

      - 由于TCP使用了分段传输数据,则会导致通信往返时间过长,性能变低。

      - 

    - 解决方案

      -  使用缓冲区(Buffer)对请求做统一处理(有点像Redis的管道处理),对多个段进行确认应答,提升整体效率。

      - 

    - 窗口控制下的重发机制

      - 在窗口比较大,出现报文丢失的情况下,统一序号的确认应答会被不停的返回。

      - 而接收端如果连续三次收到了同一个确认应答,则将会对数据进行重发。

      - 这种方法比超时控制更有效,也被称为高速重发控制

      - 

  - 流量控制

    - 问题

      - 在特殊条件下的,接收端处于 高负荷/耗时处理 状态,需要进行 流量控制

    - 解决方案

      - 接收端向发送端发送自己可以接受的数据的大小。

      - 发送端接收信息后,就不会发送超过这个限度大小的数据,这个范围被称作窗口大小

    - 实例

      - 

      - 如图,当接收端收到从3001之后的数据端,既缓冲区已满,暂停接受数据。

      - 之后收到窗口的更新通知才会继续发送。

      - 但是如果这个通知在传输中丢失,可能导致无法通信。

      - 为了解决这个问题,发送端会不时的发送一个 窗口探测,来查看接收端状态。

  - 其他

    - 拥塞控制等

五:TCP/UDP  首部。

  - UDP

    - 

    - 源端口号 (16位),表示发送端端口号。在不需要返回的通信中,源端口号为0。

    - 目标端口号 (16位),表示接收端端口号。

    - 包长度,保存了UDP首都长度和数据长度之和。(字节)

    - 校验和,用于数据的校验。

  - TCP

    - 

    - 源端口号 (16位),表示发送端端口号。

    - 目标端口号 (16位),表示接收端端口号。

    - 序列号 (32位)

      - 指发送数据的位置,每发送一次。就累积加一次数据字节大小。

      - 序号不会从0,1开始,而是在建立连接时候已随机数作为开始值。

      - 建立和断开连接的 SYN和FIN虽然不携带数据,但是也会做为一个字节增加对应的序列号。

    - 确认应答号 (32位)

      - 指下一次应答应该收的的序列号。

      - 也可以说是确认应答-1,发送端收到这个应答就表明这个序号之前的数据被成功接收。

五:三次握手和四次挥手?

  - 为什么要三次握手?

    - (不准确的)《计算机网络》:防止已失效的连接请求又传送到服务器端,因而产生错误。

    - 为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。

    - 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤

    - 如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认.

  

  - 为什么要四次挥手?

    - 建立连接,因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。

    - 但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。

    - 只有等到我Server端所有的报文都发送完了,我才能发送FIN报文。

    - 因此不能一起发送。故需要四步握手。

《TCP/IP - TCP/UDP》的更多相关文章

  1. 《TCP/IP网络编程》

    <TCP/IP网络编程> 基本信息 作者: (韩)尹圣雨 译者: 金国哲 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9787115358851 上架时间:2014-6- ...

  2. 有了Openvswitch和Docker,终于可以做《TCP/IP详解》的实验了!

    所有做过网络编程的程序员,想必都会看<TCP/IP详解>卷一:协议 后来出了第二版,但是由于第一版才是Rechard Stevens的原版,本人还是多次看了第一版. 对这一版印象最深的就是 ...

  3. 《用TCP/IP进行网络互连》读书笔记

    <用TCP/IP进行网络互连>读书笔记   第2章,基本网络技术 网络通信分类:基于连接的通信(connection-oriented),基于非连接的通信(connectionless) ...

  4. 《TCP/IP网络编程》学习笔记整理

    简介 本笔记目前已包含 <TCP/IP网络编程>中的前 5 章,后续章节会在近期内补充完整. 我在整理笔记时所考虑的是:在笔记记完后,当我需要查找某个知识点时,不需要到书中去找,只需查看笔 ...

  5. 网络协议: TCP/IP 和UDP/IP

    网络协议: TCP/IP 和UDP/IP TCP/IP TCP/IP(Transmission Control Protocol/Internet Protocol)是一种可靠的网络数据传输控制协议. ...

  6. 《TCP/IP详解》读书笔记

    本书以UNIX为背景,紧贴实际介绍了数据链层.网络层.运输层   一.整体概念   1.各层协议的关系,只讨论四层 各层常见的协议:   网络层协议:IP协议.ICMP协议.ARP协议.RARP协议. ...

  7. 《TCP/IP详解》

    TCP/IP概述 Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本 ...

  8. 《TCP/IP入门经典》摘录--Part 1

    TCP/IP基础知识 什么是TCP/IP Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议, ...

  9. 《Java TCP/IP Socket 编程 》读书笔记之十一:深入剖析socket——TCP套接字的生命周期

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/16113083 建立TCP连接      新的Socket实例创建后,就立即能用于发送和接收 ...

  10. 20169202 2016-2017-2《TCP/IP协议攻击》实验总结--十一周

    APR缓存中毒(ARP cache poisoning) 实验原理 ARP缓存是ARP协议的重要组成部分.ARP协议运行的目标就是建立MAC地址和IP地址的映射,然后把这一映射关系保存在ARP缓存中, ...

随机推荐

  1. BM算法【实数模板】

    BM递推杜教版是在整数取模的情况下的, 这个可以求解实数系数,但是可能有精度误差. 若一个问题的结论是通过推线性递推式来解,考虑到实际的情况,可以用BM算法的模板,先输入项数再依次输入项,项越多越准确 ...

  2. CDN工作机制

    CDN(content delivery network),即内容分布网络,是一种构建在现有Internet上的一种先进的流量分配网络.CDN以缓存网站中的静态数据为主,当用户请求动态内容时,先从CD ...

  3. c++ 将float 类型转换成string 类型

    string Convert(float Num) { ostringstream oss; oss<<Num; string str(oss.str()); return str; }

  4. php Web 项目的文件/文件夹上传下载

    PHP用超级全局变量数组$_FILES来记录文件上传相关信息的. 1.file_uploads=on/off 是否允许通过http方式上传文件 2.max_execution_time=30 允许脚本 ...

  5. nginx syslog 配置

    以下是一个简单的实践,主要是打算测试nginx 与graylog 的集成,为了简单都是使用容器运行的,同时也测试了 nginx 对于配置多个access_log 的处理 环境准备 docker-com ...

  6. Alpha冲刺(4/6)

    队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 摸鱼 提交记录(全组共用) 接下来的计划 沟通前后端成员,监督.提醒他们尽快完成各自的进度 学习如何评估代码质量 准备Al ...

  7. 拉格朗日插值法(c++)

    已给sin0.32=0.314567,sin0.34=0.333487,sin0.36=0.352274,计算sin0.3367的值 #include <iostream> #includ ...

  8. 开源一个golang小程序商城后台系统(moshopserver)

    开源一个golang小程序商城后台(moshopserver) golang和c/c++比起来是一门新的语言,一直想学,网上搜集了一些资料,有些人说很容易上手,确实是这样,和C/C++比起来,少了很多 ...

  9. 刷题记录:[CISCN2019 华北赛区 Day2 Web1]Hack World

    目录 刷题记录:[CISCN2019 华北赛区 Day2 Web1]Hack World 一.前言 二.正文 1.解题过程 2.解题方法 刷题记录:[CISCN2019 华北赛区 Day2 Web1] ...

  10. 【大数据】分布式并行计算MapReduce

    作业来源于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3319 1.  用自己的话阐明Hadoop平台上HDFS和MapReduc ...