二、TCP/IP体系结构
1、术语
TCP/IP的名字来自于:传输控制协议(TCP)和网际协议(IP)分别位于TCP/IP模型的第三次和第四层。数据在不同层中的常用称呼:
a、段-------段用在TCP协议中,一个段是指端到端的传输单位,它包括了TCP首部及后面的应用程序数据,被封装在IP数据报中传输
b、消息----在底层协议的描述中,消息是指传输层协议的数据单位
c、IP数据报----用于IP协议中,一个IP数据报是是IP协议中端到端的传输单位
d、分组-----分组是通过网络层和链路层之间的接口传递的数据单位
e、帧--------帧是链路层协议中的传输单位,包括链路层首部及后面的分组
2、模型
OSI分为7个层次,在OSI参考模型出现时,用于网络互连的TCP/IP协议已经被广泛使用了,所以现在常用的是TCP/IP模型。TCP/IP模型包含了四层:应用层、传输层、网络层、网络接口层,从上到下OSI参考模型对比可以看出:TCP/IP的应用层与OSI模型的最上面三层相对应,不再区分表示层和会话层;两个模型的第三、第四层是一一对应的;TCP/IP的网络接口层与OSI模型的数据链路层对应;TCP/IP模型不包括硬件设备所在的物理层
三、网际协议----------IP
1、简介
互联网中IP是一个主机到主机的协议。TCP/UDP/ICMP/IGMP都封装在IP数据报中传输,他是整个TCP/IP协议的核心部分。
2、主要功能
IP协议的功能和目的就是在互相连接的网络间传输数据报,为了完成这个功能,他把数据报从一个IP模块传送到另一个IP模块,一直到目的主机。参与网络通信的主机和路由器都需要实现IP协议,这些模块共同遵守IP协议制定的规则,用同样的方式解释IP首部中的各个字段、选项、分片和重组数据报等。中间结点(通常是路由器)使用IP首部中的目的地址为数据报选择路由,路由过程中,数据报可能会通过MTU(Maximum Transmissim Unit最大传输单元)小于数据报大小的网络,为了克服这个困难,IP协议提供了分片机制,他的主要功能有:
a、寻址和选路
在选路的时有两种数据报的交付形式:直接交付和间接交付。直接交付是两台主机位于同一个物理网络,数据可以从一台主机直接到另一台数据。间接交付是两台主机不在同一个物理网络中,发送方把数据报发给一个路由器,然后有路由器发到目的主机
b、封装和解析
c、分片和重组
3、数据报格式
a、版本号
b、首部长度
c、服务类型
d、总长度
e、标识符
f、标志
g、片偏移
h、生存时间
i、协议
j、首部校验和
IP数据报首部校验和,用于检验首部的有效性和完整性。校验和的计算是首部校验和字段置0,把首部看成是16位(bits)的整数序列,计算每个16位(bits)整数的反码,再求他们的和,最后计算结果的反码而求出。这是一个简单的校验和算法,实验证明他是合适的。数据报首部发生变化时,如减少TTL、增加或修改选项、发生分片等,要重新计算校验和。
收到IP数据报时,使用同样的算法计算校验和,由于接收方计算校验和时包含了发送方保存在首部中的校验和,如果首部在传输过程上没有发送差错,接收方计算的结果应该是0.如果不是0,接收方便默默地抛弃收到的数据报,不产生差错信息。
校验和只包含首部,而不对数据部分校验,带来的好处是:首部一般都比数据少,在主机或路由器处理数据报时,减少了计算时间;另外,允许高层协议选择自己的校验和算法,在可靠性高的网络上,甚至可以不对数据校验,比较灵活。
k、地址
l、选项
3、校验和程序(测试环境:win7+vs2012)
为了使用快速的非安全版本的函数,使用了_CRT_SECURE_NO_WARNINGS和_CRT_SECURE_NO_DEPRECATE宏
CheckSum.cpp:
#include "stdafx.h"
#include "iostream"
#define DATA_MAX_LEN 14 //最大数据长度
struct dataSum
{
char data[DATA_MAX_LEN]; //数据
unsigned short checkSum; //校验和
};
unsigned short ipCheckSum(unsigned short *buf, int bufLen)
{
unsigned long checkSum = 0;
while (bufLen > 1)
{
checkSum += *buf++;
bufLen -= sizeof(unsigned short);
}
if (bufLen)
{
checkSum += *(unsigned char *)buf;
}
checkSum = (checkSum >> 16) + (checkSum & 0xffff);
checkSum += (checkSum >> 16);
return (unsigned short)(~checkSum);
}
int _tmain(int argc, _TCHAR* argv[])
{
struct dataSum msg = { "hello world!", 0 };
int length = sizeof(msg);
//计算校验和
msg.checkSum = ipCheckSum((unsigned short *)&msg, length);
std::cout << "Calculate check sum : " << msg.checkSum << std::endl;
//包含checksum值、验证校验和----产生正确的校验
msg.checkSum = ipCheckSum((unsigned short *)&msg, length);
std::cout << "Verify check sum : " << msg.checkSum << std::endl;
//包含checksum值、验证校验和----消息被修改后的校验
// msg.data = "test";
strcpy(msg.data, "test");
msg.checkSum = ipCheckSum((unsigned short *)&msg, length);
std::cout << "Verify check sum : " << msg.checkSum << std::endl;
return 0;
}
四、用户数据报协议----UDP
1、主要功能
UDP是一个面向数据报的传输层协议,他的特点是:简单、快捷
他是无连接的,发送数据之前,不需要建立连接,数据发送完成后,也不用终止连接,只要应用程序有数据,就直接发送,没有连接建立、维护、终止所带来的开销。应用程序和UDP协议都不关心底层网络是的MTU、分片及路由等操作,这些瓯都由IP层来完成
UDP是不可靠的,对发送的数据,并不保证对方一定能收到,即使收到了也不会确认。使用UDP的应用程序要自己负责数据的重传和确认,解决可靠性相关问题。
数据传输过程发生拥塞时,UDP不做流量及拥塞控制,这在实际使用中会引起一些问题。如路由器发送拥塞就会扔掉数据,TCP发现有数据丢失时,将减慢数据的发送速度;而UDP并不关心数据的丢失仍然照常发送。结果TCP减少使用的网络带宽都被UDP抢占了,导致TCP不能正常运行或性能严重下降,这对TCP是不公平的。因此,在路由器的实现中需要对UDP做特殊的处理,发送拥塞时也要用一些算法抛弃UDP的数据
2、主要应用
a、多播或广播通信
b、简短的请求/应答交换----比如DNS、TFTP、DHCP、BOOTP、SNMP
c、效率高于可靠性的应用----比如媒体传输RTP
d、轻量级的通信协议----WSP、WTP、WAP
五、传输控制协议----TCP
1、简介
TCP是一个面向连接的、端到端的可靠传输协议,为跨越不同网络的主机进程通信提供了可靠的传输机制。即使底层网络不可靠或有拥塞发送,TCP也要保持足够的健壮性。他对底层通信协议的可靠性做了非常少的假设,认为可以使用一个简单的、提供不可靠数据报服务的底层协议。原则上,TCP可以运行在各种通信设备行,如:分组交换和电路交换等。
TCP吧应用程序交给他的数据看做是简单的字节流,他不理解数据的内容,也不区分数据的边界。他把应用程序的数据封装成TCP段,TCP段再有IP封装成数据报发送到网络上。
TCP使用滑动窗口管理传输的数据流,允许每一端根据他处理能力的大小声明使用的窗口,避免高速设备发送的数据导致低速设备的缓冲区溢出。TCP完成如下功能:
a、数据的封装和传输----会有双方协商的最大段大小(Maximum Segment Size,MSS)
b、可靠性----包括校验和、序号、超时重传
c、流量控制
d、拥塞避免
e、多路复用
f、连接管理
2、TCP连接管理,TCP有很多的状态比如CLOSED和LISTEN等,这些状态间的转换都需要进行管理
六、ICMP协议
1、简介
ICMP(Internet Control Message Protocol),译为“互联网控制报文协议”,封装了在IP数据报内被传输,看起来像是IP的上层协议,实际上它是IP协议的一个组成部分,必须被每一个IP模块实现。
IP协议是无连接的,不能提供可靠的数据传输。在数据报传输过程中,可能会由于路由器、主机或传输链路故障导致传输错误,IP协议并不处理这些故障,ICMP协议对此问题提供了反馈机制,通过ICMP,路由器和目的主机能够与源主机通信,报告数据传输过程中的错误和控制消息。
2、Echo请求和应答
Echo主要用来探测另一个主机是否可达到。ICMP是在IP协议中传输的,成功接收到Echo应答表明源主机和目的主机的IP和ICMP可以正常工作,中间的路由器正确,可以成功转发数据,但不能确定源主机和目的主机的上层协议,如TCP或UDP是否工作正常。
TCP/IP协议提供了许多有用的工具帮助用户或网络管理员诊断网络问题,最常用的调试工具Ping和Traceroute就利用Echo的请求和应答报文。
3、目的地不可达
4、源抑制
5、重定向
6、路由通告与请求
7、超时