UDP头部

可以看到UDP头部由(源端口)、(目的端口)、(长度)跟(校验和)组成,总共8字节。

源端口:发送方的端口号,16位,即2字节。
目的端口:接收方的端口号,16位,即2字节。
长度:头部+数据的字节数,16位,即2字节。
校验和:此字段用来校验数据是否出错。

UDP最小长度:即无数据的情况下,仅首部长度8字节。
UDP数据部分最小长度:即无数据的情况下,0字节。
UDP最大长度:因长度字段16位限制,所以最大长度为216-1=65535字节。
UDP数据部分最大长度:即UDP最大长度-IP最小头部-UDP头部,216-1-20-8=65507字节

TCP头部

TCP为保证数据的可靠传输,自然多了很多东西。

源端口:16位,2字节。
目的端口:16位,2字节。
序号:此报文的序号[1],可用于确认。
确认号:用于确认序号[1]
数据偏移:

数据部分往后偏移,这是TCP的头部长度字段,代表有多少个32bit,即1代表32bit,2代表64bit。
一共4位最大为15,15×32=480b=60B。所以头部最大为60个字节,最小为20字节。
(此字段与图中选项字段相关联)

接下来是保留字段,未使用。
下面是6位用于TCP通信的字段,相应位置1表示特殊的信号。比如典型的SYN、FIN和ACK用于三次握手和四次挥手[2]
窗口:用于拥塞控制,接收方可以控制发送方发送数据报文的吞吐量,防止自己太忙来不及接收。
校验和:此字段用来校验数据是否出错。
紧急指针:用于发送紧急数据的情况。
选项与填充:

TCP头部的长度可以变化,因此可以承载更多的数据。
注意这里必须使用32位的数据,用来快速定位数据部分的位置,所以没有那么多数据的话需要在后面进行填充。
这里与数据偏移字段相关联,这样就可以知道头部的长度以及数据部分的准确位置。

[1]:关于序号和确认号,不是简简单单为数据随意编号,确认号也不是确认数据报文的序号。可以点击这里看我关于TCP序号和确认号的博客
[2]:关于三次握手和四次挥手的细节,可以点击这里看我关于三次握手和四次挥手的博客

IP头部

版本:IP的版本,IPv4或IPv6,4bit。
首部长度:跟TCP头部中的数据偏移意义一致。
区分服务:这是Tos字段,用于Oos服务质量中,这个一两句话也说不完。
总长度:顾名思义,指整个数据报的长度(以字节为单位)。占16bit,最大长度为65535字节。
标识:用来唯一地标识主机发送的每一份数据报。通常每发一份报文,它的值会加1。
标志:占3比特。标志一份数据报是否要求分段。详细可以看这里:https://blog.csdn.net/NetRookieX/article/details/80640383
片偏移:占13比特。如果一份数据报要求分段的话,此字段指明该段偏移距原始数据报开始的位置。
生存时间:即TTL。可用于防止环路占用带宽,每经过一跳路由器则TTL减1,减为0则丢弃数据包。
协议:标识了上层所使用的协议
01 ICMP
02 IGMP
06 TCP
17 UDP
88 IGRP
89 OSPF
首部校验和:用来做IP头部的正确性检测,但不包含数据部分。 因为每个路由器要改变TTL的值,所以路由器会为每个通过的数据包重新计算这个值。
源地址:发送方的IP地址
目的地址:接收方的目的地址
可选字段与填充:与TCP中选项与字段意义一致。

数据链路层头部

这里指出图中缺点:CRC应改为FCS,FCS才是字段,CRC为校验方式。

目的地址:接收方MAC地址,因为此地址是局部链路地址,局域网中所有设备都需查看是否发送给自己,所以排在第一位。
源地址:发送方MAC地址。
长度/类型:指定长度/指定网络层所用的协议类型,通常是IP协议,0x0800。
接下来是数据部分,注意:如果有LLC子层,那么LLC子层占用的是数据部分的空间

最小帧:64字节,这是根据CSMA/CD的标准推导出。
帧头部:14字节,6字节目的地址+6字节源地址+2字节长度/类型=14字节。
帧中最小数据:64字节-6字节目的地址-6字节源地址-2字节长度/类型-4字节FCS字段(CRC)=46字节。
最大数据:即MTU=1500字节。
最大帧:MTU+帧头部14字节+FCS4字节=1518字节。
以上均未考虑前导码。

