linux网络编程之通信协议格式
好文参考:《网路传输的三张表: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网络编程之通信协议格式相关推荐
- [Linux网络编程]以太网封装格式及相关结构体
木草山人声明: 本文非教学资料,不涉及理论.文章只是个人的一些笔记,其中的对与错,我不清楚,因为都是从书上.资料中学到的.虽然做过实践测试,但不保证100%正确.能力有限,错误难免,欢迎指正. 以太网 ...
- Linux网络编程基础1(网络应用程序设计模式,分层模型,协议格式)
Linux网络编程基础(网络应用程序设计模式,socket编程,inet_pton,inet_ntop,服务端创建连接的过程,客户端创建连接的过程,socket函数封装) 1. 网络应用程序设计模式 ...
- linux网络编程(一)网络基础传输知识
linux网络编程(一)网络传输基础知识 一.什么是协议? 二.使用步骤 典型协议 2.网络应用程序设计模式 C/S模式 B/S模式 优缺点 3.分层模型 4.TCP/IP四层模型 通信过程 5.协议 ...
- 150集Linux网络编程培训视频吐血整理 | 网络基础
学习视频来源:<黑马程序员 - Linux网络编程> 协议的概念 什么是协议 从应用的角度出发,协议可理解为"规则",是数据传输和数据的解释的规则. 假设,A.B双方欲 ...
- Linux网络编程——千峰物联网笔记
B站视频:千峰物联网学科linux网络编程 网址:https://www.bilibili.com/video/BV1RJ411B761?p=1 目录 第一章:计算机网络概述 1.1计算机网络发展简史 ...
- Linux网络编程基础知识
Linux网络编程基础知识 1. 协议的概念 1.1 什么是协议 1.2 典型协议 2 网络应用程序设计模式 2.1 C/S模式 2.2 B/S模式 2.3 优缺点 3 分层模型 3.1 OSI七层模 ...
- 【Linux网络编程】
文章目录 一. Linux的网络模型 1. 网络模型概述 2. Linux网络协议栈包含的网络协议 3. Linux网络编程模型 4. socket套接字编程模型 二. UDP编程 1 编程准备-字节 ...
- [Linux网络编程学习笔记]套接字地址结构
好久没有看那Linux网络编程这本书了,今天看到了重点部分-TCP套接字.下面先来看看套接字的地址结构 Linux系统的套接字可以支持多种协议,每种不同的协议都是用不同的地址结构.在头文件<li ...
- 【Linux网络编程】并发服务器之多线程模型
00. 目录 文章目录 00. 目录 01. 概述 02. 多线程服务器 03. 多线程服务器实现思路 04. 多线程服务器实现 05. 附录 01. 概述 服务器设计技术有很多,按使用的协议来分有 ...
最新文章
- 这家卡车自动驾驶公司图谋借壳上市,Waymo和Cruise的故事讲不下去了?
- linux内核 fat,微软宣布exFAT文件系统规范,希望被Linux内核接纳
- Transactional 事务
- linux sigprocmask函数理解
- 写作新手想少走弯路,尽快赚到钱,必须要知道的
- cpython知乎_Numpy为什么可以用C语言写?
- 人工智能还能怎么玩?谷歌反手就是一个红狮子雕塑
- Ubuntu 环境搭建系列--ubuntu20.04 tftp服务搭建
- Excel/WPS如何查找重复数据
- 商品分页查询 ego-prc 实现-easyui
- quicktime ogv_Windows的QuickTime已死,应卸载以确保安全
- Python索引 说明
- Laravel 5.4设置logout注销账户的重定向路径
- Project build error: Non-parseable POM D:\code\pom.xml: expected start tag name and not
- 微信小程序项目实例——心情记事本
- 机器人运动学标定:基于DH建模方法
- Python量化学习笔记02——量化投资——以Python为工具 Part01-C02
- 一个嵌入式初学者引发的思考(jesse谈自己的经验体会) 【转】
- CVPR 2023 | EMA-VFI: 基于帧间注意力提取运动和外观信息的高效视频插帧
- 用友数据库服务器如何修改,用友U8服务器修改数据库端口