Ethernet IP TCP UDP 协议头部格式

The Ethernet header structure is shown in the illustration below:

以太网头部14 bytes

Destination Source Len Data unit + pad FCS
(6 bytes) (6 bytes) (2) (46-1500 bytes) (4 bytes)

Ethernet header structure

The IP header structure is as follows:

IP头部20 bytes


4

8

16

32 bits
Ver. IHL Type of service Total length
Identification Flags Fragment offset
Time to live Protocol Header checksum
Source address
Destination address
Option + Padding
Data

IP header structure

The TCP header structure is as follows:

TCP头部20 bytes


16

32 bits
Source port Destination port
Sequence number
Acknowledgement number
Offset Resrvd U A P R S F Window
Checksum Urgent pointer
Option + Padding
Data

TCP header structure

The UDP header structure is shown as follows:

UDP头部8 bytes


16

32 bits
Source port Destination port
Length Checksum
Data

UDP header structure

一些协议头部的定义:

struct ip
{
#if BYTE_ORDER == LITTLE_ENDIAN
    u_char    ip_hl:4,        /* header length */
              ip_v:4;            /* version */
#endif
#if BYTE_ORDER == BIG_ENDIAN
    u_char    ip_v:4,            /* version */
              ip_hl:4;        /* header length */
#endif
    u_char    ip_tos;            /* type of service */
    short    ip_len;            /* total length */
    u_short    ip_id;            /* identification */
    short    ip_off;            /* fragment offset field */
    u_char    ip_ttl;            /* time to live */
    u_char    ip_p;            /* protocol */
    u_short    ip_sum;            /* checksum */
    struct    in_addr ip_src,ip_dst;    /* source and dest address */
};

struct udphdr
{
    u_short    uh_sport;        /* source port */
    u_short    uh_dport;        /* destination port */
    short    uh_ulen;        /* udp length */
    u_short    uh_sum;            /* udp checksum */
};

struct tcphdr
{
    u_short    th_sport;        /* source port */
    u_short    th_dport;        /* destination port */
    tcp_seq    th_seq;            /* sequence number */
    tcp_seq    th_ack;            /* acknowledgement number */
#if BYTE_ORDER == LITTLE_ENDIAN
    u_char    th_x2:4,        /* (unused) */
              th_off:4;        /* data offset */
#endif
#if BYTE_ORDER == BIG_ENDIAN
    u_char    th_off:4,        /* data offset */
              th_x2:4;        /* (unused) */
#endif
    u_char    th_flags;
    u_short    th_win;            /* window */
    u_short    th_sum;            /* checksum */
    u_short    th_urp;            /* urgent pointer */
};

更多网络协议格式细节参考:http://www.protocols.com/pbook/

 

作者:阿凡卢

出处:http://www.cnblogs.com/luxiaoxun/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

http://www.cnblogs.com/luxiaoxun/archive/2012/08/08/2628627.html

时间: 2024-10-06 07:24:15

Ethernet IP TCP UDP 协议头部格式的相关文章

协议系列之UDP协议

上节说的TCP协议虽然提供了可靠的传输,但是也有一个缺点,发送速度慢.那么有没有一种协议能快速发送的呢?这节要讨论的就是UDP协议,它提供了更加快的发送速度,但也牺牲了可靠性,它是一种无连接的传输协议.比起TCP,UDP更像是我们用手机发送短信,只管发送出去,但不能保证对方收到,不会建立连接,也没有确认环节. 图2-2-4-1为UDP协议报文结构.比起TCP,UDP报文的结构相对简单,只有源端口.目的端口.报文长度.校验和四个字段.其中源端口跟校验和是可选的,由于UDP不用接收端回复确认信息,所

linux shell 脚本实现tcp/upd协议通讯(重定向应用)_linux shell

