UDP与TCP笔记
1、UDP
UDP协议在工作时是建立在IP协议之上的,UDP从进程的缓冲区接收进程每一次产生的输出,对每次输出都生成一个UDP数据报,然后把生成的UDP数据报直接封装在IP数据报中进行传输,因此在传输层使用UDP协议时,发送端不需要发送缓冲区。


UDP协议的特点:
从UDP协议的数据报格式可以看出,UDP对数据的封装非常简单,主要是增加了端口号与校验和,然后就可以直接通过IP层进行传输了,因此它具有以下特点:
(1) UDP是一种无连接、不可靠的数据报传输服务协议。
(2) UDP对数据传输过程中惟一的可靠保证措施是进行差错校验,如果发生差错,则只是简单地抛弃该数据报。
(3) 如果目标端收到的UDP数据报中的目标端口号不能与当前已使用的某端口号匹配,则将该数据报抛弃,并发送目标端口不可达的ICMP差错报文。
(4) UDP协议在设计时的简单性,是为了保证UDP在工作时的高效性和低延时性。因此,在服务质量较高的网络中(如局域网),UDP可以高效地工作。
(5) UDP常用于传输延时小,对可靠性要求不高,有少量数据要进行传输的情况,如DNS(域名服务)、TFTP(简单文件传输)等。
2、TCP
TCP报文段(常称为段)与UDP数据报一样也是封装在IP中进行传输的,只是IP报文的数据区为TCP报文段。

1.TCP 源端口号 TCP源端口号长度为16位,用于标识发送方通信进程的端口。目标端在收到TCP报文段后,可以用源端口号和源IP地址标识报文的返回地址。
2.TCP目标端口号 TCP目标端口号长度为16位,用于标识接收方通信进程的端口。源端口号与IP头部中的源端IP地址,目标端口号与目标端IP地址,这4个数就可以惟一确定从源端到目标端的一对TCP连接。
3.序列号 序列号长度为32位,用于标识TCP发送端向TCP接收端发送数据字节流的序号。
4.确认号 确认号长度为32位。
5.头部长度 该字段用4位二进制数表示TCP头部的长短,它以32位二进制数为一个计数单位。TCP头部长度一般为20个字节,因此通常它的值为5。
6.保留 保留字段长度为6位,该域必须置0,准备为将来定义TCP新功能时使用。
7.标志 标志域长度为6位,每1位标志可以打开或关闭一个控制功能,这些控制功能与连接的管理(3.3.2小节讲述)和数据传输控制有关,其内容如下所述:
●URG:紧急指针标志,置1时紧急指针有效。
●ACK:确认号标志,置1时确认号有效。如果ACK为0,那么TCP头部中包含的确认号字段应被忽略。
●PSH:push操作标志,当置1时表示要对数据进行push操作。
● RST:连接复位标志,表示由于主机崩溃或其他原因而出现错误时的连接。
●SYN:同步序列号标志,它用来发起一个连接的建立,也就是说,只有在连接建立的过程中SYN才被置1。
●FIN:连接终止标志,当一端发送FIN标志置1的报文时,告诉另一端已无数据可发送,即已完成了数据发送任务,但它还可以继续接收数据。
8.窗口大小 窗口大小字段长度为16位,它是接收端的流量控制措施,用来告诉另一端它的数据接收能力。
9.校验和 校验和字段长度为16位,用于进行差错校验。校验和覆盖了整个的TCP报文段的头部和数据区。
10.紧急指针 紧急指针字段长度为16位,只有当URG标志置1时紧急指针才有效,它的值指向紧急数据最后一个字节的位置(如果把它的值与TCP头部中的序列号相加,则表示紧急数据最后一个字节的序号,在有些实现中指向最后一个字节的下一个字节)。
11.选项 选项的长度不固定,通过选项使TCP可以提供一些额外的功能。每个选项由选项类型(占1个字节)、该选项的总长度(占1个字节)和选项值组成

12.填充 填充字段的长度不定,用于填充以保证TCP头部的长度为32位的整数倍,值全为0。
TCP连接的建立与关闭:
1. 建立连接 TCP使用“三次握手”(3-way Handshake)法来建立一条连接。所谓三次握手,就是指在建立一条连接时通信双方要交换三次报文。具体过程如下。
2.关闭连接 由于TCP是一个全双工协议,因此在通信过程中两台主机都可以独立地发送数据,完成数据发送的任何一方可以提出关闭连接的请求。关闭连接时,由于在每个传输方向既要发送一个关闭连接的报文段,又要接收对方的确认报文段,因此关闭一个连接要经过4次握手。

