TCP/IP的概念
TCP/IP是一个协议簇,包括多个协议
定义了计算机操作系统如何连入因特网,以及数据如何在他们之间传输的标准。
TCP/IP的分层结构
TCP/IP按照层次可以分成四层,应用层、传输层、网络层和数据链路层
应用层
包括虚拟终端协议TELNET,文件传输协议FTP,超文本传送协议HTTP等高层协议。
传输层
包括UDP协议,TCP协议
网络层
使主机把分组发往任何网络,并使分组独立的传送向目标。IP协议
数据链路层
负责接收上层发来的IP数据报并向外发送,或接受处理网络上传来的物理帧
如果两台计算机在不同的网段中,那么需要经过n个路由器,具体如图所示
而目的主机收到数据包后,如何经过各种协议栈到达应用程序呢
以太网驱动程序首先根据以太网首部中的"上层协议"字段确定该数据帧的有效载荷(payload,指除去协议首部之外实际传输的数据)是IP、ARP还是RARP协议的数据报,然后交给相应的协议处理。假如是IP数据报,IP协议再根据IP首部中的"上层协议"字段确定该数据报的有效载荷是TCP、UDP、ICMP还是IGMP,然后交给相应的协议处理。假如是TCP段或UDP段,TCP或UDP协议再根据TCP首部或UDP首部的"端口号"字段确定应该将应用层数据交给哪个用户进程。IP地址是标识网络中不同主机的地址,而端口号是同一台主机上标识不同进程的地址,IP地址和端口号合起来标识网络中唯一的进程。
注意,虽然IP、ARP和RARP数据报都需要以太网驱动程序来封装成帧,但是从功能上划分,ARP和RARP属于链路层,IP属于网络层。虽然ICMP、IGMP、TCP、UDP的数据都需要IP协议来封装成数据报,但是从功能上划分,ICMP、IGMP与IP同属于网络层,TCP和UDP属于传输层。
应用层
DNS
实现域名与实际IP地址之间的转换。
传输层
为应用层提供会话和数据报通信服务。
TCP协议
是面向连接的、保证高可靠性的传输层协议。
会将应用层数据加上一个首部。
typedef struct TCP_HEADER//TCP头定义,共20个字节
{
short sSourPort;
//源端口号16bit
short sDestPort;//目的端口号16bit
unsigned int uiSequNum;//序列号32bit
unsigned int uiAcknowledgeNum;//确认号32bit
short sHeaderLenAndFlag;前4位:TCP头长度;中6位:保留;后6位:标志位
short sWindowsize;//窗口大小16bit
short sCheckSum;
//检验和16bit
short surgentPointer;//紧急数据偏移量16b1t
}TCP_HEADER,*PTCP_HEADER;
UDP协议
是无连接不可靠的传输层协议
typedef struct UDP_HEADER
//UDP头定义,共8个字节
{
unsigned short m_usSourPort;//源端口号16b1t
unsigned short m_usDestPort;//目的端口号16b1t
unsigned short m_usLength;//数据包长度16b1t
unsigned short m_usCheckSum;//校验和16b1t
}UDP_HEADER,*PUDP_HEADER;
网络层
向上层提供简单灵活的、无连接的数据报服务
IP协议
将上层数据报封装成IP数据包后进行传输,如果数据包太大,还需要分片传输
IP协议特点
不可靠、无连接、无状态
struct iphdr{
#if defined( LITTLE ENDIAN BITFIELD)
u8 ih1:4,
version:4;
#elif defined{ BIG ENDIAN BITFIELD)
u8 version:4,
ih1:4;
#else
#error "Please fix <asm/byteorder.h>"
#endif
u8 tos;
be16 tot len;
be16 id;
be16 frag off;
u8 ttl;
u8 protocol;
sum16 check;
be32 saddr;
be32 daddr;
/*The options
start here.*/
};
IP数据包分片
IP协议在传输数据包的时候将数据包分成n片传输,在目的系统中进行重组。
最大长度MTU=1500bit
ARP协议
将IP地址转化为MAC地址
工作流程
1.本地主机在局域网中广播ARP请求
2.目的地址收到这个广播报文之后用ARP协议对其解析,并发送ARP应答包
3.本地主机收到ARP应答后开始传送数据报
RARP协议
允许局域网的物理机器从网关服务器的ARP表中或者缓存上请求其IP地址
工作流程
1.主机发送一个本地的RARP广播
2.RARP服务器收到此请求后检查RARP表,查找该MAC地址对应的IP地址
3.如果存在,就给主机发送一个响应数据包,不存在就不做任何回应
4.主机得到IP地址后就开始通信
ICMP协议
用于探测网络是否联通、主机是否可达、路由是否可用等
可分为两类:差错报文和查询报文
数据链路层
基本概念
将源计算机网络层的数据可靠的传输到相邻节点目标计算机的网络层
主要功能
-
为网络层提供服务
-
成帧、帧定界、帧同步、透明传输
-
差错控制功能
-
流量控制
-
链路管理
-
MAC寻址
typedef struct _MAC_FRAME_HEADER//数据帧头定义
{
char cDstMacAddress[6];//目的MAC地址
char cSrcMacAddress[6];//源MAC地址
short m_cType;//上一层协议类型,如0x0800代表上一层是IP协议,0x0806为ARP
}MAC_FRAME_HEADER,*PMAC_FRAME_HEADER;