好文参考:《网路传输的三张表:MAC地址表,ARP缓存表和路由表》http://www.cnblogs.com/clovn/p/4911212.html

(1)数据包封装

传输层及其一下的机制由内核决定,主要负责通讯的具体细节;应用层由用户进程提供,主要负责对通讯数据的含义进行解释。应用层数据通过协议栈发送到网络上,为了保证数据能够被接收,需要在每层协议之前加一个数据首部作为标识,我们称之为封装,具体格式如下

(2)以太网帧格式

1) 在链路层中,传输的数据我们称为帧,具体的帧格式如下图所示:

其中:图中的目的地址和原地址指的是网卡的硬件地址(MAC地址,即网卡编号,唯一),CRC为校验位

2)ARP数据报格式:获取下一跳(下一个路由节点)的MAC,实现数据传递。

1>在网路传输的过程中,只有知道目标的MAC地址(未知)和发送数据起点的MAC地址(已知),才能进行正常的数据传输。如果得知目标的MAC地址,通过ARP发送数据请求和数据应答即可得到目标的MAC地址,ARP数据报的格式如下:

2> 具体的实现流程:

在数据过程中,首先需要获得目标的MAC地址,这就需要使用ARP协议了。在每台主机中都有一个ARP缓存表,其中记录了主机IP和MAC地址的对应关系。如果AB之间想要通信,A首先会检查自己的ARP缓存表中是否有B的IP地址和对应MAC地址的对应关系。如果有,则会将B的IP地址和对应的MAC地址填到ARP数据报中;如果没有,则A会发一个ARP请求给B,此时交换机接收到这个数据帧(广播帧),将数据以非接口的形式广播出去。此时B收到这个数据帧,会检查是否和自己的IP相同,如果不同,则忽略信息,如果相同,则会将A的IP和MAC地址的对应关系记录在自己的ARP缓存表中,同时将给A发送一个ARP应答数据(拆包和组包),其中包括B的MAC地址。A收到B的应答数据后,会将B的IP地址和MAC地址填入到自己的ARP缓存地址中。

在网路传输中,交换机在收到数据帧之后,会将数据帧中的MAC地址和端口号记录在MAC表中,然后在表中寻找有没有数据帧目标的MAC地址信息。如果有,则直接将数据从表中的接口传递给下一个MAC地址(单播);如果没有,则将数据以非接口的形式发送出去(称为广播)(现在的路由器一般都包含了交换机在内)。

通过路由节点的不断拆包和组包,直到找到封装在网络层IP协议中的目的地址.数据包在不断传递的过程中,最长的生命周期,我们称之为TTL

3>IP段格式:数据前面的那段我们称为IP首部(固定部分+可变部分)

其中:4位版本号:IPV4/IPV6     4位首部长度:数据首部的最大字节数(最小为5,最大为15,以4字节为单位)

16位总长度:数据报的最大长度为2^16-1=65535字节(首部和数据之和长度)

13位片偏移:用于传输较大的数据,切片时记录片的编号(片偏移以8字节为偏移单位)

8位生存时间:为起始主机到目标主机之间最多可存在255个路由节点(最多有255跳)

32位源IP地址:发送数据端的IP              32位目的IP地址:接收数据端的IP

4>UDP数据报格式

由于在一个主机中,不同的应用对应于不用的进程,也就是所谓的端口号。因此通过指定两个端口号,就可以指定两个应用进行通信,从而不会导致数据传输错乱。

5>TCP数据报格式

和UDP相比,TCP数据报格式相对来说比较复杂,除了相对的端口号,还有序号和确认序号,用来重构数据使用。