滑动窗口协议:
- 1比特滑动窗口协议,当发送窗口和接收窗口的大小固定为1时,滑动窗口协议退化为停等协议(stop-and-wait)。该协议规定发送方每发送一帧后就要停下来,等待接收方已正确接收的确认(acknowledgement)返回后才能继续发送下一帧。由于接收方需要判断接收到的帧是新发的帧还是重新发送的帧,因此发送方要为每一个帧加一个序号。由于停等协议规定只有一帧完全发送成功后才能发送新的帧,因而只用一比特来编号就够了。
- 后退n协议,由于停等协议要为每一个帧进行确认后才继续发送下一帧,大大降低了信道利用率,因此又提出了后退n协议。后退n协议中,发送方在发完一个数据帧后,不停下来等待应答帧,而是连续发送若干个数据帧,即使在连续发送过程中收到了接收方发来的应答帧,也可以继续发送。且发送方在每发送完一个数据帧时都要设置超时定时器。只要在所设置的超时时间内仍收到确认帧,就要重发相应的数据帧。如:当发送方发送了N个帧后,若发现该N帧的前一个帧在计时器超时后仍未返回其确认信息,则该帧被判为出错或丢失,此时发送方就不得不重新发送出错帧及其后的N帧。
- 选择重传协议,在后退n协议中,接收方若发现错误帧就不再接收后续的帧,即使是正确到达的帧,这显然是一种浪费。另一种效率更高的策略是当接收方发现某帧出错后,其后继续送来的正确的帧虽然不能立即递交给接收方的高层,但接收方仍可收下来,存放在一个缓冲区中,同时要求发送方重新传送出错的那一帧。一旦收到重新传来的帧后,就可以原已存于缓冲区中的其余帧一并按正确的顺序递交高层。这种方法称为选择重发(SELECTICE REPEAT),其工作过程如图所示。显然,选择重发减少了浪费,但要求接收方有足够大的缓冲区空间。

UDP与TCP笔记的更多相关文章
- 网络协议学习笔记(四)传输层的UDP和TCP
概述 传输层里比较重要的两个协议,一个是 TCP,一个是 UDP.对于不从事底层开发的人员来讲,或者对于开发应用的人来讲,最常用的就是这两个协议.由于面试的时候,这两个协议经常会被放在一起问,因而我在 ...
- python | 网络编程(socket、udp、tcp)
一.套接字 socket 1.1 作用:实现不同主机间的进程间通信(不同电脑.手机等设备之间收发数据) 1.2 分类:udp.tcp 1.3 创建 socket import socket socke ...
- udp和tcp通信
一.参考文档 1.从UDP的”连接性”说起–告知你不为人知的UDP 2.Linux UDP通信例子
- java网络编程socket\server\TCP笔记(转)
java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04| 分类: Socket | 标签:java |举报|字号 订阅 1 TCP的开销 a ...
- 移动端IM系统的协议选型:UDP还是TCP?
1.前言 对于有过网络编程经验的开发者来说,使用何种数据传输层协议来实现数据的通信,是个非常基础的问题,它涉及到你的第一行代码该如何编写. 从PC时代的IM开始,IM开发者就在为数据传输协议的选型争论 ...
- RUDP之一 —— UDP VS TCP
原文链接 原文:http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/ 介绍 大家好,我是Glenn Fiedler, ...
- 第五章 运输层(UDP和TCP三次握手,四次挥手分析)
序言 通过这章,可以知道其实三次握手和四次挥手其实真的好简单,通过这章的学习,我相信你也会同样的认为,以后在也不需要听到别人问三次握手的过程而自己一脸懵逼了,觉得人家好屌,其实也就是他懂你不懂,仅 ...
- 网游中的网络编程系列1:UDP vs. TCP
原文:UDP vs. TCP,作者是Glenn Fiedler,专注于游戏网络编程相关工作多年. 目录 网游中的网络编程系列1:UDP vs. TCP 网游中的网络编程2:发送和接收数据包 网游中的网 ...
- DNS分别在什么情况下使用UDP和TCP
DNS同时占用UDP和TCP端口53是公认的,这种单个应用协议同时使用两种传输协议的情况在TCP/IP栈也算是个另类.但很少有人知道DNS分别在什么情况下使用这两种协议. 如果用wiresha ...
随机推荐
- 一个C语言内存管理模块的实现
C 内存管理模块的编写 C语言手动管理内存很困难,有时候很难发现内存泄漏,这两天看了一下里面有写了一个简单的内存管理模块,发现挺精巧,可以有效检测内存泄漏 原理很简单,就是把C的malloc函数分配的 ...
- 5308: [Zjoi2018]胖
5308: [Zjoi2018]胖 链接 分析: 题目转化为一个点可以更新多少个点,一个点可以更新的点一定是一个区间,考虑二分左右端点确定这个区间. 设当前点是x,向右二分一个点y,如果x可以更新到y ...
- scrapy框架爬取小说信息
1.爬取目标网站:http://www.zhaoxiaoshuo.com/all.php?c=0&o=0&s=0&f=2&l=0&page=1 2.爬取目标网站 ...
- MYSQL之视图、触发器、事务
一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...
- SSIS 数据流的错误输出
数据流任务对错误的处理,和控制流不同,在数据流中,主要是对于错误行的处理,一般通过Error Output配置. 1,操作失败的类型:Error(Conversion) 和 Truncation. 2 ...
- 设计模式之module模式及其改进
写在前面 编写易于维护的代码,其中最重要的方面就是能够找到代码中重复出现的主题并优化他们,这也是设计模式最有价值的地方 <head first设计模式>里有一篇文章,是说使用模式的心智, ...
- hdu1754 I Hate It(线段树单点更新,区间查询)
传送门 有更新单个学生成绩和查询某个区间内学生成绩最大值两种操作 线段树代码 #include<bits/stdc++.h> using namespace std; +; using n ...
- 【微服务架构】SpringCloud组件和概念介绍(一)
一:什么是微服务(Microservice) 微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为一系列小的Web服务.这些小的Web服务可以独立地编译及 ...
- undefined和“undefined”
说实话,它们之间的区别挺明显的,我们一般认为undefined是JavaScript提供的一个“关键字”,而“undefined”却是一个字符串,只是引号的内容和undefined一样. undefi ...
- Oz 创建Ubuntu镜像
参考链接: http://blog.csdn.net/gcogle/article/details/52767135http://tlinux.blog.51cto.com/7288656/17497 ...