WinSock网络编程经络----读书笔记(2)

二、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、简短的请求/应答交换----比如DNSTFTPDHCPBOOTPSNMP

c、效率高于可靠性的应用----比如媒体传输RTP

d、轻量级的通信协议----WSPWTPWAP


五、传输控制协议----TCP

1、简介

    TCP是一个面向连接的、端到端的可靠传输协议,为跨越不同网络的主机进程通信提供了可靠的传输机制。即使底层网络不可靠或有拥塞发送,TCP也要保持足够的健壮性。他对底层通信协议的可靠性做了非常少的假设,认为可以使用一个简单的、提供不可靠数据报服务的底层协议。原则上,TCP可以运行在各种通信设备行,如:分组交换和电路交换等。

    TCP吧应用程序交给他的数据看做是简单的字节流,他不理解数据的内容,也不区分数据的边界。他把应用程序的数据封装成TCP段,TCP段再有IP封装成数据报发送到网络上。

    TCP使用滑动窗口管理传输的数据流,允许每一端根据他处理能力的大小声明使用的窗口,避免高速设备发送的数据导致低速设备的缓冲区溢出。TCP完成如下功能:

a、数据的封装和传输----会有双方协商的最大段大小(Maximum Segment Size,MSS)

b、可靠性----包括校验和、序号、超时重传

c、流量控制

d、拥塞避免

e、多路复用

f、连接管理

2TCP连接管理,TCP有很多的状态比如CLOSEDLISTEN等,这些状态间的转换都需要进行管理


六、ICMP协议

1、简介

    ICMP(Internet Control Message Protocol),译为“互联网控制报文协议”,封装了在IP数据报内被传输,看起来像是IP的上层协议,实际上它是IP协议的一个组成部分,必须被每一个IP模块实现。

    IP协议是无连接的,不能提供可靠的数据传输。在数据报传输过程中,可能会由于路由器、主机或传输链路故障导致传输错误,IP协议并不处理这些故障,ICMP协议对此问题提供了反馈机制,通过ICMP,路由器和目的主机能够与源主机通信,报告数据传输过程中的错误和控制消息。

2Echo请求和应答

    Echo主要用来探测另一个主机是否可达到。ICMP是在IP协议中传输的,成功接收到Echo应答表明源主机和目的主机的IPICMP可以正常工作,中间的路由器正确,可以成功转发数据,但不能确定源主机和目的主机的上层协议,如TCPUDP是否工作正常。

    TCP/IP协议提供了许多有用的工具帮助用户或网络管理员诊断网络问题,最常用的调试工具PingTraceroute就利用Echo的请求和应答报文。

3、目的地不可达

4、源抑制

5、重定向

6、路由通告与请求

7、超时


你可能感兴趣的:(IT书籍读书笔记)