三、初识TCP/UDP(传输层)

一、初识TCP/UDP(传输层)

引言:TCP(Transmission Control Protocol),又叫传输控制协议,UDP(User Datagram Protocol),又叫用户数据报协议。两者都是是传输层协议,但他们的通信机制与应用场景不同。


1、TCP与UDP区别

特点 TCP UDP
传输方式 字节流 数据报
连接性 面向连接 面向非连接
可靠性 可靠 不可靠
传输效率
  • 面向字节流(TCP)

    面向字节流的话,虽然应用程序和TCP的交互是一次一个数据块(大小不等),TCP把应用程序看成是一连串的无结构的字节流。TCP有一个缓冲,当应用程序传送的数据块太长,TCP就可以把它划分短一些再传送。如果应用程序一次只发送一个字节,TCP也可以等待积累有足够多的字节后再构成报文段发送出去 。


  • 面向报文(UDP)

    面向报文的传输方式是应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。因此,应用程序必须选择合适大小的报文。若报文太长,则IP层需要分片,降低效率。若太短,会是IP太小。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。这也就是说,应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。

2、TCP相关介绍

工作机制:紧小细微型。面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据包之前必须先建立一个TCP连接。这一过程与打电话很相似,先拨号振铃,等待对方摘机说“喂”,然后才说明是谁。在一个TCP连接中,仅有两方进行彼此通信。而UDP更像是发短信,将发送方所有的信息,将所有信息一股脑儿全扔到网络中。

可靠性(可靠)

1.当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。当TCP收到发自TCP连接另一端的数据,它将发送一个确认。TCP有延迟确认的功能,在此功能没有打开,则是立即确认。功能打开,则由定时器触发确认时间点。



2.TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段(希望发端超时并重发)



3.既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。



4.TCP的接收端必须丢弃重复的数据。



5.量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。



传输效率(慢)

  1. TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间。
2.1、TCP传输过程

TCP建链三次握手过程

  • 1、主机A通过向主机B 发送一个含有同步序列号的标志位的数据段给主机B ,向主机B 请求建立连接,通过这个数据段, 主机A告诉主机B 两件事:我想要和你通信;你可以用哪个序列号作为起始数据段来回应我。

  • 2、主机B 收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事: 我已经收到你的请求了,你可以传输数据了;你要用哪佧序列号作为起始数据段来回应我 。

  • 3、主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B 的数据段:”我已收到回复,我现在要开始传输实际数据了 这样三次握手就完成了,主机A和主机B 就可以传输数据了。(没有应用层的数据,SYN这个标志位只有在TCP建产连接时才会被置1,握手完成后SYN标志位被置0)

TCP断链四次握手过程

  • 1、当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求。

  • 2、主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1。

  • 3、由B 端再提出反方向的关闭请求,将FIN置1。

  • 4、主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束。
1、ACK : TCP报头的控制位之一,对数据进行确认.确认由目的端发出,用它来告诉发送端这个序列号之前的数据段都收到了.比如,确认号为X,则表示前X-1个数据段都收到了,只有当ACK=1时,确认号才有效,当ACK=0时,确认号无效,这时会要求重传数据,保证数据的完整性。

2、SYN : 同步序列号,TCP建立连接时将这个位置1。

3、FIN : 发送端完成发送任务位,当TCP完成数据传输需要断开时,提出断开连接的一方将这位置1。

3、UDP

工作机制:蛮干型。它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。因此,在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。

可靠性(可靠)

  1. UDP协议是一种无连接的传输协议,排除信息可靠传递机制带来速度优势的同时,显然降低了可靠性的需求,也就是UDP协议无法得知其是否安全,完整到达的。此外,由于TCP有确认机制、三次握手机制,这些也导致TCP容易被人利用,实现DOS、DDOS、CC等攻击。

传输效率(慢)

  1. 与TCP协议相比,UDP协议排除了信息可靠传递机制,也就是减少了TCP协议中提供数据包分组、组装和排序的过程需要的时间消耗。其次,UDP是一个无状态的传输协议,所以它在传递数据时非常快。没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一些。

4、TCP与UDP编程模型

* TCP编程的服务器端一般步骤是:
  1、创建一个socket,用函数socket();
  2、设置socket属性,用函数setsockopt();
  3、绑定IP地址、端口等信息到socket上,用函数bind();
  4、开启监听,用函数listen();
  5、接收客户端上来的连接,用函数accept();
  6、收发数据,用函数send()和recv(),或者read()和write();
  7、关闭网络连接;
  8、关闭监听; 

* TCP编程的客户端一般步骤是:
  1、创建一个socket,用函数socket();
  2、设置socket属性,用函数setsockopt();
  3、绑定IP地址、端口等信息到socket上,用函数bind();
  4、设置要连接的对方的IP地址和端口等属性;
  5、连接服务器,用函数connect()建立链接;
  6、收发数据,用函数send()和recv(),或者read()和write();
  7、关闭网络连接;

  

* UDP编程的服务器端一般步骤是:
  1、创建一个socket,用函数socket();
  2、设置socket属性,用函数setsockopt();
  3、绑定IP地址、端口等信息到socket上,用函数bind();
  4、循环接收数据,用函数recvfrom();
  5、关闭网络连接。 

* UDP编程的客户端一般步骤是:
  1、创建一个socket,用函数socket();
  2、设置socket属性,用函数setsockopt();
  3、绑定IP地址、端口等信息到socket上,用函数bind();
  4、设置对方的IP地址和端口等属性;
  5、发送数据,用函数sendto();
  6、关闭网络连接。

原文地址:https://www.cnblogs.com/retry/p/9308767.html

时间: 2024-08-01 07:13:01

