从通信信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能的最底层。

传输层位于应用层和数据链路层之间,主要有两个协议,用户数据报协议UDP(User Datagram Protocol)、传输控制协议TCP(Transmission Control Protocol)。

UDP在发送数据前不需要建立连接,所以首部不需要存储太多数据,只有四部分(源端口、目的端口、长度、检验和),各占2个字节,其中长度属性并没必要,因为完全可以在数据链路层计算出来,这里存在是为了保障头部占据8字节。

这里增加了一个【伪首部】,伪首部的数据是不会发送到下一层的,仅仅是用于检验和增强校验的功能,检验和将首部(包括伪首部)和数据部分一起计算。

UDP请求抓包后可以看到只有几项数据,源端口52364,目的端口53,总长度43字节,检验和看起来无效。

但TCP就不同了,发送数据前需要建立连接,并且尽可能的保障数据可靠交付,首部会有更多的属性来记录信息。

  • 序号(Sequence Number) --- 4字节, TCP传输过程中每一个字节都有编号,建立连接后,序号表示TCP数据部分的第一个字节编号(实际是一个非常大的值,非常大的值 - 固定值 = 小的编号,同一请求有一个固定值,固定值来源于建立连接时seq=0时的值)
  • 确认号(Acknowledgment Number) --- 期望对方下一次传过来的TCP数据部分的第一个字节编号
  • 数据偏移 --- 4位,范围0x0101-0x1111,换成十进制乘以以4为首部长度(20-60字节)
  • 保留 --- 暂时没什么用,占6位(标志位有三位没什么用就划到了保留位中),有些资料会说占3位,标志位占9位
  • 标志位(Flags) --- 6位
    • URG: urgent(紧急)--- 为1时,紧急指针中的数据才有作用
    • ACK: acknowledgment(确认)--- 为1时,确认号字段才有效
    • PSH: push --- 交互式网络通信才有用
    • RST: reset(重置)--- 为1时,表示tcp连接中出现问题,要释放连接并重新建立连接
    • SYN: synchronization(同步,用于建立连接)--- syn=1,ack=0时表明建立连接,服务器同意时回复syn=1,ack=1
    • FIN: finish(终止连接)--- 为1时,表示要求释放连接
  • 窗口(Window) --- 2字节,流量控制功能,告知下一次允许发送的数据大小
  • 检验和(checksum) --- 2字节,计算伪首部(12字节、不会传递给网络层) + 首部 + 数据
  • 紧急指针: 2字节,urg为1时生效,放置的是长度,表示tcp数据中前x位是紧急数据,尽快传送
  • 选项:长度可变,当建立连接时,可靠传输和流量控制时需要

从抓包数据可以看到,序号为0,但它真实的序号是一个非常大的数字(631127820),确认号为0,数据偏移为8,乘以4得出的首部长度为32字节,标志位折叠起来了,里面的syn是1,其余都是0,这里是建立连接的时候。

窗口大小64240,检验和看起来无效,紧急指针为0,选项中有12字节,里面定义了一些建立连接需要用的其它数据,加上首部其他属性的默认20字节,与总长度32字节对应。

首部存储信息的不同决定着UDP和TCP存在很大的差异。

UDP适合实时的场景,比如直播、视频通话,即使有些时候卡顿,没听清内容、没看到画面,也不影响通信的正常进行。

TCP正好相反,适用于需要数据完整的场景,比如邮件、浏览器、文件传输等,这些场合如何丢失了一些文字和数据,可能语义就完全变了,会对内容完整性有较大影响。

而TCP又如何做到保障数据的可靠传输呢?敬请期待我下一篇文章~

以上就是 传输层之UDP与TCP的首部的内容 , 更多有关 前端网络协议 的内容可以参考我其它的博文,持续更新中~

