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 ...
随机推荐
- CodeForces 85D Sum of Medians Splay | 线段树
Sum of Medians 题解: 对于这个题目,先想到是建立5棵Splay,然后每次更新把后面一段区间的树切下来,然后再转圈圈把切下来的树和别的树合并. 但是感觉写起来太麻烦就放弃了. 建立5棵线 ...
- 背包形动态规划 fjutoj2375 金明的预算方案
金明的预算方案 TimeLimit:1000MS MemoryLimit:128MB 64-bit integer IO format:%lld Problem Description 金明今天 ...
- CodeForces 1083 E The Fair Nut and Rectangles 斜率优化DP
The Fair Nut and Rectangles 题意:有n个矩形,然后你可以选择k个矩形,选择一个矩形需要支付代价 ai, 问 总面积- 总支付代价 最大能是多少, 保证没有矩形套矩形. 题解 ...
- 程序员过关斩将--更加优雅的Token认证方式JWT
菜菜,上次你讲的cookie和session认证方式,我这次面试果然遇到了 结果怎么样? 结果面试官问我还有没有更好的方式? 看来你又挂了 别说了,伤心呀.到底还有没有更好的方式呢? 你猜? 基于To ...
- 创建最简单的exe形式COM组件并在MFC程序调用
来新公司学习接手新项目,拿到代码打开解决方案看到里面竟然有40几个工程,有点吃惊.具体看代码也有很多之前没见过的写法,上了几天火. 有件事就没太搞明白,按照文档的说法上层很多软件都要调用IO服务器,但 ...
- Fire Balls 10——UI界面的制作
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- 从零开始开发IM(即时通讯)服务端(二)
好消息:IM1.0.0版本已经上线啦,支持特性: 私聊发送文本/文件 已发送/已送达/已读回执 支持使用ldap登录 支持接入外部的登录认证系统 提供客户端jar包,方便客户端开发 github链接: ...
- (转)为什么HashMap中链表长度超过8会转换成红黑树
原博地址:https://blog.csdn.net/xingfei_work/article/details/79637878 HashMap在jdk1.8之后引入了红黑树的概念,表示若桶中链表元素 ...
- Python(Head First)学习笔记:六
6 定制数据对象:数据结构自定义 打包代码与数据 james2.txt: James Lee,2002-3-14,2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-2 ...
- cmd命令查看已连接的WiFi密码
实验环境:Windows 10.命令提示符(管理员权限) 一.CMD命令查看WiFi密码 使用方法: ①.运行CMD(命令提示符) (确保无线网卡启用状态)②.输入命令查看WiFi配置文件: # ...