三、初识TCP/UDP(传输层)的相关文章

TCP/IP传输层,你懂多少?

1. 传输层的主要功能是什么?2. 传输层如何区分不同应用程序的数据流?3. 传输层有哪些协议?4. 什么是UDP协议?5. 为什么有了UDP,还需要TCP?6. 什么是TCP协议?7. 怎么理解协议和程序?8. TCP是否真的有链接?9. 链接是如何建立的(逻辑上)?10. 所谓的建立TCP链接开销很大,具体是指什么?11. 三次握手的目的是什么?12. TCP如何提供可靠性?13. 什么是预期确认?什么是肯定确认与重新传输?哪些情况会重传?14. TCP中,序列号和应答号有哪些作用?15. 

前端工程师如何理解 TCP/IP 传输层协议?

网络协议是每个前端工程师都必须要掌握的知识,TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP,本文将介绍下这两者以及它们之间的区别. TCP/IP网络模型 计算机与网络设备要相互通信,双方就必须基于相同的方法.比如,如何探测到通信目标.由哪一边先发起通信.使用哪种语言进行通信.怎样结束通信等规则都需要事先确定.不同的硬件.操作系统之间的通信,所有的这一切都需要一种规则.而我们就把这种规则称为协议(protocol). TCP/IP 是互联网相关的各类协议族的总称,比如:T

Python web编程 初识TCP UDP

Python网络编程之初识TCP,UDP 这篇文章是读了<Python核心编程>第三版(Core Python Applications)的第二章网络编程后的自我总结. 如果有不到位或者错误的地方,还请大家积极指出. 首先谈谈TCP和UDP的不同这个问题出现在很多次Python面试题中,以下答案是我根据书本来总结出的: 在谈该问题之前,我需要先简单说一下套接字的概念: 套接字是计算机网络数据结构,他体现了“通信端点的”概念.在任何类型的通信开始之前,网络应用程序必须创建套接字.可以将他们比作电

深入理解TCP/IP传输层

传输层:负责数据能够从发送端传到接收端(只需要关注点对点的传输,中间的传输过程一概不管) UDP和TCP UDP(全双工):1.无连接,2不可靠,3.面向数据报 TCP(全双工,是一个比较复杂的协议 )1.有连接 2.可靠传输 3.面向字节流 可靠性传输 发送者能感知到失败(对比打电话和发短信)面向字节流,文件操作(I/O流)全双工:既能发送也能接受 UDP虽不可靠,但传输效率比TCP高 TCP通过判断发送的消息是否被回复,来判断是否可靠传输一.确认应答(可靠性的核心机制)序号来说,按照每个字节

黑马程序员—网络编程TCP(传输层完整篇)

--Java培训.Android培训.iOS培训..Net培训.期待与您交流! -- Socket 要注意的是 流是否写完,应为有阻塞式的方法(read) s.shutdownoutput(); ServerSocket 保证服务器的持续性 s=ss.accept(); Socket对象要循环 为保证服务能多人使用,要开启线程. 一 package com.itheima.org; import java.io.File; import java.io.FileInputStream; impo

【tcp-ip学习总结】传输层协议UDP和TCP

互联网中任何两台主机之间通讯,都是从一端到另一端,又称端到端的通讯.端口又是什么?现代的操作系统都装有很多个应用程序,信息传到了我的电脑上我怎么知道这个信息就是传给我的QQ应用程序的呢?我的QQ程序有反应但是我的MSN怎么没有反应呢? 原因就是:我的系统有很多个端口号,每一个应用程序进程都绑定了本地一个独一无二端口号,这样每一个程序都与一个端口号绑定.比如QQ绑定了本地的6666端口号(假设都是UDP端口号),这个一个消息发来,消息报文头显示要发到6666这个端口号,上面的进程也就是QQ程序了,

计算机网络【六】:传输层-TCP概述 【转】

转自:http://blog.chinaunix.net/uid-26275986-id-4109209.html 根据TCP/IP协议的分层结构,网络层之上是传输层,从层次结构上来看,传输层位于网络的最高层和应用的最底层.传输层的主要作用有两个:一个是居于网络层与应用层之间提供复用和分用的服务:另一个则是需要的时候为应用层提供可靠的传输服务.复用和分用指的是传输层负责实现端到端的传输,即计算机进程之间的通信:而网络层则负责点到点的传输,最重要的功能是路由寻址.     网络通信的"用户&quo

计算机网络 学习笔记-传输层:TCP协议简介

概述: TCP传输前先要建立连接 TCP在传输层 点对点,一条TCP只能连接两个端点 可靠传输.无差错.不丢失.不重复.按顺序 全双工 字节流 TCP报文段 TCP报文段的报头前20字节是固定的,后面4n字节是根据需要而添加的. 20字节的固定部分: 源端口和目的端口:分别写入源端口号和目的端口号 序号:0-(2^32-1),本报文段数据的第一个字节的序号,用来解决乱序问题 确认序号:期望收到对方下一个报文段的第一个数据字节的序号,用来解决丢包问题 数据偏移:TCP报头长度,包括固定的20字节和

CCNA笔记——802规定,网络层,传输层,会话层,表示层,应用层,封装

802规定 802.1  桥接 802.2  逻辑链路控制 802.3  以太网 802.4  令牌传递总线 802.5  令牌环 802.6  分布队列双入总线接入服务 802.9  集成服务 802.11  无线局域网 802.14  有线电视 802.15  个人无线局域网 网络层 传输单位:数据包 设备   :路由器,三层交换机 ARP: 地址解析协议 功能  :逻辑寻址 靠IP传输数据 传输层 传输单位:数据段 功能   :流量传输和控制 TCP  :可靠传输控制协议,不允许有丢帧的现