前几天发了重定向以及管道相关使用方法,今天这里发些很有趣的例子.通过重定向实现基于tcp/udp协议的软件通讯. linux 设备里面有个比较特殊的文件: /dev/[tcp|upd]/host/port 只要读取或者写入这个文件,相当于系统会尝试连接:host 这台机器,对应port端口.如果主机以及端口存在,就建立一个socket 连接.将在,/proc/self/fd目录下面,有对应的文件出现. 一.测试下:/dev/tcp/host/post文件 [chengmo@centos5  sh

JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用

JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例,我们暂时不讲了,我们直接来重点吧,关于JAVA的网络请求是怎么实现的?当然是HTTP协议,但是不可否认,他的概念和思想都是我们必须去涉及的,包括后面的tcp和socket等,好吧,我们开车吧! 一.JAVA网络请求概述 关于JAVA的网络请求,我们大致的可以分为以下几个分类 网络模式 OSI TCP

udp-TCP/IP协议中的IP和UDP问题

问题描述 TCP/IP协议中的IP和UDP问题 * # 既然IP协议和UDP协议都是实现数据无连接的不可靠通信协议,为什么有了IP之后还需要UDP? 解决方案 1.ISO开放系统有以下几层: 7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层 2.TCP/IP 网络协议栈分为应用层(Application).......答案就在这里:TCP.UDP.IP协议---------------------- 解决方案二: IP是网络层的,主机到主机的连接:UDP是传

大数据-一个程序中,TCP协议用的muduo网络库,UDP协议可以用boos.asio吗?

问题描述 一个程序中,TCP协议用的muduo网络库,UDP协议可以用boos.asio吗? 通过TCP协议接收数据,解析好,在用UDP协议转发. UDP转发是后面增加的,muduo网路库不支持Udp协议,自己用socket api写,担心大数据,多并发的时候不可靠.请问大神有什么建议? 解决方案 这个当然可以,只要协议格式客户端,服务端之间处理好. 解决方案二: udp确实不可靠,要解决可以自己实现一套超时和重发机制,比如说每个数据包打上标号,发送方和接收方处理好重发,如果对数据质量要求高的话

基于IP/UDP协议的sock编程

在VC知识库我学到了很多知识,很短的时间我就掌握了vc,主要是在贵站下了很多源代码回来分析,学习.看了你处有人将net send封装进行消息群发的源代码,有看见网上某某公司消息群发软件要花钱才能购买,于是有感自己编写一个消息群发小程序. 特点: vc源代码,基于IP/UDP协议的sock编程,按messager 服务的通信协议填写UDP数 据包,可在没有net send命令的win98 win95下实现消息发送,代码里含有messager 的通 信协议.并支持文本内容,ASCII文本图象发送.做

ip-请问TCP/IP中的协议都具备什么样的功能,都是如何工作的

问题描述 请问TCP/IP中的协议都具备什么样的功能,都是如何工作的 求助,请问TCP/IP中的协议都具备什么样的功能,都是如何工作的,求大神解答 解决方案 这几乎可以写一本书. 只能简单和你说说tcp和ip是干嘛的,别的自己去图示馆找书看,google或者看维基百科. ip是网络层(关于分层,去google osi分层模型)协议,它通过ip地址(是个人都知道ip地址)将数据发送到另一个主机,ip协议的作用就是在互联网上确定一台计算机的地址,和如何和它通讯. tcp是传输层协议,它的职责是确保数

C语言编写基于TCP和UDP协议的Socket通信程序示例_C 语言

Tcp多线程服务器和客户端程序服务器程序: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <sys/types.h> #include <sys/socket.h> #include <unistd.h> #define PORT 8082 #define BUFSIZE 512 char

【转】关于TCP和UDP协议消息保护边界的介绍

在 socket网络程序中,TCP和UDP分别是面向连接和非面向连接的.因此TCP的socket编程,收发两端(客户端和服务器端)都要有一一成对的 socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包.这样,接收端,就难于分辨出来了,必须提供科学的拆包机制.对于UDP,不会使用块的合并优化算法,这样,实际上目前认为,是由于UDP支持的是一对多的模式,所以接收端的skbuff(套接