IP頭、TCP頭、UDP頭詳解

一、計算機網絡模型基礎
爲了方便講述計算機原理,通常將OIS與TCP/IP結合爲五層來講,如圖:
在這裏插入圖片描述

物理層:主要用來規定電氣特性的,必須按照標準使用哪些硬件。例如,調制解調器、PLC 、SONET/SDH 、G.709 、光導纖維、 同軸電纜、雙絞線 ,其中數據單元是比特,典型設備有:中繼器,集線器、網線、HUB
數據鏈路層:有ARQ、CSMA/CD、PPP、LCP、HDLC、ATM等協議,其數據單元爲幀,典型設備有:網卡,網橋,交換機
網絡層:有IP , ARP , RARP , ICMP , IGMP , RIP , OSPF , BGP , IS-IS , IPsec等協議,其數據單元爲:數據包,典型設備有:路由器,防火牆,多層交換機。
傳輸層:有TCP , UDP , DCCP , SCTP , RTP , RSVP , PPTP等協議,其數據單元爲數據段,典型設備有:進程和端口
應用層:有DHCP , FTP , HTTP , SMTP , POP3 , IMAP , SMTP , SMTP , SSH , TELNET , RPC , TLS , SOAP , DNS等協議,典型設備有:應用程序,例如FTP,SMTP ,HTTP
值得注意的是,在計算機網絡中,越往高層走,越偏向軟件化。

二、MAC幀頭定義
數據幀定義,頭14個字節,尾4個字節
typedef struct _MAC_FRAME_HEADER
{
char m_cDstMacAddress[6]; //目的mac地址
char m_cSrcMacAddress[6]; //源mac地址
short m_cType;      //上一層協議類型,如0x0800代表上一層是IP協議,0x0806爲arp
}attribute((packed))MAC_FRAME_HEADER,*PMAC_FRAME_HEADER;

typedef struct _MAC_FRAME_TAIL
{
unsigned int m_sCheckSum; //數據幀尾校驗和
}attribute((packed))MAC_FRAME_TAIL, *PMAC_FRAME_TAIL;

三、IP頭結構的定義

在這裏插入圖片描述

IP頭定義,共20個字節
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;        //校驗和
unsigned int m_uiSourIp;      //源ip
unsigned int m_uiDestIp;      //目的ip
} attribute((packed))IP_HEADER, *PIP_HEADER ;

四、tcp頭結構定義

在這裏插入圖片描述

TCP頭定義,共20個字節
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
short m_sCheckSum;       // 檢驗和16bit
short m_surgentPointer;      // 緊急數據偏移量16bit
}attribute((packed))TCP_HEADER, *PTCP_HEADER;

TCP頭中的選項定義
kind(8bit)+Length(8bit,整個選項的長度,包含前兩部分)+內容(如果有的話)
KIND = 1表示 無操作NOP,無後面的部分
2表示 maximum segment 後面的LENGTH就是maximum segment選項的長度(以byte爲單位,1+1+內容部分長度)
3表示 windows scale 後面的LENGTH就是 windows scale選項的長度(以byte爲單位,1+1+內容部分長度)
4表示 SACK permitted LENGTH爲2,沒有內容部分
5表示這是一個SACK包 LENGTH爲2,沒有內容部分
8表示時間戳,LENGTH爲10,含8個字節的時間戳
*/
typedef struct _TCP_OPTIONS
{
char m_ckind;
char m_cLength;
char m_cContext[32];
}attribute((packed))TCP_OPTIONS, *PTCP_OPTIONS;

五、UDP頭結構的定義
在這裏插入圖片描述
UDP頭定義,共8個字節
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;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章