详解TCP与UDP
一、TCP的特点
- 面向连接的、可靠的、基于字节流的传输层通信协议。
- 将应用层的分割成报文段,并发送发给目标节点的TCP层。
- 数据包都有序号,对方收到则发送ACK确认,未收到则重传。
- 使用效验和来效验数据在传输过程中是否有误。
二、TCP报文信息
报文头包含信息有:
- 源端口、目的端口
- 标示进程(socket):IP地址+协议+端口号
TCP的flags标志:
- URC:urgent,紧急指针,为1时有效;
- ACK:确认序列号标志;
- PSH:push标志,数据不进入缓存区,直接交给应用程序;
- RST:重置连接标志;
- SYN:同步序列号,用于建立连接过程;
- FIN:finish标志,用于释放连接。
三、TCP的三次握手
流程图如下(自己画的呦~ 推荐工具:在线网址ProcessOn):

TCP三次握手流程图详细说明:
- 建立连接时,客户端发送SYN包(seq=x)到服务端,并进入SYN-SEND状态,等待服务器确认。
- 服务器收到SYN包,必须确认客户端的SYN(ack=x+1),同时,自己也发送一个SYN包(seq=y),即SYN+ACK包,此时,服务器进入SYN-RECV状态。
- 客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户和服务器进入ESTABKISHED状态。开始数据传输。
四、TCP的四次挥手

TCP四次挥手流程图详细说明:
- client发送一个FIN后,用来关闭client到service的数据传输,client进入FIN-WAIT-1状态。
- service收到FIN后,发送一个ACK给client,确认序号为收到的seq+1(与SYN相同,一个FIN占用一个序号),service进入CLOSED-WAIT。
- service发送一个FIN,用来关闭service到client的数据传输,service进入LAST-ACK状态。
- client收到FIN后,client进入TIME-WAIT状态,接着发送一个ACK给service,确认序号为收到的序号+1。service进入CLOSED状态,完成四次挥手。
五、TCP的滑动窗口
作用:① 保证TCP的可靠性;
②保证TCP的流控制特性(数据顺序发送)。

六、UDP的特点
- 面向非连接的
- 不维护连接状态,支持同时想多个客户端传输相同的消息
- 数据包报文头只有8个字节,额外开较少
- 吞吐量只受限于数据生成速率、传输速率及机器性能
- 尽最大努力交互,不保证可靠交付,不维持连接状态表
- 面向报文,不对应用程序提交的报文进行拆分和合并
七、TCP和UDP的区别
- 面向连接/无连接
- 可靠/不可靠
- 报文有序/无序
- 速度
- 量级
详解TCP与UDP的更多相关文章
- 详解TCP和UDP数据段的首部格式
TCP数据段的首部格式: 源端口号(16) 目的端口号(16) 序列号(32) 确认应答号(32) 数据偏移(4) 保留(6) 代码位(6) 窗口(16) 校验和(16) 紧急指针 选项(长度可变) ...
- 第6章 传输层(详解TCP的三次握手与四次挥手)
第6章 传输层 传输层简介 传输层为网络应用程序提供了一个接口,并且能够对网络传输提供了可选的错误检测.流量控制和验证功能.TCP/IP传输层包含很多有用的协议,能够提供数据在网络传输所需的必要寻址信 ...
- 详解TCP连接的“三次握手”与“四次挥手”(下)
上文链接: 详解TCP连接的"三次握手"与"四次挥手"(上) 四.TCP的四次挥手(Four-Way Wavehand) 0.前言 对于"三次握手&q ...
- 详解TCP的三次握手四次断开
本文将分别讲解经典的TCP协议建立连接(所谓的“3次握手”)和断开连接(所谓的“4次挥手”)的过程. 尽管TCP和UDP都使用相同的网络层(IP),TCP却向应用层提供与UDP完全不同的服务.TCP提 ...
- 详解TCP连接的“三次握手”与“四次挥手”(上)
一.TCP connection 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西: 由于TCP不存在连接的概念,只存在请求和响应,请求和响应都是数据包,它 ...
- 详解TCP三握四挥
TCP握手协议 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确 ...
- OSI七层模型详解 TCP/IP协议
总结 OSI中的层 功能 TCP/IP协议族 应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等 表示层 数据格式化,代码转 ...
- 详解 TCP的三次握手四次挥手
本文转载来自https://blog.csdn.net/qzcsu/article/details/72861891 背景描述 通过上一篇中网络模型中的IP层的介绍,我们知道网络层,可以实现两个主机之 ...
- TCP/IP详解之:UDP协议
第11章 UDP协议 UDP首部 UDP的检验和是可选的,而TCP的检验和是必须的: UDP的检验和是端到端的检验和.由发送端计算,由接收端验证: 尽管UDP的检验和是可选的,但总是推荐被使用 IP ...
随机推荐
- 松软科技web课堂:字符串方法和属性
字符串方法帮助您处理字符串. 字符串方法和属性 原始值,比如“Bill Gates”,无法拥有属性和方法(因为它们不是对象). 但是通过 JavaScript,方法和属性也可用于原始值,因为在执行方法 ...
- 使用docker-compose部署springboot项目
由于是单机测试,没有测试多主机的跨网络分布式请求. 项目是前后分离的,所以使用nginx作为前端服务器,后端是springboot则直接基于java8环境的容器上跑,cache用的redis,mysq ...
- python升级带来的yum异常(解决错误File "/usr/bin/yum", line 30 except KeyboardInterrupt, e:)
解决错误File "/usr/bin/yum", line 30 except KeyboardInterrupt, e: 错误: 原因: 这是因为yum采用python作为命令解 ...
- PyCharm如何导入python项目,并配置虚拟环境
Pycharm导入python项目 进入PyCharm后,点击File→Open,然后在弹窗中选择需要导入项目的文件夹: 打开了python项目后,需要配置该项目对应的python才可以正常运行: 配 ...
- 高通电池管理基于qpnp-vm-bms电压模式
CV:Constant Voltage恒压 SMMB charger:Switch-ModeBattery Charger and Boost peripheral开关模式电池充电器和升压外围设备 O ...
- 发送get请求接口
一.简介 python做接口测试,我们需要了解和学习第三方库requests.python内置的urllib模块,也用于访问网络资源,但是使用较麻烦,而且缺少很多实用的高级功能.这里推荐使用reque ...
- 【ECNU71】一个游戏(水题)
点此看题面 大致题意: \(n\)种元素,有若干组将\(x\)元素转化为\(y\)元素的操作.问对于所有可能的元素拥有状况,改变转化操作的顺序,是否会影响转化后最终的结果. 水题 虽说是这么水的题,但 ...
- AFO!
\(update:2019-12-13\) 成绩已经出了,我的OI生涯也算是正式结束了.虽然成绩并不满意,但好在也是收获了一个省一(虽然我不一定用).总的来说,作为正式选手不到两年半的OI之路走得并不 ...
- Codechef October Challenge 2019 Division 1
Preface 这次CC难度较上两场升高了许多,后面两题都只能借着曲明姐姐和jz姐姐的仙气来做 值得一提的是原来的F大概需要大力分类讨论,结果我写了一大半题目就因为原题被ban了233 最后勉强涨了近 ...
- 定时锁屏程序,Python祝你原理猝死!
高以翔事件 11月27日在<追我吧>第九期节目的录制过程中,当期参与嘉宾高以翔奔跑时突然减速倒地,节目现场医护人员第一时间展开救治,并紧急将其送往医院.经过两个多小时的全力抢救,医院最终宣 ...