传输层之UDP与TCP的首部的更多相关文章

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

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

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

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

  3. 网络协议学习笔记(四)传输层的UDP和TCP

    概述 传输层里比较重要的两个协议,一个是 TCP,一个是 UDP.对于不从事底层开发的人员来讲,或者对于开发应用的人来讲,最常用的就是这两个协议.由于面试的时候,这两个协议经常会被放在一起问,因而我在 ...

  4. Linux内核--网络栈实现分析(五)--传输层之UDP协议(上)

    本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明出处http://blog.csdn.net/yming0221/article/details/7532512 更多请看专栏, ...

  5. LwIP Application Developers Manual4---传输层之UDP、TCP

    1.前言 本文主要讲解传输层协议UDP TCP 2.UDP 2.1 UDP from an application perspective 2.2 UDP support history in lwI ...

  6. Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手)

    Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手) 一丶CS/BS 架构 C/S: 客户端/服务器    定义:       ...

  7. 理解传输层中UDP协议首部校验和以及校验和计算方法的Java实现

    UDP,全称User Datagram Protocol,用户数据报协议,是TCP/IP四层参考模型中传输层的一种面向报文的.无连接的.不能保证可靠的.无拥塞控制的协议.UDP协议因为传输效率高,常用 ...

  8. 传输层中的协议 TCP & UDP

    面向连接的TCP协议 “面向连接”就是在正式通信前必须要与对方建立起连接.比如你给别人打电话,必须等线路接通了.对方拿起话筒才能相互通话.TCP(Transmission Control Protoc ...

  9. [19/04/13-星期六] 网络编程_基本概念(关注传输层、数据传输,TCP和UDP)

    一.概念 ▪ 什么是计算机网络? 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统, 网络管理软件及网络通信协议的管理和协调下,实现资源共享和信 ...

  10. 实验:传输层:UDP协议 学习笔记

    一.传输层协议 从之前介绍的网络层协议来看,通信的两端是两台主机,IP数据报首部就标明了这两台主机的IP地址.但是从传输层来看,是发送方主机中的一个进程与接收方主机中的一个进程在交换数据,因此,严格地 ...

随机推荐

  1. 聊一聊 Valgrind 监视非托管内存泄露和崩溃

    一:背景 1. 讲故事 只要是程序总会出现各种莫名其妙的问题,比如:非托管内存泄露,程序崩溃,在 Windows 平台上一般用微软自家的官方工具 App Verifier 就可以洞察,那问题出在 Li ...

  2. k8s资源对象

    什么是资源对象? 所谓资源对象是指在k8s上创建的资源实例:即通过apiserver提供的各资源api接口(可以理解为各种资源模板),使用yaml文件或者命令行的方式向对应资源api接口传递参数赋值实 ...

  3. CD的认知与学习

    cd命令的作用 ●ls可以理解成当前而cd是切换到那一层 ls查看当前目录下的所有文件(不包含隐藏): ls /查看/下的所有文件 cd 切换到哪个文件下 pwd命令的作用 通过ls来验证当前的工作目 ...

  4. wsl下的python环境管理

    开头 之前一直都在用python解释器和virtualenv来管理python的虚拟环境,但是被老大吐槽不好用之后,换了一种新的管理方式,那就是 pyenv + pyenv-virtualenv的使用 ...

  5. 2023-03-04:定义一个二维数组N*M,比如5*5数组下所示: 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,

    2023-03-04:定义一个二维数组NM,比如55数组下所示: 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0 ...

  6. 2022-05-21:给定一个数组arr,长度为n, 表示n个服务员,每个人服务一个人的时间。 给定一个正数m,表示有m个人等位。 如果你是刚来的人,请问你需要等多久? 假设:m远远大于n,比如n<=

    2022-05-21:给定一个数组arr,长度为n, 表示n个服务员,每个人服务一个人的时间. 给定一个正数m,表示有m个人等位. 如果你是刚来的人,请问你需要等多久? 假设:m远远大于n,比如n&l ...

  7. 代码随想录算法训练营Day36 贪心算法

    代码随想录算法训练营 代码随想录算法训练营Day36 贪心算法| 435. 无重叠区间 763.划分字母区间 56. 合并区间 435. 无重叠区间 题目链接:435. 无重叠区间 给定一个区间的集合 ...

  8. 基于.NetCore开发博客项目 StarBlog - (28) 开发友情链接相关接口

    前言 之前介绍的友情链接功能,只实现了友情链接的展示和管理接口. 还缺失友情链接申请.审核管理.通知,现在把这块功能补全. Model 什么的之前那篇文章都有,本文直接补全逻辑代码~ 详见: 基于.N ...

  9. 在R中子集化数据框的5种方法

    由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接. 通常,我们在使用大型数据集时,只会对其中的一小部分感兴趣,用以进行特定分析. 那么,我们应该如 ...

  10. 「Python实用秘技14」快速优化Python导包顺序

    本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第14 ...