TCP,UDP,IP,数据链路层头部详解的更多相关文章

  1. TCP/UDP Linux网络编程详解

    本文主要记录TCP/UDP网络编程的基础知识,采用TCP/UDP实现宿主机和目标机之间的网络通信. 内容目录 1. 目标2.Linux网络编程基础2.1 嵌套字2.2 端口2.3 网络地址2.3.1 ...

  2. [转载]MAC、IP头、TCP头、UDP头帧格式、详解

    原文地址:MAC.IP头.TCP头.UDP头帧格式.详解作者:iTudu 转自:http://zoufengfu168.blog.163.com/blog/static/546105520099133 ...

  3. 网络编程之TCP/IP各层详解

    网络编程之TCP/IP各层详解 我们将应用层,表示层,会话层并作应用层,从TCP/IP五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议,就理解了整个物联网通信的原理. 首先,用户感知到的只 ...

  4. 三十天学不会TCP,UDP/IP编程--MAC地址和数据链路层

    这篇文章主要是来做(da)推(guang)介(gao)的!由于这两年接触到了比较多的这方面的知识,不想忘了,我决定把他们记录下来,所以决定在GitBook用半年时间上面写下来,这是目前写的一节,后面会 ...

  5. TCP协议粘包问题详解

    TCP协议粘包问题详解 前言 在本章节中,我们将探讨TCP协议基于流式传输的最大一个问题,即粘包问题.本章主要介绍TCP粘包的原理与其三种解决粘包的方案.并且还会介绍为什么UDP协议不会产生粘包. 基 ...

  6. 三十天学不会TCP,UDP/IP网络编程-ARP -- 连接MAC和IP

    继续来做(da)推(guang)介(gao)我自己的!由于这两年接触到了比较多的这方面的知识,不想忘了,我决定把他们记录下来,所以决定在GitBook用半年时间上面写下来,这是目前写的一节,目前已完成 ...

  7. HTTP头部详解

    因为之后的HTTP头注入要学习这些所以就看了.觉得很不错,算是学习前的科普. <HTTP头部详解>转载自:http://www.cnblogs.com/lcamry/p/5763040.h ...

  8. 三十天学不会TCP,UDP/IP网络编程-IP头格式祥述

    我又来了,这篇文章还是来做(da)推(guang)介(gao)我自己的!俗话说事不过三,我觉得我下次得换个说法了,不然估计要被厌恶了,但是我是好心呐,一定要相信我纯洁的眼神.由于这两年接触到了比较多的 ...

  9. TCP通讯处理粘包详解

    TCP通讯处理粘包详解 一般所谓的TCP粘包是在一次接收数据不能完全地体现一个完整的消息数据.TCP通讯为何存在粘包呢?主要原因是TCP是以流的方式来处理数据,再加上网络上MTU的往往小于在应用处理的 ...

  10. TCP报文段首部格式详解

    TCP首部格式   格式字段详解   源端口.目标端口: 计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两 ...

随机推荐

  1. net core下链路追踪skywalking安装和简单使用

    当我们用很多服务时,各个服务间的调用关系是怎么样的?各个服务单调用的顺序\时间性能怎么样?服务出错了,到底是哪个服务引起的?这些问题我们用什么方案解决呢,以前的方式是各个系统自己单独做日志,出了问题从 ...

  2. 如何将本地项目第一次同步到gitee远程

    一,Gitee账号的注册/登录 在gitee登录入口输入相关信息进行注册登录https://gitee.com/signup#lang=zh-CN 二,本地安装git客户端并配置用户信息 1.Git ...

  3. SAP Adobe Form 教程四 动态隐藏和显示字段

    前文: SAP Adobe Form 教程一 简单示例 SAP Adobe Form 教程二 表 SAP Adobe Form 教程三 日期,时间,floating field 本文链接:https: ...

  4. JUC并发编程学习笔记(一)认知进程和线程

    进程和线程 进程 一个程序,如QQ.exe,是程序的集合 一个进程往往可以包含多个线程,至少包含一个 java默认有两个线程,GC垃圾回收线程和Main线程 线程:一个进程中的各个功能 java无法真 ...

  5. 【爬虫案例】用Python爬取抖音热榜数据!

    目录 一.爬取目标 二.编写爬虫代码 三.同步讲解视频 3.1 代码演示视频 四.获取完整源码 一.爬取目标 您好,我是@马哥python说,一名10年程序猿. 本次爬取的目标是:抖音热榜 共爬取到5 ...

  6. Linux 开启防火墙端口策略

    1. 安装防火墙 yum install firewalld systemd -y 2. 手动开放防火墙端口 查看防火墙全部设置 firewall-cmd --list-all 若防火墙服务未启动可执 ...

  7. java 读取气象专业格式NetCDF文件

    一.NetCDF简介NetCDF全称为network Common Data Format( "网络通用数据格式"),是一个软件库与机器无关的数据格式,支持创建,访问基于数组的科研 ...

  8. 小程序真机报错errMsg: “hideLoading:fail:toast can‘t be found“ ?

    showLoading 和 showToast 同时只能显示一个: showLoading 应与hideLoading 配对使用: 把请求接口统一封装,开始请求接口时showLoading,请求接口后 ...

  9. C语言:头文件ctype.h的内置函数

    #include <stdio.h> #include <ctype.h>//内置函数的头文件 #include <math.h> int main() { int ...

  10. docker之docker-compose

    docker-compose就是个二进制的工具,它可以单机编排,批量管理多个容器 [root@mcwk8s01 harbor]# file /usr/local/bin/docker-compose ...