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的更多相关文章

  1. 传输层协议(tcp ip和udp 三次握手 四次握手)

    1 TCP/IP协议介绍 TCP/IP协议:Transmission Control Protocol/Internet Protocol 传输控制协议/因特网互联协议. TCP/IP是一个Proto ...

  2. Google 打算用 QUIC 协议替代 TCP/UDP

    有句话叫做一流企业定标准.二流企业做品牌.三流企业卖技术.四流企业做产品.Google 似乎在冲着一流企业的目标迈进.去年,Google 已经从以 SPDY 为基础的 HTTP 协议 16年 来的首个 ...

  3. 传输层协议TCP和UDP

    本文力图简洁,让读者对TCP和UDP有个初步的认知.闲话少说,现在开始吧.TCP和UDP都是传输层的协议.TCP通过三次握手建立可靠连接,对未送达的消息重新进行发送.UDP不建立连接而直接发送,对未送 ...

  4. Android程序员必知必会的网络通信传输层协议——UDP和TCP

    1.点评 互联网发展至今已经高度发达,而对于互联网应用(尤其即时通讯技术这一块)的开发者来说,网络编程是基础中的基础,只有更好地理解相关基础知识,对于应用层的开发才能做到游刃有余. 对于Android ...

  5. java 网络通信传输层协议——UDP和TCP

    本文原文由作者“zskingking”发表于:jianshu.com/p/271b1c57bb0b,本次收录有改动. 1.点评 互联网发展至今已经高度发达,而对于互联网应用(尤其即时通讯网专注的即时通 ...

  6. TCP/IP 协议图--传输层中的 TCP 和 UDP

    TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP. TCP 是面向连接的.可靠的流协议.流就是指不间断的数据结构,当应用程序采用 TCP 发送消息时,虽然可以保证发送的顺序,但 ...

  7. 浅谈传输层协议TCP和UDP

    在当今因特网的层次结构中,传输层的协议主要有两种,其一为Transmission Control Protocol,即TCP:其二为User Datagram Protocol,即UDP. 1.TCP ...

  8. TCP/IP中的传输层协议TCP、UDP

    TCP提供可靠的通信传输,而UDP则常用于让广播和细节控制交给应用的通信传输. 传输层协议根据IP数据报判断最终的接收端应用程序. TCP/IP的众多应用协议大多以客户端/服务端的形式运行.客户端是请 ...

  9. 稳住,传输层里的TCP与UDP协议

    传输层协议 1.TCP协议介绍及报文格式 2.TCP三次握手三次挥手 3.UDP协议介绍 1.传输层有两个协议:TCP(传输控制协议)  UDP(用户数据协议) . TCP是面向连接的,可靠的进程到进 ...

随机推荐

  1. LeetCode328----奇偶链表

    给定一个单链表,把所有的奇数节点和偶数节点分别排在一起.请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性. 请尝试使用原地算法完成.你的算法的空间复杂度应为 O(1),时 ...

  2. 关于虚拟机中Linux系统无法上网之后的解决方案

    我刚刚安装好虚拟机上的Linux的时候,宿主机网络正常,但虚拟机中虽然显示网络连接正常,但无法上网,因此我打开了网络设置 这是默认设置,但上不了网,而按照网上的查找结果,选择NAT是没错的,但仅限于w ...

  3. 循环链表C语言实现

    按照单链表的设计,稍加改动.和单向链表不一样的地方,头节点不指向NULL,而是指向自己head 循环链表的判满 1)判断next是不是头结点,2)判断size /* * CycleLinkList.h ...

  4. Mysql超强卸载

    1.控制面板——>所有控制面板项——>程序和功能,卸载mysql server! 2.删除MySQL文件,尤其是ProgramData里面的隐藏文件MySQL,我当时没有删除,重新安装My ...

  5. SpringBoot启动加载yml配置文件出现编码格式错误

    Caused by: org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input l ...

  6. NMS(非极大值抑制算法)

    目的:为了消除多余的框,找到最佳的物体检测的位置 思想: 选取那些领域里分数最高的窗口,同时抑制那些分数低的窗口 Soft-NMS

  7. 四十七:数据库之alembic数据库迁移工具的基本使用

    在一般情况下,如果修改了模型,如增加或者删除了字段,SQLAlchemy是不会更新的,这就需要使用alembic来实现 使用alembic步骤:一:定义好模型二:使用alembic创建一个仓库:ale ...

  8. 【Java基础】对象序列化与读写

    package com.test.io; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...

  9. freebsd 隐藏ssh版本号

    方案一: vi /etc/ssh/sshd_config VersionAddendum 为空或者no或者别的信息 /etc/rc.d/sshd restart 方案二: https://kram.n ...

  10. CSS3 —— 文本 背景 列表 渐变

    <span>标签 作用 ——  能让某几个文字或者某个词语凸显出来 候选字体 p {font-family: Times, TimesNR, 'New Century Schoolbook ...