TCP/UDP的小事情
UDP:
没有复杂的控制机制,面向无连接的通信服务。
常用于:
包总量少的通信
音视频传输(即时通信)
TCP:
对传输、发送、通信、进行控制的协议。面向有连接的协议,只有在确认通信对端存在时才会发送数据,UDP是对端不存在也会发送。
通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠的传输。
① 通过序列号和确认应答提高TCP的可靠性
- 确认应答(ACK):当发送端数据达到接收主机时,接受主机会返回一个已收到消息的通知,这就是ACK。如果发送端没有收到确认应答,就会进行重发。
- 序列号:按顺序给发送数据标上号码的编号,接收端查询接收数据TCP首部中的序列号和数据长度,将自己下一步应该接受的序号作为确认应答返送回去。
- 接收端会根据序列号的判断需要接受数据。
- 通过序列号可以避免接受端收到数据,确认应答没有返给发送端,导致发送端一直重发数据的情况。
② 重发超时如何确定
- 重发超时是指在重发数据之前,等待确认应答到来的那个特定的时间间隔。如果超过这个时间还没有收到确认应答,发送端就会进行重新发送数据。
- 那么这个时间如何确定呢?根据不同网络波段拥堵情况不一样,需要计算每次发包的往返时间及其偏差。
③ 连接管理
- 使用TCP的首部字段进行管理TCP连接,一次连接与断开至少需要七次来回发包。
④ TCP以段来发送数据
- 在建立TCP的连接时,也可以确定发送数据包的单位,我们称其为最大消息长度MSS。最理想的情况是MSS正好是IP中不会被分片处理的最大数据。
- MSS是在三次握手时计算出来的,两端的主机发送连接请求时,会在TCP首部中写入MSS,告诉对方自己适应的尺寸,然后选择一个较小的值投入使用。
⑤ 利用窗口控制提高速度
- TCP以1个段为单位,每发一个段进行一次应答处理,这样处理有一个缺点,那就是包的往返时间越长通信性能就越低。为了解决这个问题,TCP就引入了窗口的概念。
- 窗口的大小是指无需确认应答而可以继续发送数据的最大值,如图,窗口大小为4个段。
⑥ 窗口控制与重发控制
- 连续三次收到同一个应答,会对其重发,高速重发精致。
⑦ 流控制
- 这种机制可以让发送端根据接受端的实际接受能力控制发送的数量。
- TCP首部中,专门有一个字段用来通知窗口大小。
- 接收端向发送端主机通知自己可以接受数据的大小,于是发送端会发送不超过这个限度的数据。
⑧ 拥塞控制
- 在通信一开始的时候,会有一个慢启动的算法的出的值,对发送数据量进行控制。避免通信开始时连续发包导致的网络拥堵。
TCP结构
TCP中没有表示包长度和数据长度的字段,可由IP层获知TCP的包长,有TCP的包长可获知数据的长度。
源端口号:
表示发送端端口号,字段长16位。
目标端口号:
表示接收端端口号,字段长16位。
序列号:
字段长32位,序列号是指发送数据所在的位置。每发送一次数据,就累加一次该数据的字节数的大小。
序列号不会从0或者1 开始,而是建立连接时由计算机产生的随机数作为初始值,通过SYN包传给接收端主机,然后再由每转发过去的字节数累加到初始值上表示数据的位置。此外,在建立连接和断开连接时发送的SYN包和FIN包虽然本身不携带数据,但是也会作为一个字节增加对应的序列号。
确认应答号:
确认应答号字段长度为32位,是指下一次应该收到的数据的序列号。实际上,它是指已收到的确认应答减一为值得数据。发送端在收到这个确认应答以后可以认为在这个序号之前的数据都已经被正常接收到了。
数据偏移:
该字段表示TCP所传输的数据部分应该从TCP包的哪个位开始计算,当然也可以把它看做是TCP首部的长度。该字段长4位,单位字节4字节即32位。如果该字段的值为5,那说明从TCP包的最一开始到20字节位置都是TCP首部,余下部分是TCP数据。
保留
该字段主要是为了以后扩展使用,一般设置为0,但即使收到的包中该字段不为0,也不会丢弃。
控制位
每一位从左至右分别为CWR,ECE,URG,ACK,PSH,RST,SYN,FIN。
- CWR:CWR标志与后面的ECE标志,都用于IP首部的ECN字段,ECE的标志位1时,则通知对方已将阻塞窗口缩小。
- ECE:ECE标志,置为1时会通知对方,从对方到这边的网络有阻塞。在收到数据包IP首部中ECN为1时将TCP首部中ECE设置为1,
- URG:该位为1时,表示包中有需要紧急处理的数据。对于需要紧急处理的数据,会在后面的紧急指针中在进行解释。
- ACK:该位为1时,确认应答有效,TCP规定除了最初建立连接时的SYN包之外该位必须设置为1。
- PSH:该位为1时,表示需要将受到的数据立刻传给上层应用协议,为0时,则不需要穿而是先进行缓存。
- RST:该位为1时,表示TCP连接中出现异常必须强制断开连接。
- SYN:用于建立连接。SYN为1时表示希望建立连接,并在其序列号的字段进行序列号初始值的设定。
- FIN:该位为1时,表示今后不会再有数据发送,希望断开连接,当通信结束希望断开连接时,通信双方的主机之间就可以相互交换FIN位置为1的TCP段,每个主机又对对方的FIN包进行确认应答以后就可以断开连接。不过,主机收到FIN设置为1 时的TCP段,以后不必马上回复一个FIN包,而是等到缓冲区中所有的数据都因成功发送而被自动删除后在发送确认应答。
窗口大小
该字段长为16,用于通知从相同TCP首部的确认应答号所指位置开始能够接受数据大小,TCP不允许发送超过此处所示大小的数据。如果窗口大小为0,表示窗口探测,以了解最新的窗口大小。
校验和
同UDP
紧急指针
本报文中的紧急数据的指针。
选项
提高TCP的性能。
UDP结构
除去数据部分正是UDP的首部,UDP首部由源端口号、目标端口号、包长、校验和组成。
包长度
该字段保存了UDP首部的长度跟数据的长度之和。
校验和
校验和是为了提供可靠的UDP首部和数据而设计。
TCP/UDP的小事情的更多相关文章
- 第二十七天- 网络通信协议 TCP UDP 缓冲区
1.网络通信协议 osi七层模型:按照分工不同把互联网协议从逻辑上划分了层级 socket层 2.理解socket: Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计 ...
- TCP/UDP区别&&心跳包机制【转】
转自:https://www.jianshu.com/p/6d93a3c21c34 UDP:用户数据报协议:主要用在实时性要求比较高的以及对质量相对较弱的地方.但是面对现在高质量的线路不会容易丢包,除 ...
- Fixed-Length Frames 谈谈网络编程中应用层(基于TCP/UDP)的协议设计
http://blog.sina.com.cn/s/blog_48d4cf2d0101859x.html 谈谈网络编程中应用层(基于TCP/UDP)的协议设计 (2013-04-27 19:11:00 ...
- 网络基础--简单理解什么是DNS? TCP? UDP? Http? Socket?
什么是IP 协议? 协议就是为了实现网络通信而创建的一系列规范. 通常我们的网络模型从上到下共分为4层: 应用层, 传输层, 网络层 和数据链路层. IP协议属于网络层协议,它精确定义了网络通信中 ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.3.1
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.2.3
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.2.2 正式发布
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- tcp/udp高并发和高吐吞性能测试工具
在编写一个网络服务的时候都比较关心这个服务能达到多少并发连接,而在这连接的基础上又能达到一个怎样的交互能力.编写服务已经是一件很花力气的事情,而还要去编写一个能够体现结果的测试工具就更加消耗工作时间. ...
- TCP/UDP详解
转载:http://www.cnblogs.com/visily/archive/2013/03/15/2961190.html, 作者:望梅止渴 相关: HTTP协议详解 深入理解HTTP协议 T ...
随机推荐
- CF 988C Equal Sums 思维 第九题 map
Equal Sums time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...
- iOS组件化实践
参考资料: http://wereadteam.github.io/2016/03/19/iOS-Component/#more https://casatwy.com/iOS-Modulizatio ...
- 关于重写对象equals方法的问题
1.==和equals的区别 a.基本数据类型使用 == 进行值的比较 b.引用类型使用 == 进行比较时,直接比较的是对象的存储地址,即两个引用是否指向了同一个对象. c.equals方法是基类O ...
- 2019本科se第一次作业-博客初体验-chris
(1)第一章 计算机专业术语总结: 软件=程序+软件工程.程序=数据结构+算法.软件.程序.用户.需求.应用程序.软件服务.源程序.软件架构(Software Architecture).软件设计与 ...
- Sublime运行C++程序教程
前言 传说sublime是全球最好的编辑器,可是只是编辑器啊!!!如果要运行,对于我们这些蒟蒻来说,不得不去使用DEV_C++.我们总是幻想能让sublime变成一个轻量级IDE,那该多好啊!!! 那 ...
- 湘潭大学oj循环1-5
#include <stdio.h>#include <stdlib.h> int main(){ int b,s,n; int a[101]; A:scanf(&q ...
- docker java环境 直接做成镜像 跑自己的java包
yum install docker #基于阿里源 可以直接下载 systemctl restart docker ifconfig #出现 docker0 说明环境部署成功 docker ver ...
- TestNG(一) TestNG实战在idea中创建module
1.在ider里创建一个Module 2.直接点击下一步 3.输入Groupld h和Artifactid名称,点击下一步 4.点击Finish 创建完成
- 2019年9月3日安卓凯立德全分辨率(路况)夏季版C3551-C7M24-3K21J25懒人包
拷贝懒人包NaviOne文件夹到机器根目录或内存卡根目录下:安装其中的apk程序 2019凯立德C3551-C7M24-3K21J25新组合懒人包 [分辨率]:自适应 [适用系统]:Android2. ...
- svn新建文件不能提交的解决方法
svn新建文件不能提交的解决方法 在当前新建文件的目录下,右键空白处: 选择Properties 找到所有有ignore字眼的属性,查看这个属性的继承目录(inherited from),入我的是cl ...