帧头,TCP,UDP,IP头部(ARP协议)
来源:互联网 发布:linux informix 卸载 编辑:程序博客网 时间:2024/06/05 17:16
- 首先先介绍MAC中帧头:
接下来是IP头部。
typedef struct _IP_HEADER
{
char m_cVersionAndHeaderLen; //版本信息(前4位),头长度(后4位)
char m_cTypeOfService; // 服务类型8位
short m_sTotalLenOfPacket; //数据包长度
short m_sPacketID; //数据包标识
short m_sSliceinfo; //分片使用
char m_cTTL; //存活时间
char m_cTypeOfProtocol; //协议类型
short m_sCheckSum; //校验和(用来检查IP的头部)
unsigned int m_uiSourIp; //源ip
unsigned int m_uiDestIp; //目的ip 以上源IP和目的IP基本上是不会变的,除非使用NAT技术。
} __attribute__((packed))IP_HEADER, *PIP_HEADER ;
{
} __attribute__((packed))IP_HEADER, *PIP_HEADER ;
- 接下来是TCP的头部。
typedef struct _TCP_HEADER
{
short m_sSourPort; // 源端口号16bit
short m_sDestPort; // 目的端口号16bit
unsigned int m_uiSequNum; // 序列号32bit
unsigned int m_uiAcknowledgeNum; // 确认号32bit
short m_sHeaderLenAndFlag; // 前4位:TCP头长度;中6位:保留;后6位:标志位
short m_sWindowSize; // 窗口大小16bit,表示想收到的每个TCP数据段的大小。
short m_sCheckSum; // 检验和16bit (根据内容计算的,要与IP头部中的校验和区别出来)
short m_surgentPointer; // 紧急数据偏移量16bit
}__attribute__((packed))TCP_HEADER, *PTCP_HEADER;
{
}__attribute__((packed))TCP_HEADER, *PTCP_HEADER;
PSH:立即传输,不允许有延迟等待(为了不浪费网络资源,当需要发送ACK确认的时候,将延迟等待有数据的数据包,捎带确认。)。
- 接下来是UDP头部。
typedef struct _UDP_HEADER
{
unsigned short m_usSourPort; // 源端口号16bit
unsigned short m_usDestPort; // 目的端口号16bit
unsigned short m_usLength; // 数据包长度16bit
unsigned short m_usCheckSum; // 校验和16bit
}__attribute__((packed))UDP_HEADER, *PUDP_HEADER;
{
}__attribute__((packed))UDP_HEADER, *PUDP_HEADER;
注意:
- 为什么ip头部中是有目标ip地址,而TCP和UDP中只有目标端口?
首先先明白两个定义:
- TSAP:Transport Service Access Point传输服务访问点。(传输层的端口)
- NSAP:Network Service Access Point网络服务访问点。(网络层的IP)
应用进程可以将自己关联到一个本地的TSAP上,以便与一个远程TSAP建立连接,这些连接运行在每台主机的NSAP上,在有些网络上,每台计算机只有一个NSAP,但是可以有多个传输端点共享此NSAP,因此需要某种方法来区分这些传输节点。所以在IP的头部只需要说明IP地址,但是在TCP或者UDP中需要说明端口。
- 在上层传输都是通过ip地址来传,但是在数据链路层都是根据MAC地址来传输的,那么如何从ip地址转换到MAC地址的呢?
下面用一个流程来说明ARP的流程。
主机A:192.168.1.1 MAC_A:OA-11-22-33-44-01
主机B:192.168.1.2 MAC_B:OA-11-22-33-44-02
当主机A需要与主机B通信时,ARP可以将主机B的IP地址解析成主机B的MAC地址。
- 根据主机A上的路由表内容,IP用于确定访问主机B的转发IP地址是192.168.1.2.然后主机A在自己本地的ARP缓存中检查B的匹配MAC地址。
- 若找不到,则它将询问192.168.1.2的硬件地址。所以主机A会发送ARP请求帧广播到本地网络上的所有主机,A的ip地址和MAC地址都包括在该ARP请求中,本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP匹配,若不匹配则丢弃ARP请求。
- 主机B确定ARP请求中的ip与自己的ip匹配,则将A的ip与mac地址映射添加到自己本地的ARP中。
- 主机B将包含MAC地址的ARP回复消息直接发送给A。
- A收到B发来的ARP回复消息时,会用主机B的ip地址和MAC映射更新ARP缓存,本地缓存是有生命周期的,生命周期结束后,将再次重复上述过程,B的mac地址一旦确定,A就向B发送IP通信了。
0 0
- 帧头,TCP,UDP,IP头部(ARP协议)
- TCP/IP/UDP/ICMP/ARP/ethernet 各种协议头部结构体
- TCP/IP/UDP/ICMP/ARP/ethernet 各种协议头部结构体
- Ethernet IP TCP UDP 协议头部格式
- Ethernet IP TCP UDP 协议头部格式
- 以太网数据包TCP、IP、ICMP、UDP、ARP协议头结构详解
- 分析TCP/IP协议栈代码之ARP->IP & ICMP->UDP->TCP(STM32-PDF+代码)
- TCP/IP/UDP/ICMP协议头结构
- TCP/IP------协议头部
- IP/TCP协议头部
- Ethernet IP TCP UDP 协议头部格式及大小
- tcp/ip ---------- ARP协议
- 以太网 IP TCP UDP 头部
- 【网络】网络基础知识总结(包括TCP/IP协议、ARP、UDP等)
- TCP/UDP/IP头
- TCP/IP协议学习(2)-IP协议、ARP协议
- IP头,TCP头,UDP头,MAC帧头定义
- IP头,TCP头,UDP头,MAC帧头定义
- 转:Java之面向对象思想设计原则
- 机房收费系统---UML图
- ubuntu上安装vim
- 设计模式概述及23中常用设计模式
- 在头文件中定义函数体的缺点
- 帧头,TCP,UDP,IP头部(ARP协议)
- 杭州电子科技大学ACM-1081
- 关于final关键字
- 机房重构之数据库设计
- MySQL的使用
- Java设计模式之简单工厂模式
- windows下安装mysql
- 解题报告 之 POJ3686 The Windy's
- Java Script响应HTML表单中的事件