linux网络编程之通信协议格式相关推荐

  1. [Linux网络编程]以太网封装格式及相关结构体

    木草山人声明: 本文非教学资料,不涉及理论.文章只是个人的一些笔记,其中的对与错,我不清楚,因为都是从书上.资料中学到的.虽然做过实践测试,但不保证100%正确.能力有限,错误难免,欢迎指正. 以太网 ...

  2. Linux网络编程基础1(网络应用程序设计模式,分层模型,协议格式)

    Linux网络编程基础(网络应用程序设计模式,socket编程,inet_pton,inet_ntop,服务端创建连接的过程,客户端创建连接的过程,socket函数封装) 1. 网络应用程序设计模式 ...

  3. linux网络编程(一)网络基础传输知识

    linux网络编程(一)网络传输基础知识 一.什么是协议? 二.使用步骤 典型协议 2.网络应用程序设计模式 C/S模式 B/S模式 优缺点 3.分层模型 4.TCP/IP四层模型 通信过程 5.协议 ...

  4. 150集Linux网络编程培训视频吐血整理 | 网络基础

    学习视频来源:<黑马程序员 - Linux网络编程> 协议的概念 什么是协议 从应用的角度出发,协议可理解为"规则",是数据传输和数据的解释的规则. 假设,A.B双方欲 ...

  5. Linux网络编程——千峰物联网笔记

    B站视频:千峰物联网学科linux网络编程 网址:https://www.bilibili.com/video/BV1RJ411B761?p=1 目录 第一章:计算机网络概述 1.1计算机网络发展简史 ...

  6. Linux网络编程基础知识

    Linux网络编程基础知识 1. 协议的概念 1.1 什么是协议 1.2 典型协议 2 网络应用程序设计模式 2.1 C/S模式 2.2 B/S模式 2.3 优缺点 3 分层模型 3.1 OSI七层模 ...

  7. 【Linux网络编程】

    文章目录 一. Linux的网络模型 1. 网络模型概述 2. Linux网络协议栈包含的网络协议 3. Linux网络编程模型 4. socket套接字编程模型 二. UDP编程 1 编程准备-字节 ...

  8. [Linux网络编程学习笔记]套接字地址结构

    好久没有看那Linux网络编程这本书了,今天看到了重点部分-TCP套接字.下面先来看看套接字的地址结构 Linux系统的套接字可以支持多种协议,每种不同的协议都是用不同的地址结构.在头文件<li ...

  9. 【Linux网络编程】并发服务器之多线程模型

    00. 目录 文章目录 00. 目录 01. 概述 02. 多线程服务器 03. 多线程服务器实现思路 04. 多线程服务器实现 05. 附录 01. 概述 服务器设计技术有很多,按使用的协议来分有 ...

最新文章

  1. 这家卡车自动驾驶公司图谋借壳上市,Waymo和Cruise的故事讲不下去了?
  2. linux内核 fat,微软宣布exFAT文件系统规范,希望被Linux内核接纳
  3. Transactional 事务
  4. linux sigprocmask函数理解
  5. 写作新手想少走弯路,尽快赚到钱,必须要知道的
  6. cpython知乎_Numpy为什么可以用C语言写?
  7. 人工智能还能怎么玩?谷歌反手就是一个红狮子雕塑
  8. Ubuntu 环境搭建系列--ubuntu20.04 tftp服务搭建
  9. Excel/WPS如何查找重复数据
  10. 商品分页查询 ego-prc 实现-easyui
  11. quicktime ogv_Windows的QuickTime已死,应卸载以确保安全
  12. Python索引 说明
  13. Laravel 5.4设置logout注销账户的重定向路径
  14. Project build error: Non-parseable POM D:\code\pom.xml: expected start tag name and not
  15. 微信小程序项目实例——心情记事本
  16. 机器人运动学标定:基于DH建模方法
  17. Python量化学习笔记02——量化投资——以Python为工具 Part01-C02
  18. 一个嵌入式初学者引发的思考(jesse谈自己的经验体会) 【转】
  19. CVPR 2023 | EMA-VFI: 基于帧间注意力提取运动和外观信息的高效视频插帧
  20. 用友数据库服务器如何修改,用友U8服务器修改数据库端口

热门文章

  1. HTMLCSS 问题
  2. 关于Ubuntu使用笔记
  3. 修改input的placeholder颜色
  4. C#中数组、ArrayList和List三者的区别(转) ,加修改
  5. 使用DataTable更新数据库
  6. sap生产工单报工_【案例】MES系统助力亨通电缆车间生产效率提升25%
  7. 亚信联创java面试题_亚信联创面试题及答案
  8. C语言中定义变量位置
  9. 交叉编译android版htop
  10. LeetCode 112. 路径总和 、113. 路径总和 II 思考分析