1、1 TCPIP 起源Internet 起源于 1969 年,美国国防部研究计划管理局( ARPA-Advanced Resarch Projects Agency)开始建立一个命名为 ARPANET 的网络,当时建立这个网络的目的只是为了将美国的几个军事及研究用电脑主机连接起来。ARPA 技术包括一组规定计算机通讯细节的网络标准以及一组关于网络互联和通信量路由的约定,这就是 TCP/IP 协议族。使用它可以在任何相互连接的一系列网络之间进行通信后来这个网络的一部分成为当今 Internet 的前身1969 年年 DARPA(国防部高级研究项目局)建立了(国防部高级研究项目局)建立了 ARPAN
2、ET 最早出现的计算机网络之一。最早出现的计算机网络之一。1977 1979 年,推出目前形式的年,推出目前形式的 TCP/IP 体系结构和协议规范。体系结构和协议规范。1980 年前后,建造了以年前后,建造了以 ARPANET 为主干的计算机网络的代表性产品为主干的计算机网络的代表性产品 Internet。1983 年,年, BSD(伯克利加州大学)推出了内含(伯克利加州大学)推出了内含 TCP/IP 的第一个的第一个 BSD UNIX。1986 年,年, NSF(国家科学基金会)资助建立了(国家科学基金会)资助建立了 NSFNET, 成为成为 Internet 的一部分,并最终代替的一部分
3、,并最终代替 ARPANET,成,成为为 Internet 的主干。的主干。今天以今天以 TCP/IP 为基础的为基础的 Internet 已经成为世界范围内连接不同专业、不同领域的组织机构的强有力的手已经成为世界范围内连接不同专业、不同领域的组织机构的强有力的手段。段。2 TCPIP 模型(分层及各层功能) 分层的优点:1、 把复杂的问题分成几个简单的相互隔离的问题:通过分层,每层分别完成相对简单的功能;通过TCPIP 进行通讯涉及到一系列问题,诸如,分组如何寻址到目的端,如何保证分组可靠的到达,如何将分组发送到物理线路,数据包如何发送给目的主机的特定应用程序等2、 模块化:每一层内部的变化
4、不会影响其它层,每一层都可以独立于其它层进行开发3、 对等层通讯:每一层都认为自己在和对端的同一层在通讯各层功能如下:应用层:指用户使用应用程序通过 tcp/ip 互联网访问可用的服务,比如 ftp,telnet,www 等,直接与传输层交互,传输层(运输层):提供应用程序之间的通讯服务(用端口号标识) ,也称为端到端通讯。提供可靠的传输服务,确保数据到达无差错,无乱序,无重复,无丢包网络层:也就是 internet 层,用来处理机器之间的通讯(用 IP 地址标识) ,它接收传输层请求,发送,传输某个具有目的地址的分组,或者接收某个分组并上交给相应的传输层协议网络接口层:负责接收网络层发来的
5、IP 数据报文,并把报文通过选定的网络发送出去TCPIP 模型与 iso 模型的对应关系:分层的好处报文封装过程两台主机间的通讯过程TCPIP 组成TCPIP 是一个协议族,它包括一系列协议,如上图以 FTP 为 例3 IP 地址分类编制机制3.1 IP 地址的表示:IP 地址是一个 32 位的数,为了方便记忆和表示,通常写成四个十进制数,每个数对应一个字节,成为点分十进制表示法,比如:192.168.0.1 就是 11000000 10101000 00000000 00000001 的点分十进制表示法3.2 IP 地址是有结构的结构化好处是:1、使选路高效,2、节省路由器等转发设备的资源平
6、面化的地址将导致路由器上存储 232(4294967296)个路由表项A:1.0.0.0126.0.0.0 网络号长度 8bits,共 27-2 个网络 ,每个网络可用容纳 224-2 台主机B:128.0.0.0191.255.0.0 网络号长度 16bits, 共 214 个网络,每个网络可用容纳 216-2台主机C:192.0.0.0223.255.255.0 网络号长度 24bits, 共 221 个网络,每个网络可用容纳 28-2 台主机D:224.0.0.0239.255.255.255, 包含 228 个组播组E:240.0.0.0255.255.255.254(未使用)3.3
7、IP 地址的结构:网络号主机号,如 192.168.0.1,根据标准的地址分类机制其网络号为 192.168.0,主机号为 13.4 IP 地址的分类:单播,广播,组播单播:唯一的标识网络上的一个网络接口广播:给定网络上的所有主机,如受限广播地址,定向广播地址(见下文)组播:同一组内的所有主机3.5 几个概念约定全“0”代表自身,全“1”代表所有,产生如下的组合本主机:全“0” ,只能作为源地址,在启动时使用(少用)本网络上的所有主机:网络号全 0,即 0+hostid(少用)网络地址:主机号全为 0 的地址,即 netid0,比如 192.168.1.0定向广播地址:主机号全为 1 的地址,
8、即 netid1,发送给特定网络的全部主机,如 192.168.1.255受限广播地址:主机号和网络号全部为 1,即 255.255.255.255,有效的主机地址:主机号不能全为 0,或全为 1其它特殊地址私有网络地址:10.0.0.0/8, 172.16-31.0.0/12,192.168.0254.0/24,被确定为私有网络地址,未分配给任何Internet 用户环回地址(loopback):127.0.0.0 开头的地址,用于测试 tcp/ip 以及本机进程间的通讯4 无类别域间路由(CIDR)及子网编址4.1 为什么需要 CIDR?A:1.0.0.0126.0.0.0 网络号长度 8
9、bits,共 27-2=126 个网络,每个网络可用容纳 224-2=16,777,216台主机B:128.0.0.0191.255.0.0 网络号长度 16bits, 共 214=16,384 个网络,每个网络可用容纳 216-2=65,534台主机C:192.0.0.0223.255.255.0 网络号长度 24bits, 共 221= 2,097,152 个网络,每个网络可用容纳 28-2=254 台主机D:224.0.0.0239.255.255.255, 包含 228=268,435,456 个组播组E:240.0.0.0255.255.255.254(未使用)看上面的数字,主机数太
10、多:一个 B 类网络,可以容纳 65534 台主机,对于大多数网络来说网络数太少了:根据分类机制,总共存在 126+16385+2097152= 2,129,920 个网络,与数以亿记的用户相比,网络数少了用户需要组建两个网络,但只获得了一个 C 类地址上述三个原因就是 CIDR 产生的动力4.2 如何划分子网增加网络号部分的 bits 数,减少主机部分的 bits于是 IP 地址的构成如下netId subnetIdhostId比如用户获得一个 B 类网络 129.140.0.0,按照有类别的 B 类的结构, 129.140 为网络号(16bits),现在将主机号的一部分用作子网络号,如果子
11、网络的长度为 8bits,则在 129.140 网络下面划分出了 256 个子网络(24bits),分别为,129.140.0.0129.140.255.0/24129.140.00000000.0129.140.00000001.0129.140.00000010.0129.140.00000011.0-129.140.11111111.0如果子网络的长度为 4bits,即第三个 8 位组中 4bits 用于网络号,另外 4bits 用于主机号,则划分方法如下,129.140.0.0/20, 129.140.16.0/20-129.140.00000000.0129.140.00010000
12、.0129.140.00100000.0129.140.00110000.0-129.140.11110000.05 TCPIP 主要协议介绍:ARP, IP,ICMP,TCP,UDP5.1 IP基础协议,是 ICMP,TCP, UDP 的承载协议IP 被定义为不可靠的,尽最大努力的,无连接的分组交付系统,IP 的三个特性:不可靠的(unreliable):不保证交付,报文可能丢失,重复,延迟,乱序尽最大努力的(best effort):不随意丢弃分组,只有在资源不足,硬件故障等特定情况下才会出现不可靠现象无连接的(connectionless):每个分组独立传输,发送方和接收方,以及中间设备
13、都不维护端到端的收发信息IP 包头格式RFC 791 http:/www.cis.ohio-state.edu/htbin/rfc/rfc791.html4 8 16 32 bits Ver. IHL Type of service Total length Identification Flags Fragment offset Time to live Protocol Header checksum Source address Destination address Option + Padding Data IP 头结构版本号: 4,只能为 4 首部长度: 4bits,最大值 60,
14、最小值 20;采用 4 字节长度表示,5 表示 20bytesTOS:优先级 D :delay T:throughout R:reliability总长度 : 16bits,最大 65535,包括 IP 报文头以及数据部分的全部长度分片标志: DF (1,不可分段; 0,可分段) MF( 1,最后一个包;0,还有分片的包) Bit 0: reserved, must be zeroBit 1: (DF) 0 = May Fragment, 1 = Dont Fragment.Bit 2: (MF) 0 = Last Fragment, 1 = More Fragments.0 1 2+-+-+
15、-+| | D | M | 0 | F | F |+-+-+-+数据偏移量:8 个 8 位组(octets)的整数倍TTL: 255协议类型:校验和:只计算 IP 首部,不计算数据字段。将首部进行 16 比特整数序列求反码然后相加再进行一次二进制反码求和。源地址:目的地址:的合法性IP 选项:记录路由;严格源站选路;松散源站选路;安全选项;时间戳选项等;一个实际的 IP 报文解包信息IP 分片和重组:为何分片?MTU:最大传输单元,不同类型的网络, mtu 不同当需要发送的 IP 数据包超过链路所容许的 mtu,即要分片,如下图:如何分片?Ethernet 最大 mtu 为 1500bytes
16、,通过它发送一个 1501bytes 的数据包,分片如下:实际分片的例子第一分片:最后一个分片:IP 包重组是分片的逆过程:来自同一个 IP 地址,Identification 相同的包分片前必然属于同一个 IP 包,在利用偏移量可以将各个分片重新组装成原来的包分片可能发生在数据包的发起设备或任何一台中间转发设备,但只能在目的设备重组5.2 ARP(以太网)根据对方的 IP 地址获得其 Mac 地址的机制IP 数据包必须封装到二层数据帧中才能实际发送到物理线路上,二层数据帧的源和目的是用 Mac 地址来标识的ARP 报文封装在二层以太网帧当中RFC826 http:/www.cis.ohio-
17、state.edu/htbin/rfc/rfc826.html16 32 bits Hardware Type Protocol Type HLen Plen Operation Sender Hardware Address Sender Protocol Address Target Hardware Address Target Protocol Address ARP 头结构 Hardware typeSpecifies a hardware interface type for which the sender requires a response.Protocol typeSpe
18、cifies the type of high-level protocol address the sender has supplied.0x0800 是 IPHLenHardware address length.以太网是 6bytes,PLenProtocol address length.IP 是 4bytesOperationThe values are as follows:1 ARP request. 2 ARP response. 3 RARP request. 4 RARP response. 5 Dynamic RARP request. 6 Dynamic RARP r
19、eply. 7 Dynamic RARP error. 8 InARP request. 9 InARP reply. Sender hardware address 源 mac 地址,HLen bytes in length.Sender protocol address,源协议地址,PLen bytes in length.Target hardware address,目的 mac 地址,HLen bytes in length.Target protocol address,目的协议地址,PLen bytes in length.ARP 获得 Mac 地址的过程如下下面 4 台设备的
20、IP 地址分别为 A,B,C,D,Mac 地址分别为 Mac-A,Mac-B,Mac-C ,Mac-D假设设备 A 要发送数据给 C,首先会去请求 C 的 Mac 地址A:(广播给所有主机) ,谁的 IP 地址是 C,请把你的 Mac 地址告诉我,我的 Mac 地址是 Mac-A数据报文的格式如下16 32 bits 1 IP(0x0800) 6bytes 4bytes (Request)1 Mac-A (Sender Hardware Address)A(Sender Protocol Address)0 (Target Hardware Address)C (Target Protocol
21、 Address)ARP Request 头结构 C:(仅发送给主机 A) ,我是 C,我知道你(A)的 Mac 地址是 Mac-A,我的 Mac 地址是 Mac-C,数据报文的格式如下16 32 bits 1 IP(0x0800) 6bytes 4bytes (Request)2 Mac-C (Sender Hardware Address)C(Sender Protocol Address)Mac-A (Target Hardware Address)A (Target Protocol Address)ARP 头结构 5.3 ICMPInternet Control Message Pr
22、otocolRFC792 http:/www.cis.ohio-state.edu/htbin/rfc/rfc792.htmlICMP 的功能:IP 是不可靠协议,分组会由于某些原因而无法交付给目的设备的指定应用,执行丢弃操作的设备通过 ICMP 向源设备通告出错信息,因此 ICMP 是一种差错报告机制。它不是差错更正机制,不负责纠正这种错误。ICMP 报文头结构8 16 32 bits Type Code Checksum ICMP header structureType Code Description 0 Echo reply. 3 Destination unreachable. 3
23、 0 Net unreachable. 3 1 Host unreachable. 3 2 Protocol unreachable. 3 3 Port unreachable. 3 4 Fragmentation needed and DF set. 3 5 Source route failed. 4 Source quench. 5 Redirect. 5 0 Redirect datagram for the network. 5 1 Redirect datagram for the host. 5 2 Redirect datagram for the type of servic
24、e and network. 5 3 Redirect datagram for the type of service and host. 8 Echo. 11 Time exceeded. 11 0 Time to live exceeded in transit. 11 1 Fragments reassemble time exceeded. 12 Parameter problem. 13 Time stamp. 14 Timestamp reply. 15 Information request. 16 Information reply. ChecksumThe 16-bit o
25、nes complement of the ones complement sum of the ICMP message starting with the ICMP Type. For computing the checksum, the checksum field should be zero.任何 IP 设备都不会主动发送 ICMP 报文,仅在无法把分组正确交付给目的地( Echo Request 报文除外)或其它需要通知源端的信息时才产生5.4 TCP可靠的传输协议TCP 提供一种面向连接的、可靠的节流服务面向连接: TCP 为每个数据流初始化并维护特定的状态信息的组合,称为一个
26、连接;每个连接由标识该连接两端的一对套接字唯一确定,套接字是由端口号和 IP 地址确定,在全网范围内是唯一的;当两个进程希望通信时,它们的 TCP 必须首先建立一个连接,通信完成时,该连接要终止或关闭,释放资源比如下图中的 Client 访问 Server 时的 TCP 连接如下:(129.140.100,5120)(99.10.100.1,80)唯一标识出一对 TCP 连接可靠的:通过“带重传的肯定确认”技术,保证分组按顺序,无重复,无丢失到达(类似于对讲机和电话),肯定确认指,发送端对于每个发出的分组都要求接收方确认,重传指,在约定的时间期限内未收到确认则重发分组字节流服务:TCP 传输的
27、是数据流,它并不解释其中的内容TCP 报文的封装TCP 连接的建立和终止(三次握手和文雅关闭)详细解释每个过程建链:需要交互 3 个数据包关闭:需要交互 4 个数据包,主动关闭的一端要停留在 TIME_WAIT 2MLS 时长可靠性保证机制:滑动窗口三个指针:最左边一个:发送并已经得到确认的 8 位组边界最右边一个:未得到确认的情况下,当前可以发送的最高 8 位组的序号中间一个:已经发送但未被确认与即将发送的 8 位组之间的界限分组被确认之后,窗口向后滑动,才可以继续发送后面的分组,用该机制保证可靠性拥塞控制机制发送窗口的大小可调,其值取“自身的拥塞窗口”及“对端的接收窗口”中的较小的一个慢启
28、动:在启动新连接的传输或拥塞之后增加通信量时,仅以一个报文座位拥塞窗口的初始值,每当收到一个确认信息后,将拥塞窗口增加 1加速递减:每次检测到分组丢失,发送窗口减半,指数减小RFC793 http:/www.cis.ohio-state.edu/htbin/rfc/rfc793.html5.5 UDP不可靠的传输协议传输层协议:与 TCP 相比,它提供不可靠的,无连接的数据报交付服务。与 IP 相比,它提供对同一主机上多个目的地址(通过端口来区分)的能力UDP 封装方式UDP 头部16 32 bits Source port Destination port Length Checksum D
29、ataUDP header structureUDP 长度字段:长度包括 UDP 报头校验和:包括头部,伪头部,数据三部分一个实际例子:各个协议在网络中的应用pc1 访问 pc3 的 www 服务ZTEpc1pc2 ZTE pc3R1Intert R21、确定是否本地投递If(DestIP&mask=LocalIP&mask)本地投递查找是否存在目的主机的 mac 地址,如果不存在,发送 arp 请求,如果得不到目的主机的 mac 地址,则发送失败,如果得到,则将目的主机的 mac 地址添到数据帧得适当位置Else发往外部网络IF 没有到达目的地址的路由,If 没有默认网关发送失败ELSEIF
30、 没有下一跳的 MAC发送 ARP 请求IF 得到 MAC发送PC1 涉及到的操作:ARP 请求(本地投递确定,路由查找,将数据适配到物理线路上,是否需要分片)pc1 发出的数据如下Etherheader IPheader TCPheader 用户数据mac-R1, mac-pc1 ip-pc3,ip-pc1,ttl=128srcPort=5000,dstPort=80用户数据R1 的操作:1、 检查数据包的目的地址是否为本地,如果是则上送的本地相应的协议,如果不是,执行 22、 确认是否本地投递,如果是则本地投递,如果不是则执行 33、 查找路由或默认路由,如果没有丢弃数据保,如果有路由,执
31、行 44、 是否有下一跳的 mac,如果没有,发送 ARP 请求,如果 ARP 失败则丢弃数据包5、 如果得到 mac 或已经存在下一跳的 mac,则检查是否需要分片,如果需要则分片,否则6、 将数据包封装在二层数据帧,发送给下一跳Etherheader IPheader TCPheader 用户数据 mac-Rx, mac-R1 ip-pc1,ip-pc3,ttl=127srcPort=5000,dstPort=80用户数据PC3 收到的数据包Etherheader IPheader TCPheader 用户数据mac-pc3,mac-R2ip-pc1,ip-pc3,ttl=128-nsrcPort=5000,dstPort=80用户数据网络问题查错pingarptrace