传输层协议之TCP/UDP
1、UDP
UDP协议是面向无连接的,即不需要在正式传递数据前先链接双方,UDP协议只是数据报文的搬运工,不保证有序且不丢失的传递到对端,且UDP协议无任何控制流量的算法,UDP相对于TCP更加轻便。
特征:
- 面向无连接:在发送端,应用层将数据传递给传输层的UDP协议,UDP只会给数据增加一个UDP头标识下是UDP协议,然后就传递给网络层了;在接收端,网络层将数据传递给传输层,UDP只是去除IP报文头就传递给了应用层。
- 不可靠性:UDP协议的不可靠性主要表现在以下几个方面:
- 无连接,想发就发
- 收什么数据就传什么数据且不会备份,也不会关新对端是否正确接收
- 无拥塞控制,一直会以恒定的速度发送数据,即使网络不好也不会调整速率,所以当网络不好时可能导致丢包
- 高效:UDP头部开销小,只有8个字节。由两个16位的端口号[源端口(可选)+目标端口]+整个报文的长度和整个数据报文的校验+IPv4(可选)组成
- 传输方式:单播(一对一)、多播(一对多)、广播(多对多)
- 适合使用场景:实时性要求高的地方,如直播、王者荣耀等
2、TCP
1)头部
- Sequence Number:这个序号保证了TCP传输的报文都是有序的,对端可以通过序号顺序拼接报文
- Acknowledgement number:次序号表示数据接收端期望接受的下一字节编号是多少,同时也表示上一个序号的数据已到达
- window size:窗口大小,表示还能接收多少字节的数据,用于流量控制
- 标识符:
- URG=1:表示本数据报文的数据部分包含紧急信息,是一个高优先级数据报文段,此时紧急指针有效
- ACK=1:表示确认号字段有效,TCP规定连接后传送的所有报文ACK=1
- PSH=1:表示接收端应该立即将数据PUSH给应用层,而不是等缓存区满之后再提交
- RST=1:表示当前TCP连接出现严重的问题,可能需要重新建立连接
- SYN=1:当SYN=1,ACK=0时,表示当前报文段是一个连接请求报文;当SYN=1,ACK=1时,表示当前报文段是一个同意连接请求的报文
- FIN=1:表示此报文段是一个释放连接请求的报文段
2)状态机
性能指标RTT:表示发送端发送数据到接收到对端数据所需要的往返时间
三次握手:
TCP协议中,主动发起请求的为客户端,被动连接的是服务端,连接后双方都能发送和接收数据,因此TCP是一个双全工协议
- 客户端发送连接请求到服务端,该报文段中包含自身的数据通讯初始序号,请求发送后,客户端便进入SYN-SENT状态
- 服务端收到连接请求报文后,如果同意连接,则发送一个应答,该应答中也包含自身数据通讯初始序号,发送完后进入SYN-RECEIVED状态
- 客户端收到连接同意应答后,还需要向服务端发送一个确认报文,发完后进入ESTABILISED状态,服务端接收到后也进入ESTABLISHED状态
TCP需要三次握手的原因:防止失效的连接请求段被服务端接收从而影响错误
四次挥手:
- 若客户端A认为发送数据完成,则他需要向服务端B发送连接释放请求
- B收到释放请求之后,会告诉应用层要释放TCP连接,然后会发送ACK包,并进入CLOSE-WAIT状态,表示A到B的连接已经释放,不再接收A发的数据了,但由于TCP连接是双向的,所以B仍然可以给A发送数据
- 若B此时还没发送完数据会继续发送,完毕后会向A发送释放连接请求,然后B进入LAST-ACK状态
- A收到释放请求后,向B发送确认应答,此时A进入TIME-WAIT状态,该状态会持续2MSL(最大段生存周期)时间,若该时间段内无B的重发请求就会进入CLOSED状态,当B收到确认应答后也进入CLOSED状态
A会进入TIME-WAIT状态等待2SML时间的原因:为了保证B能收到A的应答,若A发完确认后直接进入CLOSED状态,如果确认应答因为网络问题一直没送达,就会造成B不能正常关闭。
传输层协议之TCP/UDP的更多相关文章
- 传输层协议(tcp ip和udp 三次握手 四次握手)
1 TCP/IP协议介绍 TCP/IP协议:Transmission Control Protocol/Internet Protocol 传输控制协议/因特网互联协议. TCP/IP是一个Proto ...
- Google 打算用 QUIC 协议替代 TCP/UDP
有句话叫做一流企业定标准.二流企业做品牌.三流企业卖技术.四流企业做产品.Google 似乎在冲着一流企业的目标迈进.去年,Google 已经从以 SPDY 为基础的 HTTP 协议 16年 来的首个 ...
- 传输层协议TCP和UDP
本文力图简洁,让读者对TCP和UDP有个初步的认知.闲话少说,现在开始吧.TCP和UDP都是传输层的协议.TCP通过三次握手建立可靠连接,对未送达的消息重新进行发送.UDP不建立连接而直接发送,对未送 ...
- Android程序员必知必会的网络通信传输层协议——UDP和TCP
1.点评 互联网发展至今已经高度发达,而对于互联网应用(尤其即时通讯技术这一块)的开发者来说,网络编程是基础中的基础,只有更好地理解相关基础知识,对于应用层的开发才能做到游刃有余. 对于Android ...
- java 网络通信传输层协议——UDP和TCP
本文原文由作者“zskingking”发表于:jianshu.com/p/271b1c57bb0b,本次收录有改动. 1.点评 互联网发展至今已经高度发达,而对于互联网应用(尤其即时通讯网专注的即时通 ...
- TCP/IP 协议图--传输层中的 TCP 和 UDP
TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP. TCP 是面向连接的.可靠的流协议.流就是指不间断的数据结构,当应用程序采用 TCP 发送消息时,虽然可以保证发送的顺序,但 ...
- 浅谈传输层协议TCP和UDP
在当今因特网的层次结构中,传输层的协议主要有两种,其一为Transmission Control Protocol,即TCP:其二为User Datagram Protocol,即UDP. 1.TCP ...
- TCP/IP中的传输层协议TCP、UDP
TCP提供可靠的通信传输,而UDP则常用于让广播和细节控制交给应用的通信传输. 传输层协议根据IP数据报判断最终的接收端应用程序. TCP/IP的众多应用协议大多以客户端/服务端的形式运行.客户端是请 ...
- 稳住,传输层里的TCP与UDP协议
传输层协议 1.TCP协议介绍及报文格式 2.TCP三次握手三次挥手 3.UDP协议介绍 1.传输层有两个协议:TCP(传输控制协议) UDP(用户数据协议) . TCP是面向连接的,可靠的进程到进 ...
随机推荐
- MariaDB 默认是禁止远程访问的 我们改掉它
查询用户账号信息: select User, host from mysql.user; 现在只显示 root账户中的host项是localhost表示该账号只能进行本地登录,我们需要修改权限,输入 ...
- golang string、int、int64 float 互相转换
#string到int int,err := strconv.Atoi(string) #string到int64 int64, err := strconv.ParseInt(string, 10, ...
- html5 canvas简易时钟
<canvas id='clock' width=500 height=500> 您的浏览器需要升级 </canvas> <script type="text/ ...
- ctf活动结果
签到题:flag{0ca175b9c0f726831d895e269332461} 解题过程:使用winhex打开图片,查询到ANSI ASCII 得到结果 1.SimCTF{hello simple ...
- JavaScript_AMD规范
JavaScript_AMD规范 一.总结 一句话总结: Asynchronous Module Definition:AMD是"Asynchronous Module Definition ...
- In an ASP.NET website with a codebehind at what point are the .cs files compiled?
In an ASP.NET website with a codebehind at what point are the .cs files compiled? This applies to We ...
- log4j.properties 文件,放在 src 下
log4j.rootLogger=INFO,CONSOLE,ERRORLOGlog4j.appender.CONSOLE=org.apache.log4j.ConsoleAppenderlog4j.a ...
- android:layout_gravity 和 android:gravity 的区别?
第一个是让该布局在其父控件中的布局方式,第二个是该布局布置其字对象的布局方式
- 阶段3 2.Spring_03.Spring的 IOC 和 DI_1 ioc的概念和作用
IOC的含义 new的方式创建对象,是主动去找对象.对我的资源独立就变的很难,因为这有明显的依赖关系 第二种方式创建对象.app断开了和资源的联系,.而是去找工厂要一个资源.由工厂负责和资源去的联系, ...
- MySQL 创建函数报错 This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators
问题描述 通过Navicat客户端,创建MySQL函数(根据的当前节点查询其左右叶子节点)时报错,报错信息如下: This function has none of DETERMINISTIC, NO ...